JSFiddle - React, Tailwind, and code Playground

HTML

<div ng:app="app" ng:controller="MainCtrl">
    <p>{{user}}</p>
    <button ng:click="refresh()">Refresh</button>
</div>

JavaScript

angular.module('app.api.rest.user', [])
.factory('UserApi', function($timeout){
    var UserApi = {};
    
    UserApi.get = function(id){
        return $timeout(function(){
            return {
                id: 1,
                name: 'Artem',
                someVal: Math.random()
            }
        }, 1000);
    };
    
    return UserApi;
})

angular.module('app.api.entities.user', ['app.api.rest.user'])

.factory('User', function($q, UserApi) {
    var cache = {};

    var initObject = function(data) {
        if (cache[data.id]) {
            angular.extend(cache[data.id], new User(data));
        } else {
            cache[data.id] = new User(data);
        }
        return cache[data.id];
    };

    var User = function(data) {
        angular.extend(this, data);
    };

    User.get = function(id){
        var apiResult = UserApi.get(id).then(function (test) {
            return initObject(test);
        });

        if (cache[id]) {
            return $q.when(cache[id]);
        } else {
            return apiResult;
        }
    };

    User.getAll = function(options){
        return UserApi.getAll(options).then(function(tests){
            return _.map(tests, function(test){ return initObject(test); });
        });
    };

    User.create = function(params){
        return UserApi.create(params);
    };

    User.prototype.remove = function(){
        return UserApi.remove(this.id);
    };

    return User;
});

angular.module('app', ['app.api.entities.user'])
.controller('MainCtrl', function($scope, User){
    $scope.refresh = function(){
        $scope.user = User.get(1);
    };
    $scope.refresh();
});