Esempio n. 1
0
        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));
        }