public HttpResponseMessage PostLoginUser(UserModel model)
        {
            var context = new BankSystemEntities();
            using (context)
            {

                var user = context.Users.FirstOrDefault(
                    u => u.Username == model.Username.ToLower()
                    && u.Password == model.Password);

                if (user == null)
                {
                    throw new InvalidOperationException("Invalid username or password");
                }
                if (user.AuthKey == null)
                {
                    user.AuthKey = this.GenerateSessionKey(user.Id);
                    context.SaveChanges();
                }

                var loggedModel = new LoggedUserModel()
                {
                    Id = user.Id,
                    Username = user.Username,
                    SessionKey = user.AuthKey
                };

                var response =
               this.Request.CreateResponse(HttpStatusCode.Created,
                               loggedModel);
                return response;
            }
        }
        public UserMoneyModel GetUser(string sessionKey)
        {
            var context = new BankSystemEntities();
            using (context)
            {
                var user = context.Users.FirstOrDefault(
                    u => u.AuthKey == sessionKey);

                if (user == null)
                {
                    throw new InvalidOperationException("No user with such sessionKey logged");
                }
                else
                {
                    var model = new UserMoneyModel()
                    {
                        Id = user.Id,
                        AvelableMoney = user.AvelableMoney

                    };

                    return model;
                }
            }
        }
        public HttpResponseMessage PostLoginUser(User user)
        {
            BankSystemEntities context = new BankSystemEntities();

            using (context)
            {
                context.Users.Add(user);
                context.SaveChanges();

                user.AuthKey = this.GenerateSessionKey(user.Id);
                context.SaveChanges();

                var response =
                    this.Request.CreateResponse(HttpStatusCode.Created,
                                    user);
                return response;
            }
        }
        public ICollection<LogModel> GetGrid(string sessionKey)
        {
            var context = new BankSystemEntities();
            var user = context.Users.FirstOrDefault(u => u.AuthKey == sessionKey);

            if (user==null)
            {
                throw new InvalidOperationException("No such user loged");
            }

            var logs = context.LogInfoes.Where(l=> l.UserId==user.Id);

            var models =
                from log in logs
                select new LogModel()
                {
                    NewSum = log.NewSum,
                    OldSum = log.OldSum,
                    TransDate = log.TransDate
                };

            return models.ToList();
        }
        public HttpResponseMessage PutLogoutUser(int money,string sessionKey)
        {
            var context = new BankSystemEntities();
            using (context)
            {

                var user = context.Users.FirstOrDefault(u => u.AuthKey == sessionKey);
                if (user==null)
                {
                    throw new InvalidOperationException("There is no such user loged");
                }
                user.AvelableMoney = money;
                context.SaveChanges();

                var model = new UserMoneyModel()
                {
                    Id = user.Id,
                    AvelableMoney = user.AvelableMoney
                };

                var response =
                this.Request.CreateResponse(HttpStatusCode.OK,model);

                return response;
            }
        }
        public HttpResponseMessage PutLogoutUser(string sessionKey)
        {
            var context = new BankSystemEntities();
            using (context)
            {

                var user = context.Users.FirstOrDefault(
                    u => u.AuthKey == sessionKey);

                if (user == null)
                {
                    throw new InvalidOperationException("No user with such sessionKey logged");
                }
                user.AuthKey = null;
                context.SaveChanges();

                var response =
                this.Request.CreateResponse(HttpStatusCode.OK);

                return response;
            }
        }