Example #1
0
 public async Task <bool> isCustomerAlreadyExisted(CustomerSaveDto customerSave)
 {
     return(await _context.Customers
            .AnyAsync(x => x.FirstName.ToLower() == customerSave.FirstName.ToLower() &&
                      x.MiddleName.ToLower() == customerSave.MiddleName.ToLower() &&
                      x.LastName.ToLower() == customerSave.LastName.ToLower()));
 }
Example #2
0
 public async Task <ErrorValidator> Validate(Customer entity, CustomerSaveDto resourceSave)
 {
     if (entity.FirstName != resourceSave.FirstName ||
         entity.MiddleName != resourceSave.MiddleName ||
         entity.LastName != resourceSave.LastName)
     {
         if (await isCustomerAlreadyExisted(resourceSave))
         {
             return(new ErrorValidator("Customer Already Exist!"));
         }
     }
     if (entity.CellphoneNumber != resourceSave.CellphoneNumber)
     {
         if (await isContactNumberAlreadyExisted(resourceSave.CellphoneNumber))
         {
             return(new ErrorValidator("Contact Number Already Existed"));
         }
     }
     if (entity.EmailAddress != resourceSave.EmailAddress)
     {
         if (!isValidEmailAddress(resourceSave.EmailAddress))
         {
             return(new ErrorValidator("Invalid Email Address"));
         }
         if (await isEmailAddressAlreadyExisted(resourceSave.EmailAddress))
         {
             return(new ErrorValidator("Email Address Already Existed"));
         }
     }
     return(new ErrorValidator());
 }
        public HttpResponseMessage Update(CustomerSaveDto targetCustomer)
        {
            if (!ModelState.IsValid)
            {
                return(Request.CreateResponse());
            }

            var payload    = _service.Update(targetCustomer);
            var statusCode = (payload?.Errors?.Count ?? 0) > 0 ? HttpStatusCode.BadRequest : HttpStatusCode.OK;

            return(Request.CreateResponse(statusCode, payload));
        }
        /// <summary>
        ///     attempts to create a new customer based on the model provided
        /// </summary>
        /// <param name="customer">a JSON-serialized customer model containing all info needed to create a customer</param>
        /// <returns>a response model containing the results of the validation/transaction</returns>
        public ResponseModel Create(CustomerSaveDto customer)
        {
            //TODO: validate model using modelstate

            var responsePayload = new ResponseModel();

            _unitOfWork.CustomerRepository.Create(Mapper.Map <Customer>(customer));
            _unitOfWork.SaveChanges();

            responsePayload.Message = "success";

            return(responsePayload);
        }
        public HttpResponseMessage Create(CustomerSaveDto customer)
        {
            if (!ModelState.IsValid)
            {
                return(Request.CreateResponse());
            }

            var responseModel = _service.Create(customer);

            responseModel.Message = "success";

            return(Request.CreateResponse(HttpStatusCode.OK, responseModel));
        }
