public async Task AttachWorkerToOrderAsync(int clientId, int orderId, AttachWorkerInfo workerInfo) { if (clientId == workerInfo.Id) { throw new BadInputException("can not attach yourself to order"); } var order = await ordersRepository.FirstOrDefaultAsync(o => o.Id == orderId); if (order == null) { throw new BadInputException("order was not found"); } if (order.ClientId != clientId) { throw new AccessRefusedException("client has no rights on this order"); } var respondedWorker = await respondedWorkersRepository.FirstOrDefaultAsync(rw => rw.OrderId == orderId && rw.WorkerId == workerInfo.Id); if (respondedWorker == null) { throw new BadInputException("worker was not responding to this order"); } order.WorkerId = workerInfo.Id; await ordersRepository.UpdateAsync(order); }
public async Task <IActionResult> AttachWorkerToOrder([FromRoute(Name = "id")] int orderId, [FromBody] AttachWorkerInfo workerData) { if (!ModelState.IsValid) { return(BadRequest()); } int clientId = User.GetUserId(); await ordersService.AttachWorkerToOrderAsync(clientId, orderId, workerData); return(Ok()); }