public async Task <ActionResult <Peripheral> > Delete(string serialNumber, long uid) { try { PeripheralsGateways relation = await context.PeripheralGateways.FirstOrDefaultAsync(x => x.GatewaySerialNumber == serialNumber && x.PeripheralId == uid); var countOfRelations = await context.PeripheralGateways.CountAsync(x => x.GatewaySerialNumber == serialNumber && x.PeripheralId == uid); var device = await context.Peripherals.FirstOrDefaultAsync(x => x.UID == uid); if (device == null || relation == null) { return(NotFound()); } context.Remove(relation); if (countOfRelations == 1) { context.Remove(device); } await context.SaveChangesAsync(); return(Accepted()); } catch (Exception err) { return(BadRequest(new InvalidOperationException(err.ToString()))); } }
private async Task <ActionResult <Gateway> > Delete(string serialNumber, bool deleteAllDevices = false) { try { List <long> UIDs = await context.PeripheralGateways .Where(x => x.GatewaySerialNumber == serialNumber) .Select(x => x.PeripheralId).ToListAsync(); if (deleteAllDevices) { List <Peripheral> devices = new List <Peripheral>(); foreach (long uid in UIDs) { PeripheralsGateways relation = await context.PeripheralGateways.FirstOrDefaultAsync(x => x.GatewaySerialNumber == serialNumber && x.PeripheralId == uid); var device = await context.Peripherals.FirstOrDefaultAsync(x => x.UID == uid); context.Remove(relation); context.Remove(device); } } else if (UIDs.Count > 0) { return(BadRequest(new InvalidOperationException("Can't delete a Gateway with associated DevicesController"))); } var gateway = await context.Gateways.FirstOrDefaultAsync(x => x.SerialNumber == serialNumber); if (gateway == null) { return(NotFound()); } context.Remove(gateway); await context.SaveChangesAsync(); return(Accepted(gateway)); } catch (Exception err) { return(BadRequest(new InvalidOperationException(err.ToString()))); } }