Как проверить наличие места для бронирования - PullRequest
0 голосов
/ 19 марта 2020

Я сейчас занимаюсь разработкой проекта для космических заказов. Это проект API. Я сделал до бронирования API. Но хотите проверить наличие свободных мест и подтверждения бронирования. Как написать код logi c для проверки наличия места и проверки достоверности наличия или отсутствия места. Пространства, которые я использую в этом проекте - это комнаты для собраний, личное пространство и столы

Это мое космическое творение JSON

{
    "space": {
        "name": "Star Bucks",
        "email": "stabucks@mail.com",
        "website" : "www.starbucks.com",
        "phone" : "7907653366",
        "amenities_attributes": [
            {
                "name": "wifi",
                "available": true
            },
            {
                "name": "ac",
                "available": true
            }
        ],
        "meeting_rooms_attributes": [
            {
                "count": 5,
                "capacity": 6
            }
        ],
        "private_offices_attributes": [
            {
                "count": 2,
                "capacity": 6
            }
        ],
        "desks_attributes": [
            {
                "count": 12,
                "desk_type": "open_desk"
            }
        ],
        "operating_hours_attributes": [
            {
                "day": "Mon-Fri",
                "slot": "10:00-5:00"
            }
        ]
    }
}

Это мой запрос на бронирование пространства JSON

{
   "booking": {
       "space_id": 17,
       "booking_items_attributes": [
           {
               "entity_type": "PrivateOffice",
               "entity_id": 20,
               "count": 1
           },
           {
               "entity_type": "Desk",
               "entity_id": 20,
               "count": 2
           }
       ],
        "booking_dates_attributes": [
           {
               "from_date": "2020-03-18",
               "to_date": "2020-03-18",
               "from_time": "2020-03-18 10:00:00 ",
               "to_time": "2020-03-18 14:00:00 "
           }]
   }
}

Контроллер бронирования

class Api::V1::BookingsController < ApiController
 before_action :fetch_space, only: [:show]

 def index
   bookings = Booking.all
   render_collection(bookings, { name: 'bookings' }, each_serializer: BookingItemSerializer)
 end

 def create
   if booking = current_user.bookings.create(booking_params)
     render_object(booking, { name: 'booking' }, { serializer: BookingSerializer })
   else
     render_error(booking.errors.full_messages)
   end
 end

 private


 def booking_params
   params.require(:booking).permit(:space_id,
                                    booking_items_attributes: [:id, :entity_type, :entity_id, :count],
                                    booking_dates_attributes: [:id, :from_date, :to_date, :from_time, :to_time])
 end
end

Сериализатор бронирования

class BookingSerializer < ActiveModel::Serializer


  attributes :id, :user_id, :space_id, :status, :booked

 # has_many :booking_items, serializer: BookingItemSerializer

  def booked
    object.booking_items.entity_type.sum(:count)
  end


end

Сериализатор позиции бронирования

class BookingItemSerializer < ActiveModel::Serializer
  attributes :id, :availabitity


  belongs_to :booking,  serializer: BookingItemSerializer


  # def availabitity
  #   availabitity =   object.meeting.sum(:count) - booked
  # end
end
...