예제 #1
0
        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());
        }
예제 #2
0
        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());
        }