public async Task <ActionResult <SendRoomBookingResponse> > SendRoomBooking(SendRoomBookingRequest request) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } return(await _roomBookingService.SendRequest(request)); }
public async Task <SendRoomBookingResponse> SendRequest(SendRoomBookingRequest request) { //Check request var checkResult = await Check_PriorityType_Month_TargetRoomType(request.PriorityType, request.Month, request.TargetRoomType); if (checkResult.Code != HttpStatusCode.OK) { throw new HttpStatusCodeException(checkResult.Code, checkResult.Message); } //Find student in database var student = await _studentService.FindById(request.StudentId); //Forbid if student already has a room if (student.RoomId != null) { throw new HttpStatusCodeException(HttpStatusCode.Forbidden, "RoomBookingService: Student already has a room"); } //Check for active requests var bookings = (List <RoomBookingRequestForm>) await _repoWrapper.RoomBooking.FindAllAsyncWithCondition(r => r.StudentId == request.StudentId); if (bookings != null) { if (bookings.Exists(b => b.Status == RequestStatus.Pending || b.Status == RequestStatus.Approved)) { throw new HttpStatusCodeException(HttpStatusCode.Forbidden, "RoomBookingService: There are already active booking requests for this account"); } } //Get max day for approving room booking var maxDayForApproveRoomBookingParam = await _repoWrapper.Param.FindByIdAsync(GlobalParams.MaxDayForApproveRoomBooking); if (maxDayForApproveRoomBookingParam?.Value == null) { throw new HttpStatusCodeException(HttpStatusCode.Forbidden, "RoomBookingService: There are already active booking requests for this account"); } //Create new room booking from request var result = SendRoomBookingRequest.NewEntityFromRequest(request, maxDayForApproveRoomBookingParam.Value.Value); //Create in database result = await _repoWrapper.RoomBooking.CreateAsync(result); return(new SendRoomBookingResponse() { RoomBookingRequestFormId = result.RoomBookingRequestFormId }); }