public IActionResult PutEquipment([FromRoute] int equipmentId, [FromBody] Equipment equipment) { try { if (HttpContext.Items["User"] == null) { throw new UnauthorizedException("Authorization failed!"); } User user = (User)HttpContext.Items["User"]; if (user.PermissionLevel < 3) { throw new ForbiddenException("You don't have high enough clearance for this operation!"); } if (user.OrganizationId != null && _persistence.GetEquipmentOrgId(equipmentId) != user.OrganizationId) { throw new ForbiddenException("The requested Equipment is owned by a different organization!"); } equipment.Id = equipmentId; _persistence.UpdateEquipment(equipment); if (equipment.Events == null) { return(StatusCode(200)); } Event[] oldEvents = _persistence.GetEvents(equipmentId, null, null, null); foreach (Event oldEv in oldEvents) { bool contains = equipment.Events.Any(newEv => oldEv.Id == newEv.Id); if (contains) { continue; } _persistence.DeleteEquipmentEventConnection(equipmentId, (int)oldEv.Id); } string error = ""; foreach (Event newEv in equipment.Events) { bool contains = oldEvents.Any(oldEv => newEv.Id == oldEv.Id); if (contains) { continue; } try { if (newEv.Id != null) { _persistence.AddEquipmentEventConnection(equipmentId, (int)newEv.Id); } } catch (ConflictException e) { error = e.Message + "\n"; } } if (error != "") { throw new ConflictException(error.Substring(0, error.Length - 1)); } return(StatusCode(200)); } catch (UnauthorizedException e) { return(StatusCode(401, e.Message)); } catch (ForbiddenException e) { return(StatusCode(403, e.Message)); } catch (NotFoundException e) { return(StatusCode(404, e.Message)); } catch (ConflictException e) { return(StatusCode(409, e.Message)); } catch (Exception e) { return(StatusCode(500, e.Message)); } }