public async Task <IActionResult> Create([FromBody] ModelItemRequest request) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } try { var itemId = await _modelsRepository.Create(request); return(CreatedAtAction(nameof(GetById), new { id = itemId }, itemId)); } catch (InvalidBrandException) { string errorText = String.Format("Brand with ID: {0} doesn't exist", request.BrandId); return(StatusCode(StatusCodes.Status409Conflict, new { Message = errorText })); } catch (DuplicateModelException) { string errorText = String.Format("This model already exist", request.BrandId); return(StatusCode(StatusCodes.Status409Conflict, new { Message = errorText })); } }
public async Task <int> Create(CreateDeviceRequest request) { var office = _dbContext.Offices .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == request.OfficeId); var brand = _dbContext.Brands .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == request.BrandId); if (request.NewModel == true) { ModelItemRequest modelItem = new ModelItemRequest() { Name = request.ModelName, BrandId = request.BrandId, }; request.ModelId = await _modelsRepository.Create(modelItem); } var model = _dbContext.Models .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == request.ModelId); await Task.WhenAll(office, brand, model); if (office.Result == null) { throw new InvalidOfficeException(); } if (brand.Result == null) { throw new InvalidBrandException(); } if (model.Result == null) { throw new InvalidModelException(); } var newItem = new Device { BrandId = brand.Result.Id, ModelId = model.Result.Id, Available = true, Active = true, Image = request.Image, UserId = null, IdentificationNum = request.IdentificationNum, SerialNum = request.SerialNum, OS = request.OS, Purchased = request.Purchased, Vendor = request.Vendor, TaxRate = request.TaxRate, OfficeId = office.Result.Id, }; if (await DeviceWithSerialNumberExists(newItem)) { throw new DuplicateDeviceSerialNumberException(); } if (await DeviceWithIdentificationNumberExists(newItem)) { throw new DuplicateDeviceIdentificationNumberException(); } _dbContext.Add(newItem); await _dbContext.SaveChangesAsync(); return(newItem.Id); }