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)); }