smarcet a1b8c46273 Added enpoints to CRUD bookable rooms
Add bookable room to summit

POST /api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms

payload

time_slot_cost: required|numeric
currency:required|iso_currency_code(USD,EUR)
capacity:required|integer
floor_id:sometimes|integer
name:sometimes|string|max:255
description:sometimes|string
order:sometimes|integer|min:1

update bookable room per summit

PUT /api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id}

payload

time_slot_cost: required|numeric
currency:required|iso_currency_code(USD,EUR)
capacity:required|integer
floor_id:sometimes|integer
name:sometimes|string|max:255
description:sometimes|string
order:sometimes|integer|min:1

delete bookable room

DELETE /api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id}

add attribute value to bookable room

PUT /api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id}/attributes/{attribute_id}

delete attribute value from bookable room

DELETE /api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id}/attributes/{attribute_id}

Added missing endpoints to CRUD bookable rooms attributes
per summit

Get all bookable rooms attribute types

GET /api/v1/summits/{id}/bookable-room-attribute-types

Get bookable room attribute type by id

GET /api/v1/summits/{id}/bookable-room-attribute-types/{type_id}

Add bookable room attribute type

POST /api/v1/summits/{id}/bookable-room-attribute-types

payload

type [required|string]

Update bookable room attribute type

PUT /api/v1/summits/{id}/bookable-room-attribute-types/{type_id}

payload

type [required|string]

delete attribute type by id

DELETE /api/v1/summits/{id}/bookable-room-attribute-types/{type_id}

get all attribute values by attribute type

GET /api/v1/summits/{id}/bookable-room-attribute-types/{type_id}/values

add attribute value to attribute type

POST /api/v1/summits/{id}/bookable-room-attribute-types/{type_id}/values

payload

value [required|string]

update attribute value

PUT /api/v1/summits/{id}/bookable-room-attribute-types/{type_id}/values/{value_id}

payload

value [required|string]

delete attribute value by id

DELETE /api/v1/summits/{id}/bookable-room-attribute-types/{type_id}/values/{value_id}

refund endpoint (admin only)

DELETE /api/v1/summits/{id}/bookable-rooms/{room_id}/reservations/{reservation_id}/refund

payload

amount [numeric|required]

get all reservations by summit (admin)

GET /api/v1/summits/{id}/locations/bookable-rooms/all/reservations

query params

page:integer|min:1
per_page:required_with:page|integer|min:1|max:100
filter:

allowed filters

summit_id: ['==']
room_name: ['==', '=@']
room_id: ['==']
owner_id: ['==']
status:  ['==']
start_datetime: ['>', '<', '<=', '>=', '==']
end_datetime:  ['>', '<', '<=', '>=', '==']

order

allowed ordering

id,start_datetime,end_datetime

Change-Id: Ic7f6ed7defaf20b8799a7d94beb0a82103b206f0
2019-06-19 18:19:58 -03:00

278 lines
8.7 KiB
PHP