Example #6
0
 public async Task <ErrorValidator> Validate(CustomerSaveDto resourceSave)
 {
     if (await isCustomerAlreadyExisted(resourceSave))
     {
         return(new ErrorValidator("Customer Already Exist!"));
     }
     if (await isContactNumberAlreadyExisted(resourceSave.CellphoneNumber))
     {
         return(new ErrorValidator("Contact Number Already Existed"));
     }
     if (!isValidEmailAddress(resourceSave.EmailAddress))
     {
         return(new ErrorValidator("Invalid Email Address"));
     }
     if (await isEmailAddressAlreadyExisted(resourceSave.EmailAddress))
     {
         return(new ErrorValidator("Email Address Already Existed"));
     }
     return(new ErrorValidator());
 }
        public async Task <IActionResult> Create([ModelBinder(BinderType = typeof(JsonModelBinder))][FromBody] CustomerSaveDto resourceSave, IFormFile profilePictureFile)
        {
            _auditTrailRepo.User = User;
            var activity  = Validator.GenerateActivity(resourceSave, TransactionType.ADD);
            var validator = await _validator.Validate(resourceSave);

            if (validator.HasError)
            {
                await _auditTrailRepo.SaveFailedTrail(new AuditTrailFailedSaveDto()
                {
                    Action       = TransactionType.ADD,
                    Activity     = activity,
                    ErrorMessage = validator.Message
                });

                return(BadRequest(validator.Message));
            }
            var customer = _mapper.Map <Customer>(resourceSave);

            _crudPattern.Create(customer);
            var newFileName = $"{Guid.NewGuid()}{Path.GetExtension(profilePictureFile.FileName)}";

            customer.ProfilePictureFileName = newFileName;

            if (!await _crudPattern.SaveChanges())
            {
                return(BadRequest("Nothing has been Saved!"));
            }

            await _blobStorageRepo.UploadFile(profilePictureFile, newFileName);


            await _auditTrailRepo.SaveSuccessTrail(new AuditTrailSuccessSaveDto()
            {
                Action   = TransactionType.ADD,
                Activity = activity
            });

            return(StatusCode(201));
        }
        public async Task <IActionResult> Update([FromRoute] int id, [FromBody] CustomerSaveDto resourceSave)
        {
            _auditTrailRepo.User = User;
            var customer = await _crudPattern.Get(id);

            if (customer == null)
            {
                return(NotFound());
            }
            var activity  = Validator.GetDifferences(customer, _mapper.Map <Customer>(resourceSave));
            var validator = await _validator.Validate(customer, resourceSave);

            if (validator.HasError)
            {
                await _auditTrailRepo.SaveFailedTrail(new AuditTrailFailedSaveDto()
                {
                    Action       = TransactionType.EDIT,
                    Activity     = activity,
                    ErrorMessage = validator.Message,
                });

                return(BadRequest(validator.Message));
            }

            _crudPattern.Update(resourceSave, customer);

            if (!await _crudPattern.SaveChanges())
            {
                return(BadRequest("Nothing has been Saved!"));
            }


            await _auditTrailRepo.SaveSuccessTrail(new AuditTrailSuccessSaveDto()
            {
                Action   = TransactionType.EDIT,
                Activity = activity
            });

            return(Ok(customer));
        }
        /// <summary>
        ///     attempts to update an existing customer based on the model provided
        /// </summary>
        /// <param name="customer">a JSON-serialized customer model containing updated info with an Id that matches an existing customer </param>
        /// <returns>a response model containing the results of the validation/transaction. </returns>
        public ResponseModel Update(CustomerSaveDto customer)
        {
            /* create empty response model.  will return no matter what happens next */
            var response = new ResponseModel(new List <string>());

            var customerEntityToUpdate = _unitOfWork.CustomerRepository.GetById(customer.Id);

            if (customerEntityToUpdate == null)
            {
                response.Message = "update failed.";
                response.Errors.Add($"no customer matching id {customer.Id} was found.");
                return(response);
            }

            customerEntityToUpdate.Age       = customer.Age;
            customerEntityToUpdate.Email     = customer.Email;
            customerEntityToUpdate.FirstName = customer.FirstName;
            customerEntityToUpdate.LastName  = customer.LastName;

            var addressEntityToUpdate = customerEntityToUpdate.Address;

            addressEntityToUpdate.Street     = customer.Address.Street;
            addressEntityToUpdate.Unit       = customer.Address.Unit;
            addressEntityToUpdate.City       = customer.Address.City;
            addressEntityToUpdate.State      = customer.Address.State;
            addressEntityToUpdate.PostalCode = customer.Address.PostalCode;

            customerEntityToUpdate.Address = addressEntityToUpdate;

            _unitOfWork.CustomerRepository.Update(customerEntityToUpdate);
            var result = _unitOfWork.SaveChanges();

            response.Result  = null;
            response.Message = result > 0 ? "success" : "no records updated";

            return(response);
        }
        public HttpResponseMessage Create(CustomerSaveDto newCustomer)
        {
            if (!ModelState.IsValid)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }

            try
            {
                var statusCode    = HttpStatusCode.OK;
                var responseModel = new CustomerResponseModel();

                var address = newCustomer.Address;

                var addressDbo = new Address()
                {
                    Street     = address.Street,
                    Unit       = address.Unit,
                    City       = address.City,
                    State      = address.State,
                    PostalCode = address.PostalCode
                };

                var customerDbo = new Customer()
                {
                    FirstName = newCustomer.FirstName,
                    LastName  = newCustomer.LastName,
                    Address   = addressDbo,
                    Age       = Convert.ToInt32(newCustomer.Age),
                    //Address_Id = Convert.ToInt32(newCustomer.Address_Id),
                    CreatedOn = DateTime.Now.ToUniversalTime(),
                    Email     = newCustomer.Email
                };

                CustomerServiceDb.Customers.Add(customerDbo);
                var rowsSaved = CustomerServiceDb.SaveChanges();

                if (rowsSaved > 0)
                {
                    responseModel.Message = "success";
                }

                //if(ModelState.IsValid)

                // var errors = new List<string>();
                //if (newCustomer == null)
                //{
                //    errors.Add("invalid customer.  customer was not added.");
                // }
                //             else
                //           {
                //   Validate(newCustomer);

                //                   if(ModelState.IsValid)

                //var message = "";
                //var isAgeValid = CustomerValidator.ValidateAge(newCustomer.Age, out message);

                //if (!isAgeValid)
                //{
                //    errors.Add(message);
                //}

                //var isFirstNameValid =
                //    CustomerValidator.ValidateFirstName(newCustomer.FirstName, out message);

                //if (!isFirstNameValid)
                //{
                //    errors.Add(message);
                //}

                //var isEmailValid = CustomerValidator.ValidateEmail(newCustomer.Email, out message);

                //if (!isEmailValid)
                //{
                //    errors.Add(message);
                //}

                //Validate

                //if(statusCode == HttpStatusCode.OK)
                {
                    //else errors.Add("unknown error.");
                }
                //}

                //if (errors.Count > 0)
                //{
                //    responseModel.Message = "failed to create customer";
                //    statusCode = HttpStatusCode.BadRequest;
                //}
                //responseModel.Errors = errors;
                return(Request.CreateResponse(statusCode, responseModel));
            }
            catch (Exception e)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e));
            }
        }