Я сейчас занимаюсь разработкой проекта для космических заказов. Это проект 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