<?php namespace App\Models\Foundation\Summit\Factories;
/**
* Copyright 2018 OpenStack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
use models\exceptions\ValidationException;
use models\summit\SummitAbstractLocation;
use models\summit\SummitAirport;
use models\summit\SummitBookableVenueRoom;
use models\summit\SummitExternalLocation;
use models\summit\SummitGeoLocatedLocation;
use models\summit\SummitHotel;
use models\summit\SummitVenue;
use models\summit\SummitVenueRoom;
/**
* Class SummitLocationFactory
* @package App\Models\Foundation\Summit\Factories
*/
final class SummitLocationFactory
{
/**
* @param array $data
* @return SummitAbstractLocation|null
* @throws ValidationException
*/
public static function build(array $data){
if(!isset($data['class_name'])) throw new ValidationException("missing class_name param");
$location = null;
switch($data['class_name']){
case SummitVenue::ClassName :{
$location = self::populateSummitVenue(new SummitVenue, $data);
}
break;
case SummitExternalLocation::ClassName :{
$location = self::populateSummitExternalLocation(new SummitExternalLocation, $data);
}
break;
case SummitHotel::ClassName :{
$location = self::populateSummitHotel(new SummitHotel, $data);
}
break;
case SummitAirport::ClassName :{
$location = self::populateSummitAirport(new SummitAirport, $data);
}
break;
case SummitBookableVenueRoom::ClassName :{
$location = self::populateSummitVenueBookableRoom(new SummitBookableVenueRoom, $data);
}
break;
case SummitVenueRoom::ClassName :{
$location = self::populateSummitVenueRoom(new SummitVenueRoom, $data);
}
break;
}
return $location;
}
/**
* @param SummitAbstractLocation $location
* @param array $data
* @return SummitAbstractLocation
*/
private static function populateSummitAbstractLocation(SummitAbstractLocation $location, array $data){
if(isset($data['name']))
$location->setName(trim($data['name']));
if(isset($data['description']))
$location->setDescription(trim($data['description']));
return $location;
}
/**
* @param SummitGeoLocatedLocation $location
* @param array $data
* @return SummitGeoLocatedLocation
*/
private static function populateSummitGeoLocatedLocation(SummitGeoLocatedLocation $location, array $data){
if(isset($data['address_1']))
$location->setAddress1(trim($data['address_1']));
if(isset($data['address_2']))
$location->setAddress2(trim($data['address_2']));
if(isset($data['zip_code']))
$location->setZipCode(trim($data['zip_code']));
if(isset($data['city']))
$location->setCity(trim($data['city']));
if(isset($data['state']))
$location->setState(trim($data['state']));
if(isset($data['country']))
$location->setCountry(trim($data['country']));
if(isset($data['website_url']))
$location->setWebsiteUrl(trim($data['website_url']));
if(isset($data['lng']))
$location->setLng(trim($data['lng']));
if(isset($data['lat']))
$location->setLat(trim($data['lat']));
if(isset($data['display_on_site']))
$location->setDisplayOnSite(boolval($data['display_on_site']));
if(isset($data['details_page']))
$location->setDetailsPage(boolval($data['details_page']));
if(isset($data['location_message']))
$location->setLocationMessage(trim($data['location_message']));
return $location;
}
/**
* @param SummitVenue $venue
* @param array $data
* @return SummitVenue
*/
public static function populateSummitVenue(SummitVenue $venue, array $data){
self::populateSummitGeoLocatedLocation
(
self::populateSummitAbstractLocation($venue, $data),
$data
);
if(isset($data['is_main']))
$venue->setIsMain(boolval($data['is_main']));
return $venue;
}
/**
* @param SummitExternalLocation $external_location
* @param array $data
* @return SummitExternalLocation
*/
public static function populateSummitExternalLocation(SummitExternalLocation $external_location, array $data){
self::populateSummitGeoLocatedLocation
(
self::populateSummitAbstractLocation($external_location, $data),
$data
);
if(isset($data['capacity']))
$external_location->setCapacity(intval($data['capacity']));
return $external_location;
}
/**
* @param SummitHotel $hotel
* @param array $data
* @return SummitHotel
*/
public static function populateSummitHotel(SummitHotel $hotel, array $data){
self::populateSummitExternalLocation
(
self::populateSummitGeoLocatedLocation
(
self::populateSummitAbstractLocation($hotel, $data),
$data
),
$data
);
if(isset($data['hotel_type']))
$hotel->setHotelType(trim($data['hotel_type']));
if(isset($data['sold_out']))
$hotel->setSoldOut(boolval($data['sold_out']));
if(isset($data['booking_link']))
$hotel->setBookingLink(trim($data['booking_link']));
return $hotel;
}
/**
* @param SummitAirport $airport
* @param array $data
* @return SummitAirport
*/
public static function populateSummitAirport(SummitAirport $airport, array $data){
self::populateSummitExternalLocation
(
self::populateSummitGeoLocatedLocation
(
self::populateSummitAbstractLocation($airport, $data),
$data
),
$data
);
if(isset($data['airport_type']))
$airport->setAirportType(trim($data['airport_type']));
return $airport;
}
/**
* @param SummitVenueRoom $room
* @param array $data
* @return SummitVenueRoom
*/
public static function populateSummitVenueRoom(SummitVenueRoom $room, array $data){
self::populateSummitAbstractLocation($room, $data);
if(isset($data['capacity']))
$room->setCapacity(intval($data['capacity']));
if(isset($data['override_blackouts']))
$room->setOverrideBlackouts(boolval($data['override_blackouts']));
return $room;
}
/**
* @param SummitBookableVenueRoom $room
* @param array $data
* @return SummitBookableVenueRoom
*/
public static function populateSummitVenueBookableRoom(SummitBookableVenueRoom $room, array $data){
self::populateSummitVenueRoom($room, $data);
if(isset($data['time_slot_cost']))
$room->setTimeSlotCost(floatval($data['time_slot_cost']));
if(isset($data['currency']))
$room->setCurrency(trim($data['currency']));
return $room;
}
/**
* @param SummitAbstractLocation $location
* @param array $data
* @return SummitAbstractLocation
*/
public static function populate(SummitAbstractLocation $location, array $data){
if($location instanceof SummitVenue){
return self::populateSummitVenue($location, $data);
}
if($location instanceof SummitHotel){
return self::populateSummitHotel($location, $data);
}
if($location instanceof SummitAirport){
return self::populateSummitAirport($location, $data);
}
if($location instanceof SummitExternalLocation){
return self::populateSummitExternalLocation($location, $data);
}
if($location instanceof SummitBookableVenueRoom){
return self::populateSummitVenueBookableRoom($location, $data);
}
if($location instanceof SummitVenueRoom){
return self::populateSummitVenueRoom($location, $data);
}
return $location;
}
}