Skip to main content
#P1691

POST /v2/charter/accommodation/rooms/access

Charter: Access Accommodation Rooms

این اندپوینت برای «از دسترس خارج کردن» یا «بازگرداندن به دسترس» یک اتاق اقامتگاهی استفاده می‌شود. رفتار اندپوینت بر اساس ارسال یا عدم ارسال start_date و end_date دو حالت مختلف دارد: در حالت بازه‌دار روی تاریخ‌ها عمل می‌کند و در حالت بدون بازه روی وضعیت عمومی اتاق.

URL: /v2/charter/accommodation/rooms/access
Method: 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