#P1691
POST /v2/charter/accommodation/rooms/access
Charter: Access Accommodation Rooms
این اندپوینت برای «از دسترس خارج کردن» یا «بازگرداندن به دسترس» یک اتاق اقامتگاهی استفاده میشود. رفتار اندپوینت بر اساس ارسال یا عدم ارسال start_date و end_date دو حالت مختلف دارد: در حالت بازهدار روی تاریخها عمل میکند و در حالت بدون بازه روی وضعیت عمومی اتاق.
URL:
/v2/charter/accommodation/rooms/accessMethod: POST
Controller: CharterController@accessCharterAccommodationRooms
Middleware: authWithJwt
Auth: JWT Required
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| room_id | integer | yes | شناسه اتاق (باید مقدار واقعی با room_id - 10000 بهدست آید) |
| delete | boolean | no | اگر true باشد: عملیات «حذف» (بازگشت از حالت disable) اگر false یا ارسال نشود: اعمال disable |
| start_date | string (Y-m-d) | conditional | تاریخ شروع بازه؛ اگر همراه end_date ارسال شود عملیات روی بازه انجام میشود |
| end_date | string (Y-m-d) | conditional | تاریخ پایان بازه؛ یک روز از آن کم میشود (subDay()) |
Controller Logic
static function accessCharterAccommodationRooms(Request $request)
{
try {
$roomId = $request->room_id - 10000;
$delete = false;
if (isset($request->delete) && $request->delete) {
$delete = filter_var($request->delete, FILTER_VALIDATE_BOOLEAN);
}
if ((isset($request->start_date) && $request->start_date) && isset($request->end_date) && $request->end_date) {
$startDate = Carbon::createFromFormat('Y-m-d', $request->start_date);
$endDate = Carbon::createFromFormat('Y-m-d', $request->end_date)->subDay();
$period = CarbonPeriod::create($startDate, $endDate);
if ($delete) {
foreach ($period as $date) {
$dateString = $date->toDateString();
DB::table('charter_reservation_accommodation_rooms')
->where([
['type', '=', 'disable'],
['room_id', '=', $roomId],
['date', '=', $dateString],
])
->delete();
}
} else {
$allReservations = DB::table('charter_reservation_accommodation_rooms')
->where('date', '>=', $startDate->toDateString())
->where('date', '<=', $endDate->toDateString())
->where('room_id', $roomId)
->exists();
if (!$allReservations) {
foreach ($period as $date) {
$dateString = $date->toDateString();
DB::table('charter_reservation_accommodation_rooms')->insertGetId([
'type' => 'disable',
'room_id' => $roomId,
'date' => $dateString,
]);
}
} else {
return response()->json([
'error' => [
'message' =>
'این اتاق در بازه درخواستی شما دارای رزرو میباشد و از دسترس خارج کردن اتاق امکان پذیر نمی باشد.',
],
'meta' => ['timestamp' => time()]
], 400);
}
}
} else {
if ($delete) {
DB::table('charter_accommodation_rooms')
->where('id', $roomId)
->update(['status' => 1]);
} else {
$allReservations = DB::table('charter_reservation_accommodation_rooms')
->where('date', '>', Carbon::today())
->where('room_id', $roomId)
->exists();
if (!$allReservations) {
DB::table('charter_accommodation_rooms')
->where('id', $roomId)
->update(['status' => 2]);
} else {
return response()->json([
'error' => [
'message' =>
'این اتاق در بازه درخواستی شما دارای رزرو می باشد و از دسترس خارج کردن اتاق امکان پذیر نمی باشد.',
],
'meta' => ['timestamp' => time()]
], 400);
}
}
}
return response()->json([
"payload" => true,
'meta' => ['timestamp' => time()]
]);
} catch (Exception $exception) {
return response()->json([
'error' => [
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
'trace' => $exception->getTrace()
]
], 400);
}
}
Possible Errors
| Error Message | HTTP Code | Description |
|---|---|---|
| این اتاق در بازه درخواستی شما دارای رزرو میباشد و از دسترس خارج کردن اتاق امکان پذیر نمی باشد. | 400 | وقتی برای بازهٔ ارسالی قبلاً رزرو وجود دارد |
| این اتاق در بازه درخواستی شما دارای رزرو می باشد و از دسترس خارج کردن اتاق امکان پذیر نمی باشد. | 400 | وقتی بدون بازه، رزرو آینده وجود دارد (نسخه دوم پیام با فاصله متفاوت) |
Success Response
Status: 200 OK
{
"payload": true,
"meta": {
"timestamp": 1730000000
}
}
Flowchart
Validate JWT
↓
room_id - 10000
↓
delete flag?
↓
start_date & end_date provided?
↓
Yes → Build date period
↓
Check reservations in range
↓
If none → insert disable rows
↓
Else → return error
↓
No (no dates)
↓
Check future reservations
↓
If none → update status
↓
Else → return error