예제 #1
0
        public async Task <IActionResult> Handle(EditUserCommand request, CancellationToken cancellationToken)
        {
            var user = await _context.Users.FindAsync(request.UserId);

            if (user == null)
            {
                return(new NotFoundObjectResult(new ErrorModel(ErrorMessages.NotFound, ErrorCodes.NotFound)));
            }

            // make sure no duplicate fullname
            if (request.Body?.FullName != null && !string.Equals(user.FullName, request.Body.FullName, StringComparison.InvariantCultureIgnoreCase))
            {
                if (await _context.Users.AnyAsync(x => x.FullName.ToLower() == request.Body.FullName.ToLower(),
                                                  cancellationToken))
                {
                    return(new ConflictObjectResult(new ErrorModel("Nama sudah digunakan oleh akun lain",
                                                                   ErrorCodes.DataDuplicated)));
                }
            }

            // make sure no duplicate username
            if (request.Body?.Username != null && !string.Equals(user.Username, request.Body.Username, StringComparison.InvariantCultureIgnoreCase))
            {
                if (await _context.Users.AnyAsync(x => x.FullName.ToLower() == request.Body.Username.ToLower(),
                                                  cancellationToken))
                {
                    return(new ConflictObjectResult(new ErrorModel("Username sudah digunakan oleh akun lain",
                                                                   ErrorCodes.DataDuplicated)));
                }
            }

            // calculate shipping cost
            if (request.Body?.Latitude != null &&
                request.Body?.Longitude != null &&
                _bingMaps.IsPointDifferent(user.Latitude,
                                           user.Longitude,
                                           request.Body.Latitude.Value,
                                           request.Body.Longitude.Value))
            {
                var distance = await _bingMaps.CalculateDistance(request.Body.Latitude.Value,
                                                                 request.Body.Longitude.Value, _config.CompanyLatitude, _config.CompanyLongitude, cancellationToken);

                user.ShippingCost = _config.FlatShippingCost * (decimal)distance;
            }

            // project and save the entity
            var updatedEntity = _mapper.Map(request.Body, user);

            _context.Users.Update(updatedEntity);
            await _context.SaveChangesAsync(cancellationToken);

            _logger.LogInformation("Updated user with ID {0}", user.UserId);
            return(new JsonResult(_mapper.Map <UserProfileDto>(user)));
        }
예제 #2
0
        public async Task <IActionResult> Handle(EditSupplierCommand request, CancellationToken cancellationToken)
        {
            var supplier = await _context.Suppliers.FindAsync(new object[] { request.SupplierId }, cancellationToken);

            if (supplier == null)
            {
                return(new NotFoundObjectResult(new ErrorModel(ErrorMessages.NotFound, ErrorCodes.NotFound)));
            }

            // make sure no duplicate name
            if (request.Body?.Name != null && !string.Equals(supplier.Name, request.Body.Name, StringComparison.InvariantCultureIgnoreCase))
            {
                if (await _context.Suppliers.AnyAsync(x => x.Name.ToLower() == request.Body.Name.ToLower(),
                                                      cancellationToken))
                {
                    return(new ConflictObjectResult(new ErrorModel("Nama sudah digunakan pada supplier sebelumnya.",
                                                                   ErrorCodes.DataDuplicated)));
                }
            }

            // calculate shipping cost
            if (request.Body?.Latitude != null &&
                request.Body?.Longitude != null &&
                _bingMaps.IsPointDifferent(supplier.Latitude,
                                           supplier.Longitude,
                                           request.Body.Latitude.Value,
                                           request.Body.Longitude.Value))
            {
                var distance = await _bingMaps.CalculateDistance(request.Body.Latitude.Value,
                                                                 request.Body.Longitude.Value, _config.CompanyLatitude, _config.CompanyLongitude, cancellationToken);

                supplier.ShippingCost = _config.FlatShippingCost * (decimal)distance;
            }

            var updatedEntity = _mapper.Map(request.Body, supplier);

            _context.Suppliers.Update(updatedEntity);
            await _context.SaveChangesAsync(cancellationToken);

            _logger.LogInformation("Updated supplier with ID {0}", supplier.SupplierId);
            return(new JsonResult(supplier));
        }