示例#1
0
        public async Task <IActionResult> CreateTagAsync([FromBody] Client.TagCreationInfo creationInfo,
                                                         CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (creationInfo == null)
            {
                var error = ErrorResponsesService.BodyIsMissing(nameof(creationInfo));
                return(BadRequest(error));
            }

            var modelCreationInfo = Converter.TagCreationInfoConverter.Convert(creationInfo);

            Model.Tag modelTag;

            try
            {
                modelTag =
                    await repository.CreateAsync(modelCreationInfo, cancellationToken).ConfigureAwait(false);
            }
            catch (TagDuplicationException ex)
            {
                var error = ErrorResponsesService.DuplicationError(Target, ex.Message);
                return(BadRequest(error));
            }

            var clientTag = Converter.TagConverter.Convert(modelTag);

            return(CreatedAtRoute("GetTagRoute", new { id = clientTag.Id }, clientTag));
        }
        public async Task <IActionResult> CreateWayBillAsync([FromBody] Client.WayBillCreationInfo creationInfo,
                                                             CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (creationInfo == null)
            {
                var error = ErrorResponsesService.BodyIsMissing(nameof(creationInfo));
                return(BadRequest(error));
            }

            Model.WayBillCreationInfo modelCreationInfo;

            try
            {
                modelCreationInfo = WayBillCreationInfoConverter.Convert(creationInfo);
            }
            catch (InvalidDataException ex)
            {
                var error = ErrorResponsesService.InvalidBodyData(nameof(creationInfo), ex.Message);
                return(BadRequest(error));
            }

            if (!Guid.TryParse(creationInfo.RouteId, out var routeGuid))
            {
                var error = ErrorResponsesService.NotFoundError("Route", $"Route with id '{creationInfo.RouteId}' not found.");
                return(BadRequest(error));
            }

            Model.WayBill modelWayBill;
            var           route = await routeRepository.GetAsync(routeGuid, cancellationToken).ConfigureAwait(false);

            var mechanicNote = await mechanicNoteRepository.CreateAsync(cancellationToken).ConfigureAwait(false);

            var medicNotesCount = route.Checkpoints.Count + 1;
            var medicNotes      = new Models.MedicNotes.MedicNote[medicNotesCount];

            for (var i = 0; i < medicNotesCount; i++)
            {
                medicNotes[i] = await medicNoteRepository.CreateAsync(cancellationToken).ConfigureAwait(false);
            }

            try
            {
                modelWayBill = await wayBillRepository.CreateAsync(modelCreationInfo, mechanicNote.Id,
                                                                   medicNotes.Select(item => item.Id), cancellationToken)
                               .ConfigureAwait(false);
            }
            catch (WayBillDuplicationException ex)
            {
                var error = ErrorResponsesService.DuplicationError(Target, ex.Message);
                return(BadRequest(error));
            }

            if (!Guid.TryParse(creationInfo.DriverId, out var driverGuid))
            {
                var error = ErrorResponsesService.NotFoundError("Driver", $"Driver with id '{creationInfo.RouteId}' not found.");
                return(BadRequest(error));
            }

            var driver = await driverRepository.GetAsync(driverGuid, cancellationToken).ConfigureAwait(false);

            var clientDriver = ModelConverters.Drivers.DriverConverter.Convert(driver);

            if (!Guid.TryParse(creationInfo.VehicleId, out var vehicleGuid))
            {
                var error = ErrorResponsesService.NotFoundError("Vehicle", $"Vehicle with id '{creationInfo.RouteId}' not found.");
                return(BadRequest(error));
            }

            var vehicle = await vehicleRepository.GetAsync(vehicleGuid, cancellationToken).ConfigureAwait(false);

            var clientVehicle = ModelConverters.Vehicles.VehicleConverter.Convert(vehicle);

            var checkpoints = await checkpointRepository.GetAllAsync(cancellationToken).ConfigureAwait(false);

            var clientRoute = ModelConverters.Routes.RouteConverter.Convert(route, checkpoints);

            var clientMechanicNote = ModelConverters.MechanicNotes.MechanicNoteConverter.Convert(mechanicNote);
            var clientMedicNotes   = medicNotes.Select(ModelConverters.MedicNotes.MedicNoteConverter.Convert);

            var clientWayBill =
                WayBillConverter.Convert(modelWayBill, clientDriver, clientVehicle, clientRoute, clientMechanicNote, clientMedicNotes);

            return(CreatedAtRoute("GetWayBillRoute", new { id = clientWayBill.Id }, clientWayBill));
        }
        public async Task <IActionResult> CreateUserAsync([FromBody] Client.UserCreationInfo clientUserCreationInfo,
                                                          CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (clientUserCreationInfo == null)
            {
                var error = ErrorResponsesService.BodyIsMissing(nameof(clientUserCreationInfo));
                return(BadRequest(error));
            }

            if (!clientUserCreationInfo.Password.Equals(clientUserCreationInfo.ConfirmPassword))
            {
                var error = ErrorResponsesService.ValidationError(nameof(clientUserCreationInfo.ConfirmPassword),
                                                                  PasswordValidationMessage);
                return(BadRequest(error));
            }

            UserCreationInfo modelCreationInfo;

            try
            {
                modelCreationInfo = Converter.UserCreationInfoConverter.Convert(clientUserCreationInfo);
            }
            catch (ArgumentNullException ex)
            {
                var error = ErrorResponsesService.InvalidCredentialsError(ex.Message);
                return(BadRequest(error));
            }

            var user = await userManager.FindByNameAsync(modelCreationInfo.UserName);

            if (user != null)
            {
                var error = ErrorResponsesService.DuplicationError(Target, $"User with name '{clientUserCreationInfo.UserName}' already exists.");
                return(BadRequest(error));
            }

            var dateTime  = DateTime.UtcNow;
            var modelUser = new User
            {
                UserName     = modelCreationInfo.UserName,
                Name         = modelCreationInfo.Name,
                Email        = modelCreationInfo.Email,
                PhoneNumber  = modelCreationInfo.PhoneNumber,
                RegisteredAt = dateTime,
                LastUpdateAt = dateTime
            };

            var result = await userManager.CreateAsync(modelUser, modelCreationInfo.Password);

            if (!result.Succeeded)
            {
                var error = ErrorResponsesService.ValidationError(nameof(clientUserCreationInfo),
                                                                  result.Errors.First().Description);
                return(BadRequest(error));
            }

            await userManager.AddToRoleAsync(modelUser, "user");

            var clientUser = ModelConverters.Users.UserConverter.Convert(modelUser);

            return(CreatedAtRoute("GetUserRoute", new { username = clientUser.UserName }, clientUser));
        }