style: 以 pint 格式化 routes、Docs 與 BookingListTest
Run Tests / test (pull_request) Successful in 36s

純格式調整,不改變行為。這四個檔案在 master 上即未通過 pint,
因本次功能變更觸及而一併修正,以符合變更檔案需通過 pint 的審查要求。

- 已驗證 route:list 除角色 middleware 外無差異
- 已驗證 l5-swagger 產出的 JSON 在格式化前後完全相同

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-17 23:57:30 +08:00
parent 16ccb4c18c
commit 90fc8f2d49
4 changed files with 354 additions and 204 deletions
+113 -51
View File
@@ -38,40 +38,48 @@ class MemberApiDoc
* operationId="createBooking",
* tags={"會員預約"},
* security={{"bearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* required={"offer_id","schedule_id","participants"},
*
* @OA\Property(property="offer_id", type="integer", example=1, description="課程 ID"),
* @OA\Property(property="schedule_id", type="integer", example=2, description="時段 ID"),
* @OA\Property(property="participants", type="integer", example=2, description="參加人數"),
* @OA\Property(property="note", type="string", nullable=true, example="需要器材租借")
* )
* ),
*
* @OA\Response(
* response=201,
* description="預約建立成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="預約成功"),
* @OA\Property(property="data", ref="#/components/schemas/Booking")
* )
* ),
*
* @OA\Response(
* response=422,
* description="驗證失敗或時段已滿",
*
* @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse")
* ),
*
* @OA\Response(
* response=403,
* description="無權限(非 member 角色)",
*
* @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse")
* )
* )
*/
public function createBooking()
{
}
public function createBooking() {}
/**
* 取得我的預約列表
@@ -83,23 +91,26 @@ class MemberApiDoc
* operationId="listMemberBookings",
* tags={"會員預約"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="page", in="query", description="頁碼", @OA\Schema(type="integer", default=1)),
* @OA\Parameter(name="per_page", in="query", description="每頁筆數", @OA\Schema(type="integer", default=15)),
*
* @OA\Response(
* response=200,
* description="取得成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/Booking")),
* @OA\Property(property="meta", ref="#/components/schemas/PaginationMeta")
* )
* ),
*
* @OA\Response(response=403, description="非 member 角色", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse"))
* )
*/
public function listMemberBookings()
{
}
public function listMemberBookings() {}
/**
* 取得單一預約
@@ -110,22 +121,25 @@ class MemberApiDoc
* operationId="getMemberBooking",
* tags={"會員預約"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="預約 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="取得成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="data", ref="#/components/schemas/Booking")
* )
* ),
*
* @OA\Response(response=404, description="預約不存在", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse")),
* @OA\Response(response=403, description="非 member 角色或非本人預約", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse"))
* )
*/
public function getMemberBooking()
{
}
public function getMemberBooking() {}
/**
* 取消預約
@@ -137,22 +151,25 @@ class MemberApiDoc
* operationId="cancelBooking",
* tags={"會員預約"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="預約 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="取消成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="預約已取消")
* )
* ),
*
* @OA\Response(response=403, description="非 member 角色、非本人預約或狀態不允許取消", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse")),
* @OA\Response(response=404, description="預約不存在", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse"))
* )
*/
public function cancelBooking()
{
}
public function cancelBooking() {}
// -----------------------------------------------------------------------
// Member Reviews
@@ -168,32 +185,37 @@ class MemberApiDoc
* operationId="createReview",
* tags={"會員評價"},
* security={{"bearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* required={"booking_id","rating"},
*
* @OA\Property(property="booking_id", type="integer", example=5),
* @OA\Property(property="rating", type="integer", minimum=1, maximum=5, example=4),
* @OA\Property(property="comment", type="string", nullable=true, example="課程非常棒!"),
* @OA\Property(property="is_anonymous", type="boolean", example=false)
* )
* ),
*
* @OA\Response(
* response=201,
* description="評價建立成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="評價已提交"),
* @OA\Property(property="data", ref="#/components/schemas/Review")
* )
* ),
*
* @OA\Response(response=403, description="非 member 角色、預約未完成或非本人預約", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse")),
* @OA\Response(response=422, description="驗證失敗", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse"))
* )
*/
public function createReview()
{
}
public function createReview() {}
/**
* 更新評價
@@ -204,30 +226,36 @@ class MemberApiDoc
* operationId="updateReview",
* tags={"會員評價"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="評價 ID", @OA\Schema(type="integer")),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
*
* @OA\Property(property="rating", type="integer", minimum=1, maximum=5, example=5),
* @OA\Property(property="comment", type="string", nullable=true, example="更新後的評語"),
* @OA\Property(property="is_anonymous", type="boolean", example=true)
* )
* ),
*
* @OA\Response(
* response=200,
* description="更新成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="data", ref="#/components/schemas/Review")
* )
* ),
*
* @OA\Response(response=403, description="非 member 角色或非本人評價", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse")),
* @OA\Response(response=404, description="評價不存在", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse"))
* )
*/
public function updateReview()
{
}
public function updateReview() {}
/**
* 刪除評價
@@ -238,22 +266,25 @@ class MemberApiDoc
* operationId="deleteReview",
* tags={"會員評價"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="評價 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="刪除成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="評價已刪除")
* )
* ),
*
* @OA\Response(response=403, description="非 member 角色或非本人評價", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse")),
* @OA\Response(response=404, description="評價不存在", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse"))
* )
*/
public function deleteReview()
{
}
public function deleteReview() {}
/**
* 標記評價為有幫助
@@ -265,22 +296,25 @@ class MemberApiDoc
* operationId="markReviewHelpful",
* tags={"會員評價"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="評價 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="操作成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="helpful_count", type="integer", example=4),
* @OA\Property(property="has_voted", type="boolean", example=true)
* )
* ),
*
* @OA\Response(response=404, description="評價不存在", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse"))
* )
*/
public function markReviewHelpful()
{
}
public function markReviewHelpful() {}
// -----------------------------------------------------------------------
// Booking Messages(即時訊息,Member + Provider 共用)
@@ -296,10 +330,13 @@ class MemberApiDoc
* operationId="getMessageUnreadCounts",
* tags={"即時訊息"},
* security={{"bearerAuth": {}}},
*
* @OA\Response(
* response=200,
* description="取得成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(
* property="data",
@@ -311,9 +348,7 @@ class MemberApiDoc
* )
* )
*/
public function getMessageUnreadCounts()
{
}
public function getMessageUnreadCounts() {}
/**
* 取得預約訊息列表
@@ -325,17 +360,23 @@ class MemberApiDoc
* operationId="listBookingMessages",
* tags={"即時訊息"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="booking", in="path", required=true, description="預約 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="取得成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(
* property="data",
* type="array",
*
* @OA\Items(
* type="object",
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="booking_id", type="integer", example=12),
* @OA\Property(property="sender_type", type="string", enum={"member","provider"}, example="member"),
@@ -347,13 +388,12 @@ class MemberApiDoc
* )
* )
* ),
*
* @OA\Response(response=403, description="非參與方或預約狀態不符", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse")),
* @OA\Response(response=404, description="預約不存在", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse"))
* )
*/
public function listBookingMessages()
{
}
public function listBookingMessages() {}
/**
* 發送預約訊息
@@ -365,21 +405,29 @@ class MemberApiDoc
* operationId="sendBookingMessage",
* tags={"即時訊息"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="booking", in="path", required=true, description="預約 ID", @OA\Schema(type="integer")),
*
* @OA\RequestBody(
* required=true,
*
* @OA\MediaType(
* mediaType="multipart/form-data",
*
* @OA\Schema(
*
* @OA\Property(property="message", type="string", nullable=true, example="請問需要自備潛水裝備嗎?"),
* @OA\Property(property="image", type="string", format="binary", nullable=true, description="圖片(jpg/png,message 與 image 至少擇一)")
* )
* )
* ),
*
* @OA\Response(
* response=201,
* description="訊息已送出",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(
* property="data",
@@ -394,13 +442,12 @@ class MemberApiDoc
* )
* )
* ),
*
* @OA\Response(response=403, description="非參與方或預約狀態不符", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse")),
* @OA\Response(response=422, description="message 與 image 皆為空", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse"))
* )
*/
public function sendBookingMessage()
{
}
public function sendBookingMessage() {}
/**
* 標記訊息為已讀
@@ -412,21 +459,24 @@ class MemberApiDoc
* operationId="markMessagesRead",
* tags={"即時訊息"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="booking", in="path", required=true, description="預約 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="標記成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="已標記為已讀")
* )
* ),
*
* @OA\Response(response=403, description="非參與方", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse"))
* )
*/
public function markMessagesRead()
{
}
public function markMessagesRead() {}
// -----------------------------------------------------------------------
// Notifications (Member + Provider 共用)
@@ -442,18 +492,24 @@ class MemberApiDoc
* operationId="listNotifications",
* tags={"通知"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="page", in="query", description="頁碼", @OA\Schema(type="integer", default=1)),
* @OA\Parameter(name="per_page", in="query", description="每頁筆數", @OA\Schema(type="integer", default=15)),
*
* @OA\Response(
* response=200,
* description="取得成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(
* property="data",
* type="array",
*
* @OA\Items(
* type="object",
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="type", type="string", example="booking_confirmed"),
* @OA\Property(property="title", type="string", example="預約已確認"),
@@ -467,9 +523,7 @@ class MemberApiDoc
* )
* )
*/
public function listNotifications()
{
}
public function listNotifications() {}
/**
* 取得未讀通知數量
@@ -480,19 +534,20 @@ class MemberApiDoc
* operationId="getUnreadNotificationCount",
* tags={"通知"},
* security={{"bearerAuth": {}}},
*
* @OA\Response(
* response=200,
* description="取得成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="unread_count", type="integer", example=3)
* )
* )
* )
*/
public function getUnreadNotificationCount()
{
}
public function getUnreadNotificationCount() {}
/**
* 標記單一通知為已讀
@@ -503,21 +558,24 @@ class MemberApiDoc
* operationId="markNotificationRead",
* tags={"通知"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="通知 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="標記成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="通知已標記為已讀")
* )
* ),
*
* @OA\Response(response=404, description="通知不存在", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse"))
* )
*/
public function markNotificationRead()
{
}
public function markNotificationRead() {}
/**
* 全部通知標記為已讀
@@ -528,19 +586,20 @@ class MemberApiDoc
* operationId="markAllNotificationsRead",
* tags={"通知"},
* security={{"bearerAuth": {}}},
*
* @OA\Response(
* response=200,
* description="標記成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="所有通知已標記為已讀")
* )
* )
* )
*/
public function markAllNotificationsRead()
{
}
public function markAllNotificationsRead() {}
/**
* 刪除通知
@@ -551,19 +610,22 @@ class MemberApiDoc
* operationId="deleteNotification",
* tags={"通知"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="通知 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="刪除成功",
*
* @OA\JsonContent(
*
* @OA\Property(property="status", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="通知已刪除")
* )
* ),
*
* @OA\Response(response=404, description="通知不存在", @OA\JsonContent(ref="#/components/schemas/ApiErrorResponse"))
* )
*/
public function deleteNotification()
{
}
public function deleteNotification() {}
}