public async Task <IActionResult> SetStatus(long id, [FromBody] SetReservationStatusDTO reservationStatus) { // check if requester is allowed to set reservation status if (!await _permissionService.CanSetReservationStatus(id, HttpContext.GetUserIdFromToken())) { return(Forbid()); } return(Ok(await _reservationService.SetReservationStatus(id, reservationStatus))); }
/* * public async Task<ServiceResponse<GetItemDTO>> UpdateItem(long reservationId, UpdateItemDTO updatedItem) * { * ServiceResponse<GetItemDTO> serviceResponse = new ServiceResponse<GetItemDTO>(); * try * { * Item item = await _context.Items.FirstOrDefaultAsync(x => x.Id == updatedItem.Id); * if (item != null) * { * if (item.ReservationId == reservationId) * { * item.Name = updatedItem.Name; * item.Amount = updatedItem.Amount; * item.Unit = updatedItem.Unit; * * _context.Items.Update(item); * await _context.SaveChangesAsync(); * serviceResponse.Data = _mapper.Map<GetItemDTO>(item); * } * else * { * serviceResponse.Success = false; * serviceResponse.Message = $"Item with id '{updatedItem.Id}' is not part of reservation with id '{reservationId}'"; * } * } * else * { * serviceResponse.Success = false; * serviceResponse.Message = $"Could not found item with id '{updatedItem.Id}'"; * } * } * catch (Exception ex) * { * serviceResponse.Success = false; * serviceResponse.Exception = ex.Message; * } * return serviceResponse; * } */ public async Task <ServiceResponse <GetReservationDTO> > SetReservationStatus(long id, SetReservationStatusDTO reservationStatus) { ServiceResponse <GetReservationDTO> serviceResponse = new ServiceResponse <GetReservationDTO>(); try { Reservation reservation = await _context.Reservations .Include(x => x.User) .Include(x => x.Items) .Include(x => x.MarketSeller.Market) .Include(x => x.MarketSeller.Seller) .FirstOrDefaultAsync(x => x.Id == id); if (reservation != null) { // before changing data in db -> check if accepted was changed (or just packed) var acceptedChanged = (reservation.Accepted != reservationStatus.Accepted); reservation.Accepted = reservationStatus.Accepted; reservation.Price = reservationStatus.Price; reservation.Packed = reservationStatus.Packed; reservation.SellerComment = reservationStatus.SellerComment; _context.Reservations.Update(reservation); await _context.SaveChangesAsync(); var placeholders = CreatePlaceholders(reservation, reservation.MarketSeller.Market, reservation.MarketSeller.Seller); // send user mail(s) // TODO: refactor to only have one SendMail Method if (acceptedChanged) { if (reservation.Accepted.Value) { await _mailService.SendReservationAccepted(reservation.User.Mail, placeholders); } else { await _mailService.SendReservationDeclined(reservation.User.Mail, placeholders); } } //if (reservation.Packed) // await _mailService.SendReservationPacked(reservation.User.Mail, placeholders); serviceResponse.Data = _mapper.Map <GetReservationDTO>(reservation); } else { serviceResponse.Success = false; serviceResponse.Message = $"Could not found reservation with id '{id}'"; } } catch (Exception ex) { serviceResponse.Success = false; serviceResponse.Exception = ex.Message; } return(serviceResponse); }