public async Task <IPayload> SaveDevice(SaveDeviceDto saveDeviceDto) { var isCreated = await _context.Devices.Select( p => new { ValueForAvoidDuplicate = p.Vendor + p.GatewayId.ToString() } ) .AnyAsync(keys => keys.ValueForAvoidDuplicate.Equals(saveDeviceDto.ValueToAvoidDuplicate())).ConfigureAwait(true); if (isCreated) { throw new AlreadyExistException($"The same Device was created before"); } Device device = _mapper.Map <Device>(saveDeviceDto); Gateway gateway; try { gateway = await _context.Gateways .Include(p => p.Devices) .SingleAsync(p => p.Id == device.GatewayId).ConfigureAwait(false); } catch (InvalidOperationException ex) { throw new DoesNotExistException($"Gateways with id: { device.GatewayId }, hasn't been found in db."); } if (gateway.Devices.Count >= 10) { throw new GatewayDeviceLimitExceeded($"Gateways {gateway.Name} cannot support more than 10 devices."); } var peripheralResult = _context.Devices.Add(device); await _context.SaveChangesAsync(); var factory = new SingleObjectPayloadFactory <DeviceDto>(_mapper.Map <DeviceDto>(peripheralResult.Entity)); return(factory.GetPayload()); }
public async Task <IActionResult> SaveDevice(SaveDeviceDto saveDeviceDto) { var deviceResultPayload = await _service.SaveDevice(saveDeviceDto).ConfigureAwait(true); return(new PayloadResult(deviceResultPayload, HttpStatusCode.OK)); }