public async Task <IActionResult> CreateCustomer([FromBody] CreateUpdateCustomerRequest request) { var duplicateCustomerFilter = Builders <Customer> .Filter.Where(x => x.Email.Equals(request.Email.Trim().ToLower()) || (x.DocumentType.Equals(request.DocumentType.Trim().ToLower()) && x.DocumentNumber.Equals(request.DocumentNumber))); var customerAlreadyExists = await _mongoDbService.GetCollection <Customer>(Collections.Customers) .Find(duplicateCustomerFilter).AnyAsync(); if (customerAlreadyExists) { throw new CustomException("Duplicate email or document number."); } var session = await _mongoDbService.StartTransactionAsync(); var newCustomer = new Customer() { FullName = request.FullName.Trim(), Address = request.Address.Trim(), PhoneNumber = request.PhoneNumber.Trim(), Email = request.Email.Trim().Normalize().ToLowerInvariant(), DocumentType = request.DocumentType.Trim().ToLowerInvariant(), DocumentNumber = request.DocumentNumber, Active = true }; await _mongoDbService.GetCollection <Customer>(Collections.Customers).InsertOneAsync(session, newCustomer); await _mongoDbService.CommitTransactionAsync(); return(new SuccessResult()); }
public async Task <IActionResult> UpdateCustomer([FromBody] CreateUpdateCustomerRequest request) { var customerFilter = Builders <Customer> .Filter.Where(x => x.Id.Equals(request.Id)); var validCustomer = await _mongoDbService.GetCollection <Customer>(Collections.Customers) .Find(customerFilter).AnyAsync(); if (!validCustomer) { throw new CustomException("Invalid customer specified."); } var duplicateCustomerFilter = Builders <Customer> .Filter.Where(x => !x.Id.Equals(request.Id) && (x.Email.Equals(request.Email.Trim().ToLower()) || (x.DocumentType.Equals(request.DocumentType.Trim().ToLower()) && x.DocumentNumber.Equals(request.DocumentNumber)))); var customerAlreadyExists = await _mongoDbService.GetCollection <Customer>(Collections.Customers) .Find(duplicateCustomerFilter).AnyAsync(); if (customerAlreadyExists) { throw new CustomException("Duplicate email or document number."); } var session = await _mongoDbService.StartTransactionAsync(); var updateDefinition = new UpdateDefinitionBuilder <Customer>() .Set(x => x.FullName, request.FullName.Trim()) .Set(x => x.Address, request.Address.Trim()) .Set(x => x.PhoneNumber, request.PhoneNumber.Trim()) .Set(x => x.Email, request.Email.Trim().Normalize().ToLowerInvariant()) .Set(x => x.DocumentType, request.DocumentType.Trim().ToLowerInvariant()) .Set(x => x.DocumentNumber, request.DocumentNumber); await _mongoDbService.GetCollection <Customer>(Collections.Customers) .UpdateOneAsync(session, customerFilter, updateDefinition); await _mongoDbService.CommitTransactionAsync(); return(new SuccessResult()); }