예제 #1
0
 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));
     }
 }