Exemplo n.º 1
0
        public AccountResponse LoginAccount(AccountLoginRequest request, Guid SessionID)
        {
            Sessions session = dbContext.Sessions
                               .Where(s => s.SessionId.Equals(SessionID) && s.LastActivity < DateTime.Now.AddDays(1))
                               .FirstOrDefault();

            if (session == null)
            {
                throw new BusinessLogicException(HttpStatusCode.BadRequest, ResponseCode.INVALID_LOGIN_SESSION.ToString());
            }

            String passHash = PasswordHelper.ConvertToSHA512(request.Password);
            Users  user     = dbContext.Users
                              .Where(u => u.Email.Equals(request.Email))
                              .FirstOrDefault();

            if (user == null)
            {
                throw new BusinessLogicException(HttpStatusCode.BadRequest, ResponseCode.USER_NOT_EXIST.ToString());
            }

            Users checkPass = dbContext.Users
                              .Where(u => u.Email.Equals(request.Email) && u.PasswordHash.Equals(passHash))
                              .FirstOrDefault();

            if (checkPass == null)
            {
                throw new BusinessLogicException(HttpStatusCode.BadRequest, ResponseCode.WRONG_COMBINATION_EMAIL_AND_PASSWORD.ToString());
            }

            Genders gender = dbContext.Genders.Find(checkPass.GenderId);

            session.IsLogin      = true;
            session.UserId       = checkPass.UserId;
            session.LastActivity = DateTime.Now;

            using (IDbContextTransaction transaction = dbContext.Database.BeginTransaction())
            {
                try
                {
                    dbContext.Sessions.Update(session);
                    dbContext.SaveChanges();
                    transaction.Commit();
                }
                catch
                {
                    transaction.Rollback();
                    throw new BusinessLogicException(HttpStatusCode.InternalServerError, ResponseCode.FAILED_TO_LOGIN.ToString());
                }
            }

            return(ConstructResponse(checkPass, gender));
        }
Exemplo n.º 2
0
        public AccountResponse RegisterAccount(AccountCreationRequest request, Guid SessionID)
        {
            Sessions session = dbContext.Sessions
                               .Where(s => s.SessionId.Equals(SessionID) && s.LastActivity < DateTime.Now.AddDays(1))
                               .FirstOrDefault();

            if (session == null)
            {
                throw new BusinessLogicException(HttpStatusCode.BadRequest, ResponseCode.INVALID_SESSION.ToString());
            }

            Users checkUser = dbContext.Users
                              .Where(u => u.Email.Equals(request.Email))
                              .FirstOrDefault();

            if (checkUser != null)
            {
                throw new BusinessLogicException(HttpStatusCode.BadRequest, ResponseCode.USER_ALREADY_REGISTERED.ToString());
            }

            Genders gender = dbContext.Genders.Find(request.Gender);

            if (gender == null)
            {
                throw new BusinessLogicException(HttpStatusCode.BadRequest, ResponseCode.NOT_VALID_GENDER.ToString());
            }

            Users newUser = new Users();

            newUser.UserId       = Guid.NewGuid();
            newUser.FirstName    = request.FirstName;
            newUser.LastName     = request.LastName;
            newUser.Email        = request.Email;
            newUser.PasswordHash = PasswordHelper.ConvertToSHA512(request.Password);
            newUser.GenderId     = request.Gender;
            newUser.Age          = request.Age;
            newUser.CreatedDate  = DateTime.Now;
            newUser.CreatedBy    = request.Email;
            newUser.UpdatedDate  = DateTime.Now;
            newUser.UpdatedBy    = request.Email;

            Roles     role      = dbContext.Roles.Where(r => r.Name.Equals("Client")).FirstOrDefault();
            UserRoles userRoles = new UserRoles();

            userRoles.UserId = newUser.UserId;
            userRoles.RoleId = role.RoleId;

            using (IDbContextTransaction transaction = dbContext.Database.BeginTransaction())
            {
                try
                {
                    dbContext.Users.Add(newUser);
                    dbContext.UserRoles.Add(userRoles);
                    dbContext.SaveChanges();
                    transaction.Commit();
                }
                catch
                {
                    transaction.Rollback();
                    throw new BusinessLogicException(HttpStatusCode.InternalServerError, ResponseCode.FAILED_TO_REGISTER_ACCOUNT.ToString());
                }
            }

            var task = kafkaProducer.SendToKafka(JsonConvert.SerializeObject(ConstructKafkaRequest(newUser, gender, "CREATE")));

            return(ConstructResponse(newUser, gender));
        }