Esempio n. 1
0
        public async Task <IActionResult> CreateSupplier([FromBody] CreateUpdateSupplierRequest request)
        {
            var duplicateSupplierFilter = Builders <Supplier> .Filter.Where(x =>
                                                                            x.Email.Equals(request.Email.Trim().ToLower()) ||
                                                                            (x.DocumentType.Equals(request.DocumentType.Trim().ToLower()) && x.DocumentNumber.Equals(request.DocumentNumber)));

            var supplierAlreadyExists = await _mongoDbService.GetCollection <Supplier>(Collections.Suppliers)
                                        .Find(duplicateSupplierFilter).AnyAsync();

            if (supplierAlreadyExists)
            {
                throw new CustomException("Duplicate email or document number.");
            }

            var session = await _mongoDbService.StartTransactionAsync();

            var newSupplier = new Supplier()
            {
                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 <Supplier>(Collections.Suppliers).InsertOneAsync(session, newSupplier);

            await _mongoDbService.CommitTransactionAsync();

            return(new SuccessResult());
        }
Esempio n. 2
0
        public async Task <IActionResult> UpdateSupplier([FromBody] CreateUpdateSupplierRequest request)
        {
            var supplierFilter = Builders <Supplier> .Filter.Where(x => x.Id.Equals(request.Id));

            var validSupplier = await _mongoDbService.GetCollection <Supplier>(Collections.Suppliers)
                                .Find(supplierFilter).AnyAsync();

            if (!validSupplier)
            {
                throw new CustomException("Invalid Supplier specified.");
            }

            var duplicateSupplierFilter = Builders <Supplier> .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 supplierAlreadyExists = await _mongoDbService.GetCollection <Supplier>(Collections.Suppliers)
                                        .Find(duplicateSupplierFilter).AnyAsync();

            if (supplierAlreadyExists)
            {
                throw new CustomException("Duplicate email or document number.");
            }

            var session = await _mongoDbService.StartTransactionAsync();

            var updateDefinition = new UpdateDefinitionBuilder <Supplier>()
                                   .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 <Supplier>(Collections.Suppliers)
            .UpdateOneAsync(session, supplierFilter, updateDefinition);

            await _mongoDbService.CommitTransactionAsync();

            return(new SuccessResult());
        }