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
            });
        }