public async Task <IActionResult> CreateAccountAsync([FromBody] AccountCreateModel model) { if (string.IsNullOrWhiteSpace(model.Password)) { throw new IsRequiredException("password"); } if (model.Password.Length < 8 || model.Password.Length > 20) { throw new PasswordIsInvalidException(); } if (model.Name != null) { if (model.Name.Length > 50) { throw new NameIsInvalidException(); } } if (model.BirthDate.HasValue) { if (model.BirthDate.Value.Year < Constants.MinBirthDate.Year || model.BirthDate.Value.Year > DateTime.Now.Year - Constants.MinAge) { throw new BirthDateIsInvalidException(); } } if (model.Email != null) { if (!model.Email.IsEmail()) { throw new EmailIsInvalidException(); } if (await _accountRepository.AnyByEmailAsync(model.Email)) { throw new AlreadyExistsException("email"); } } if (model.Phone != null) { if (!model.Phone.IsMobile()) { throw new PhoneIsInvalidException(); } if (await _accountRepository.AnyByPhoneAsync(model.Phone)) { throw new AlreadyExistsException("phone"); } } if (string.IsNullOrWhiteSpace(model.AccountId)) { throw new IsRequiredException("accountId"); } if (model.AccountId.Length > 20) { throw new AccountIdIsInvalidException(); } if (await _accountRepository.AnyByIdAsync(model.AccountId)) { throw new AlreadyExistsException("account"); } if (model.WardId.HasValue) { if (!await _wardRepository.AnyByIdAsync(model.WardId.Value)) { throw new NotFound400Exception("ward"); } } var now = DateTime.Now; var account = new Account { AccountId = model.AccountId, GroupId = 4, WardId = model.WardId.HasValue ? model.WardId.Value : 0, Password = model.Password, Name = model.Name != null ? model.Name : null, Gender = model.Gender.HasValue ? model.Gender.Value : null, BirthDate = model.BirthDate.HasValue ? model.BirthDate : null, Address = model.Address != null ? model.Address : null, Email = model.Email != null ? model.Email : null, Phone = model.Phone != null ? model.Phone : null, CreatedDate = now, UpdatedDate = now }; await _accountRepository.CreateAccountAsync(account); return(Ok(AccountDTO.GetFrom(account))); }
public async Task <IActionResult> CreateCampaignAsync([FromBody] CampaignCreateModel model) { if (model.WardId == 0) { throw new IsRequiredException("ward"); } if (!await _wardRepository.AnyByIdAsync(model.WardId)) { throw new NotFound400Exception("ward"); } if (model.CategoryId == 0) { throw new IsRequiredException("category"); } if (!await _categoryRepository.AnyByIdAsync(model.CategoryId)) { throw new NotFound400Exception("category"); } if (string.IsNullOrWhiteSpace(model.Name)) { throw new IsRequiredException("name"); } if (model.Name.Length > 50) { throw new NameIsInvalidException(); } if (string.IsNullOrWhiteSpace(model.Description)) { throw new IsRequiredException("description"); } if (model.Description.Length < 20) { throw new DescriptionIsInvalidException(); } if (string.IsNullOrWhiteSpace(model.Location)) { throw new IsRequiredException("location"); } if (model.Location.Length > 100) { throw new LocationIsInvalidException(); } if ((int)model.Type < 0 || (int)model.Type > Enum.GetNames(typeof(CampaignType)).Length) { throw new TypeIsInvalidException(); } if (model.RegistrationStartDate == DateTime.MinValue) { throw new IsRequiredException("startDate"); } if (model.RegistrationEndDate == DateTime.MinValue) { throw new IsRequiredException("endDate"); } if (model.RegistrationStartDate >= model.RegistrationEndDate) { throw new StartDateMustBeBeforeEndDateException(); } if (model.ExecutionStartDate == DateTime.MinValue) { throw new IsRequiredException("startDate"); } if (model.ExecutionEndDate == DateTime.MinValue) { throw new IsRequiredException("endDate"); } if (model.ExecutionStartDate >= model.ExecutionEndDate) { throw new StartDateMustBeBeforeEndDateException(); } if (model.RegistrationEndDate.AddDays(2) >= model.ExecutionStartDate) { throw new ExecutionDateRangeMustBeAfterRegistrationDateRangeException(); } var now = DateTime.Now; var campaign = new Campaign { AccountId = CurrentAccountId, CategoryId = model.CategoryId, WardId = model.WardId, Name = model.Name, Image = model.Image, Description = model.Description, Location = model.Location, Type = model.Type, RegistrationStartDate = model.RegistrationStartDate, RegistrationEndDate = model.RegistrationEndDate, ExecutionStartDate = model.ExecutionStartDate, ExecutionEndDate = model.ExecutionEndDate, CreatedDate = now, UpdatedDate = now }; await _campaignRepository.CreateCampaignAsync(campaign); return(Ok(CampaignDTO.GetFrom(campaign))); }