From 0a68104e85878b5854a70b4d2f98fb4b208a7e56 Mon Sep 17 00:00:00 2001 From: alisaza Date: Fri, 11 Sep 2026 23:00:12 +0330 Subject: [PATCH] chore(openapi): format tags in API documentation for consistency Updated the OpenAPI specification to format the 'tags' property as an array on multiple endpoints, ensuring consistent styling across the documentation. Additionally, simplified JSX return statements in the BookingsPage and AdminEventBookingsTab components for improved readability. --- app/(dashboard)/bookings/page.tsx | 6 +- .../AdminEventBookingsTab.tsx | 6 +- openapi.json | 3588 +++++++++++++---- 3 files changed, 2905 insertions(+), 695 deletions(-) diff --git a/app/(dashboard)/bookings/page.tsx b/app/(dashboard)/bookings/page.tsx index 2d18202..6844ddd 100644 --- a/app/(dashboard)/bookings/page.tsx +++ b/app/(dashboard)/bookings/page.tsx @@ -136,11 +136,7 @@ const BookingsPage = () => { if (!isCancelledLike || !reason) return '—' - return ( - - {reason} - - ) + return {reason} }, checkedInAt: (_row, cellValue) => formatPersianDate(cellValue), createdAt: (_row, cellValue) => formatPersianDate(cellValue), diff --git a/features/events/detail/admin-event-detail/AdminEventBookingsTab.tsx b/features/events/detail/admin-event-detail/AdminEventBookingsTab.tsx index 732191f..3ecb3e5 100644 --- a/features/events/detail/admin-event-detail/AdminEventBookingsTab.tsx +++ b/features/events/detail/admin-event-detail/AdminEventBookingsTab.tsx @@ -120,11 +120,7 @@ const AdminEventBookingsTab = ({ eventId, eventStatus, onCheckedIn }: AdminEvent if (!isCancelledLike || !reason) return '—' - return ( - - {reason} - - ) + return {reason} }, checkedInAt: (_row, cellValue) => formatPersianDate(cellValue), createdAt: (_row, cellValue) => formatPersianDate(cellValue), diff --git a/openapi.json b/openapi.json index 2313a25..7f1fa7c 100644 --- a/openapi.json +++ b/openapi.json @@ -50,7 +50,9 @@ } }, "summary": "Request SMS OTP", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/auth/verify-otp": { @@ -112,7 +114,9 @@ } }, "summary": "Verify OTP", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/auth/refresh": { @@ -153,7 +157,9 @@ } }, "summary": "Refresh JWT tokens", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/auth/logout": { @@ -219,7 +225,9 @@ } ], "summary": "Logout current session", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/auth/logout-all": { @@ -285,7 +293,9 @@ } ], "summary": "Logout all sessions", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/auth/sessions": { @@ -354,7 +364,9 @@ } ], "summary": "List active sessions", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/auth/sessions/{id}": { @@ -442,7 +454,9 @@ } ], "summary": "Revoke a session", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/internal/sentry-webhook": { @@ -478,7 +492,9 @@ } }, "summary": "Sentry → Telegram alert relay", - "tags": ["Ops"] + "tags": [ + "Ops" + ] } }, "/api/v1/internal/jibit-transaction-webhook": { @@ -523,7 +539,9 @@ } }, "summary": "Jibit account-transaction → Telegram relay", - "tags": ["Ops"] + "tags": [ + "Ops" + ] } }, "/api/v1/users/public/{id}": { @@ -557,7 +575,9 @@ } ], "summary": "Get a public user profile; host stats are included only for verified hosts", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/users/public/{id}/events": { @@ -625,7 +645,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -635,7 +658,10 @@ "schema": { "default": "upcoming", "type": "string", - "enum": ["upcoming", "held"] + "enum": [ + "upcoming", + "held" + ] } } ], @@ -659,7 +685,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -671,7 +700,9 @@ } ], "summary": "List discoverable events for a verified public host", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/users/public/{id}/viewer-state": { @@ -705,7 +736,9 @@ } ], "summary": "Get private organizer state for the current viewer", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/users/me": { @@ -771,7 +804,9 @@ } ], "summary": "Get current user profile", - "tags": ["Users"] + "tags": [ + "Users" + ] }, "patch": { "description": "Updates editable profile fields for the authenticated user only.", @@ -846,7 +881,9 @@ } ], "summary": "Update current user profile", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/users/me/profile-summary": { @@ -922,7 +959,9 @@ } ], "summary": "Get current user profile hub summary", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/users/{id}/attendee-contact-links": { @@ -960,7 +999,9 @@ } ], "summary": "Get attendee-only contact links for an organizer", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/users/me/complete-profile": { @@ -1047,7 +1088,9 @@ } ], "summary": "Complete user profile after OTP verification", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/admin/users": { @@ -1116,7 +1159,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -1240,7 +1286,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -1312,7 +1361,9 @@ } ], "summary": "Paginated admin users list", - "tags": ["Admin - Users"] + "tags": [ + "Admin - Users" + ] } }, "/api/v1/admin/users/{id}/mobile": { @@ -1418,7 +1469,9 @@ } ], "summary": "Change a user's login mobile (admin)", - "tags": ["Admin - Users"] + "tags": [ + "Admin - Users" + ] } }, "/api/v1/admin/users/{id}": { @@ -1525,7 +1578,9 @@ } ], "summary": "Edit a user (admin)", - "tags": ["Admin - Users"] + "tags": [ + "Admin - Users" + ] }, "get": { "description": "Staff-only: full profile, identity status, wallet balance, and a summary count for every category (hosted events, bookings, payments, reviews, follows, reports, blocks). See the dedicated sub-endpoints (hosted-events, bookings, payments, reviews, follows, reports, blocks) for the paginated lists themselves.", @@ -1618,7 +1673,9 @@ } ], "summary": "Full user detail for admin", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/users/me/contact-links": { @@ -1646,7 +1703,9 @@ } ], "summary": "Current user's contact links (unpaginated)", - "tags": ["users"] + "tags": [ + "users" + ] }, "post": { "operationId": "UserContactLinksController_create", @@ -1679,7 +1738,9 @@ } ], "summary": "Add a contact link for the current user", - "tags": ["users"] + "tags": [ + "users" + ] } }, "/api/v1/users/me/contact-links/{id}": { @@ -1723,7 +1784,9 @@ } ], "summary": "Update a contact link owned by the current user", - "tags": ["users"] + "tags": [ + "users" + ] }, "delete": { "operationId": "UserContactLinksController_remove", @@ -1755,7 +1818,9 @@ } ], "summary": "Remove a contact link owned by the current user", - "tags": ["users"] + "tags": [ + "users" + ] } }, "/api/v1/identity/rejection-reasons": { @@ -1799,7 +1864,9 @@ } }, "summary": "List active identity rejection reasons", - "tags": ["Identity"] + "tags": [ + "Identity" + ] } }, "/api/v1/identity/verifications/request-otp": { @@ -1895,7 +1962,9 @@ } ], "summary": "Request OTP to confirm host cooperation contract", - "tags": ["Identity"] + "tags": [ + "Identity" + ] } }, "/api/v1/identity/verifications/confirm-otp": { @@ -1981,7 +2050,9 @@ } ], "summary": "Confirm host-contract OTP and submit identity verification", - "tags": ["Identity"] + "tags": [ + "Identity" + ] } }, "/api/v1/identity/verifications/me": { @@ -2050,7 +2121,9 @@ } ], "summary": "List my identity verification submissions", - "tags": ["Identity"] + "tags": [ + "Identity" + ] } }, "/api/v1/admin/identity/verifications": { @@ -2112,7 +2185,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -2156,7 +2232,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -2228,7 +2307,9 @@ } ], "summary": "List identity verification review queue", - "tags": ["Admin - Identity"] + "tags": [ + "Admin - Identity" + ] } }, "/api/v1/admin/identity/verifications/{id}/jibit-inquiry": { @@ -2326,7 +2407,9 @@ } ], "summary": "Run Jibit national-code/mobile matching inquiry", - "tags": ["Admin - Identity"] + "tags": [ + "Admin - Identity" + ] } }, "/api/v1/admin/identity/verifications/{id}/approve": { @@ -2424,7 +2507,9 @@ } ], "summary": "Approve identity verification", - "tags": ["Admin - Identity"] + "tags": [ + "Admin - Identity" + ] } }, "/api/v1/admin/identity/verifications/{id}/reject": { @@ -2533,7 +2618,9 @@ } ], "summary": "Reject identity verification", - "tags": ["Admin - Identity"] + "tags": [ + "Admin - Identity" + ] } }, "/api/v1/notifications/me": { @@ -2595,7 +2682,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -2639,7 +2729,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -2691,7 +2784,9 @@ } ], "summary": "List my in-app notifications", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/me/unread-count": { @@ -2757,7 +2852,9 @@ } ], "summary": "Get unread in-app notification count", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/me/read-all": { @@ -2823,7 +2920,9 @@ } ], "summary": "Mark all my in-app notifications as read", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/{id}/read": { @@ -2910,7 +3009,9 @@ } ], "summary": "Mark an in-app notification as read", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/push/vapid-public-key": { @@ -2976,7 +3077,9 @@ } ], "summary": "Get VAPID public key for Web Push subscription", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/push/deliveries/receipt": { @@ -3062,7 +3165,9 @@ } ], "summary": "Record a browser Web Push receipt event", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/push/subscribe": { @@ -3151,7 +3256,9 @@ } ], "summary": "Register a browser Web Push subscription", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] }, "delete": { "description": "Called on logout to stop push delivery to all user devices.", @@ -3218,7 +3325,9 @@ } ], "summary": "Remove all Web Push subscriptions for current user", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/push/subscribe/{id}": { @@ -3306,7 +3415,9 @@ } ], "summary": "Remove a browser Web Push subscription", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/admin/sms-messages": { @@ -3368,7 +3479,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -3422,7 +3536,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -3494,7 +3611,9 @@ } ], "summary": "List SMS delivery records", - "tags": ["Admin - Notifications"] + "tags": [ + "Admin - Notifications" + ] } }, "/api/v1/admin/notification-rules": { @@ -3522,7 +3641,9 @@ } ], "summary": "List admin-managed notification rules", - "tags": ["Admin - Notification Rules"] + "tags": [ + "Admin - Notification Rules" + ] } }, "/api/v1/admin/notification-rules/{eventKey}": { @@ -3566,7 +3687,9 @@ } ], "summary": "Update delivery and templates for a notification event", - "tags": ["Admin - Notification Rules"] + "tags": [ + "Admin - Notification Rules" + ] } }, "/api/v1/admin/manual-notifications/request-otp": { @@ -3652,7 +3775,9 @@ } ], "summary": "Request OTP before sending a group SMS", - "tags": ["Admin - Notifications"] + "tags": [ + "Admin - Notifications" + ] } }, "/api/v1/admin/manual-notifications": { @@ -3748,7 +3873,9 @@ } ], "summary": "Send a manual notification to selected users", - "tags": ["Admin - Notifications"] + "tags": [ + "Admin - Notifications" + ] } }, "/api/v1/admin/in-app-notifications": { @@ -3810,7 +3937,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -3874,7 +4004,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -3946,7 +4079,9 @@ } ], "summary": "List in-app notifications", - "tags": ["Admin - Notifications"] + "tags": [ + "Admin - Notifications" + ] } }, "/api/v1/admin/push-deliveries": { @@ -4008,7 +4143,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -4072,7 +4210,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -4144,7 +4285,9 @@ } ], "summary": "List Web Push delivery records", - "tags": ["Admin - Notifications"] + "tags": [ + "Admin - Notifications" + ] } }, "/api/v1/event-categories": { @@ -4167,7 +4310,9 @@ } }, "summary": "Active event categories (flat list, unpaginated)", - "tags": ["Event Categories"] + "tags": [ + "Event Categories" + ] } }, "/api/v1/event-categories/{slug}": { @@ -4196,7 +4341,9 @@ } }, "summary": "Single active category by slug", - "tags": ["Event Categories"] + "tags": [ + "Event Categories" + ] } }, "/api/v1/admin/event-categories/flat": { @@ -4224,7 +4371,9 @@ } ], "summary": "Flat list of all categories for admin filters", - "tags": ["Admin - Event Categories"] + "tags": [ + "Admin - Event Categories" + ] } }, "/api/v1/admin/event-categories": { @@ -4283,7 +4432,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -4307,7 +4459,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -4319,7 +4474,9 @@ } ], "summary": "Paginated category management list", - "tags": ["Admin - Event Categories"] + "tags": [ + "Admin - Event Categories" + ] }, "post": { "operationId": "AdminEventCategoriesController_create", @@ -4352,7 +4509,9 @@ } ], "summary": "Create event category", - "tags": ["Admin - Event Categories"] + "tags": [ + "Admin - Event Categories" + ] } }, "/api/v1/admin/event-categories/{id}": { @@ -4396,7 +4555,9 @@ } ], "summary": "Update event category", - "tags": ["Admin - Event Categories"] + "tags": [ + "Admin - Event Categories" + ] }, "delete": { "operationId": "AdminEventCategoriesController_remove", @@ -4428,7 +4589,9 @@ } ], "summary": "Soft-delete event category", - "tags": ["Admin - Event Categories"] + "tags": [ + "Admin - Event Categories" + ] } }, "/api/v1/geography/provinces": { @@ -4451,7 +4614,9 @@ } }, "summary": "List all provinces (unpaginated)", - "tags": ["Geography"] + "tags": [ + "Geography" + ] } }, "/api/v1/geography/cities": { @@ -4475,7 +4640,9 @@ } }, "summary": "List all cities (unpaginated, flat)", - "tags": ["Geography"] + "tags": [ + "Geography" + ] } }, "/api/v1/geography/provinces/{provinceId}/cities": { @@ -4507,7 +4674,9 @@ } }, "summary": "List cities in a province (unpaginated)", - "tags": ["Geography"] + "tags": [ + "Geography" + ] } }, "/api/v1/geography/cities/{slug}": { @@ -4537,7 +4706,9 @@ } }, "summary": "Single city by slug (SEO city landing pages)", - "tags": ["Geography"] + "tags": [ + "Geography" + ] } }, "/api/v1/my-events": { @@ -4597,7 +4768,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -4607,7 +4781,10 @@ "schema": { "default": "guest", "type": "string", - "enum": ["guest", "host"] + "enum": [ + "guest", + "host" + ] } }, { @@ -4617,7 +4794,14 @@ "schema": { "default": "upcoming", "type": "string", - "enum": ["upcoming", "held", "cancelled", "pending_review", "published", "rejected"] + "enum": [ + "upcoming", + "held", + "cancelled", + "pending_review", + "published", + "rejected" + ] } } ], @@ -4628,15 +4812,32 @@ "application/json": { "schema": { "type": "object", - "required": ["role", "status", "canHost", "availableRoles", "items", "response"], + "required": [ + "role", + "status", + "canHost", + "availableRoles", + "items", + "response" + ], "properties": { "role": { "type": "string", - "enum": ["guest", "host"] + "enum": [ + "guest", + "host" + ] }, "status": { "type": "string", - "enum": ["upcoming", "held", "cancelled", "pending_review", "published", "rejected"] + "enum": [ + "upcoming", + "held", + "cancelled", + "pending_review", + "published", + "rejected" + ] }, "canHost": { "type": "boolean" @@ -4645,7 +4846,10 @@ "type": "array", "items": { "type": "string", - "enum": ["guest", "host"] + "enum": [ + "guest", + "host" + ] } }, "items": { @@ -4676,7 +4880,9 @@ } ], "summary": "List the current user’s guest or hosted events by lifecycle", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{eventId}/revisions": { @@ -4720,7 +4926,9 @@ } ], "summary": "Submit a pending revision for a published/full event (admin must re-approve before changes go live)", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{eventId}/revisions/pending": { @@ -4754,7 +4962,9 @@ } ], "summary": "Get the current pending revision for own live event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] }, "delete": { "operationId": "EventRevisionsController_withdraw", @@ -4788,7 +4998,9 @@ } ], "summary": "Withdraw the pending revision for own live event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events": { @@ -4823,7 +5035,9 @@ } ], "summary": "Create a draft event (verified host)", - "tags": ["My Events"] + "tags": [ + "My Events" + ] }, "get": { "operationId": "EventsController_discovery", @@ -4884,7 +5098,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -4908,14 +5125,19 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } } }, "summary": "Public event discovery list", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/events/mine": { @@ -4978,7 +5200,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -5002,7 +5227,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -5014,7 +5242,9 @@ } ], "summary": "Organizer's own events", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/for-edit": { @@ -5049,7 +5279,9 @@ } ], "summary": "Full event payload for edit/clone forms", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/owner-insights": { @@ -5083,7 +5315,9 @@ } ], "summary": "Get engagement insights for own event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/management-bootstrap": { @@ -5117,7 +5351,9 @@ } ], "summary": "Get all initial data for managing an owned event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/attendees": { @@ -5184,7 +5420,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -5226,7 +5465,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -5238,7 +5480,9 @@ } ], "summary": "Search and list registrations for own event attendance desk", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/reserved-capacity": { @@ -5283,7 +5527,9 @@ } ], "summary": "Set capacity and/or off-platform reserved seats for own event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}": { @@ -5327,7 +5573,9 @@ } ], "summary": "Update own event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] }, "delete": { "operationId": "MyEventsController_softDelete", @@ -5359,7 +5607,9 @@ } ], "summary": "Soft-delete own event when it has no active bookings (booked_count = 0)", - "tags": ["My Events"] + "tags": [ + "My Events" + ] }, "get": { "operationId": "EventsController_findOne", @@ -5386,7 +5636,9 @@ } }, "summary": "Single event detail", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/events/{id}/publish": { @@ -5420,7 +5672,9 @@ } ], "summary": "Publish draft event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/cancel": { @@ -5454,7 +5708,9 @@ } ], "summary": "Cancel published/full event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/complete": { @@ -5488,7 +5744,9 @@ } ], "summary": "Mark event completed (creates group chat)", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/clone": { @@ -5522,7 +5780,9 @@ } ], "summary": "Clone event to new draft", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/bookmarks": { @@ -5581,7 +5841,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -5605,7 +5868,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -5617,7 +5883,9 @@ } ], "summary": "List events bookmarked by current user", - "tags": ["Event Bookmarks"] + "tags": [ + "Event Bookmarks" + ] } }, "/api/v1/events/bookmarks/status": { @@ -5652,7 +5920,9 @@ } ], "summary": "Get bookmark status for a batch of events", - "tags": ["Event Bookmarks"] + "tags": [ + "Event Bookmarks" + ] } }, "/api/v1/events/{id}/bookmark": { @@ -5686,7 +5956,9 @@ } ], "summary": "Get bookmark status for current user", - "tags": ["Event Bookmarks"] + "tags": [ + "Event Bookmarks" + ] }, "post": { "operationId": "EventBookmarksController_bookmark", @@ -5718,7 +5990,9 @@ } ], "summary": "Bookmark an event", - "tags": ["Event Bookmarks"] + "tags": [ + "Event Bookmarks" + ] }, "delete": { "operationId": "EventBookmarksController_remove", @@ -5750,7 +6024,9 @@ } ], "summary": "Remove an event bookmark", - "tags": ["Event Bookmarks"] + "tags": [ + "Event Bookmarks" + ] } }, "/api/v1/events/by-slug/{slug}/bootstrap": { @@ -5779,7 +6055,9 @@ } }, "summary": "Public event landing bootstrap payload", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/events/by-slug/{slug}": { @@ -5808,7 +6086,9 @@ } }, "summary": "Single discoverable event by slug (SEO event landing page)", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/events/{id}/viewer-state": { @@ -5837,7 +6117,9 @@ } }, "summary": "Authenticated viewer state for an event landing", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/admin/events/{eventId}/revisions/pending": { @@ -5871,7 +6153,9 @@ } ], "summary": "Get pending revision for any live event", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{eventId}/revisions/{revisionId}/approve": { @@ -5913,7 +6197,9 @@ } ], "summary": "Approve a pending revision and apply it to the live event immediately (no host confirm)", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{eventId}/revisions/{revisionId}/reject": { @@ -5965,7 +6251,9 @@ } ], "summary": "Reject a pending revision; live event content stays unchanged", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events": { @@ -6028,7 +6316,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -6052,7 +6343,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -6064,7 +6358,9 @@ } ], "summary": "Paginated admin events list", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] }, "post": { "description": "Requires a verified host `organizerId`. Creates a draft with `admin_approved_at` set so the host can publish immediately; does not publish. Notifies the host (SMS + in-app) via `event_created_by_admin`.", @@ -6098,7 +6394,9 @@ } ], "summary": "Create a pre-approved draft event for a verified host", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}": { @@ -6132,7 +6430,9 @@ } ], "summary": "Admin event detail including bookmark count", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] }, "patch": { "operationId": "AdminEventsController_update", @@ -6174,7 +6474,9 @@ } ], "summary": "Update any event as admin (same field locks as host edit)", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] }, "delete": { "operationId": "AdminEventsController_softDelete", @@ -6206,7 +6508,9 @@ } ], "summary": "Soft-delete any event as admin when it has no active bookings (booked_count = 0)", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/reserved-capacity": { @@ -6250,7 +6554,9 @@ } ], "summary": "Set capacity and/or off-platform reserved seat count as admin", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/commission": { @@ -6295,7 +6601,9 @@ } ], "summary": "Set or clear this event’s platform commission override", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/insights": { @@ -6329,7 +6637,9 @@ } ], "summary": "Get engagement insights for any event as admin", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/approve": { @@ -6363,7 +6673,9 @@ } ], "summary": "Approve a draft or pending-review event; publishes once the host has also requested publication", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/publish": { @@ -6397,7 +6709,9 @@ } ], "summary": "Force-publish any organizer’s draft or pending-review event as admin, bypassing the request/approve flow entirely", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/reject": { @@ -6441,7 +6755,9 @@ } ], "summary": "Reject a pending-review event with a reason", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/cancel": { @@ -6475,7 +6791,9 @@ } ], "summary": "Cancel any organizer’s published/full event as admin", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/complete": { @@ -6509,7 +6827,9 @@ } ], "summary": "Mark any organizer’s event completed as admin", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/discovery/cities": { @@ -6533,7 +6853,9 @@ } }, "summary": "Cached city list for discovery/home", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/discovery/categories": { @@ -6556,7 +6878,9 @@ } }, "summary": "Cached active category tree summary for discovery/home", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/discovery/home-feed": { @@ -6586,7 +6910,9 @@ } }, "summary": "Home page event sections (popular, category previews, city previews)", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/discovery/bootstrap": { @@ -6607,7 +6933,9 @@ } }, "summary": "Legacy combined reference data for event discovery", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/organizers/me/following": { @@ -6668,7 +6996,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -6701,7 +7032,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -6713,7 +7047,9 @@ } ], "summary": "Get organizers followed by current user", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/organizers/me/following/events": { @@ -6774,7 +7110,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -6798,7 +7137,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -6810,7 +7152,9 @@ } ], "summary": "Get upcoming events from followed organizers", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/organizers/me/followers": { @@ -6871,7 +7215,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -6895,7 +7242,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -6907,7 +7257,9 @@ } ], "summary": "Get followers of the current user (as organizer)", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/organizers/{organizerId}/follow": { @@ -7003,7 +7355,9 @@ } ], "summary": "Follow an organizer", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] }, "delete": { "operationId": "OrganizerFollowsController_unfollow", @@ -7087,7 +7441,9 @@ } ], "summary": "Unfollow an organizer", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/organizers/{organizerId}/followers": { @@ -7158,7 +7514,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -7182,14 +7541,19 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } } }, "summary": "Get followers of an organizer", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/organizers/{organizerId}/is-following": { @@ -7231,7 +7595,9 @@ } ], "summary": "Check if current user is following an organizer", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/organizers/{organizerId}/follow-settings": { @@ -7277,7 +7643,9 @@ } ], "summary": "Update follow notification settings", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/events/{eventId}/media": { @@ -7309,7 +7677,9 @@ } }, "summary": "List media for an event (unpaginated)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] }, "post": { "operationId": "EventMediaController_create", @@ -7351,7 +7721,9 @@ } ], "summary": "Add media to own event (or any event as admin)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/media/{id}": { @@ -7403,7 +7775,9 @@ } ], "summary": "Update event media (owner or admin)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] }, "delete": { "operationId": "EventMediaController_remove", @@ -7443,7 +7817,9 @@ } ], "summary": "Remove event media (owner or admin)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/faqs": { @@ -7475,7 +7851,9 @@ } }, "summary": "List FAQs for an event (unpaginated)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] }, "post": { "operationId": "EventFaqsController_create", @@ -7517,7 +7895,9 @@ } ], "summary": "Add FAQ to own event (or any event as admin)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/faqs/page": { @@ -7584,7 +7964,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -7608,14 +7991,19 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } } }, "summary": "Paginated FAQs for an event", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/faqs/{id}": { @@ -7667,7 +8055,9 @@ } ], "summary": "Update event FAQ (owner or admin)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] }, "delete": { "operationId": "EventFaqsController_remove", @@ -7707,7 +8097,9 @@ } ], "summary": "Remove event FAQ (owner or admin)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/organizer-guest-lists/previous-attendees": { @@ -7735,7 +8127,9 @@ } ], "summary": "Organizer's deduplicated confirmed (paid/free) guests", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/organizer-guest-lists": { @@ -7794,7 +8188,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -7818,7 +8215,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -7830,7 +8230,9 @@ } ], "summary": "Organizer's own guest lists (paginated)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] }, "post": { "operationId": "OrganizerGuestListsController_create", @@ -7863,7 +8265,9 @@ } ], "summary": "Create a guest list", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/organizer-guest-lists/{id}": { @@ -7898,7 +8302,9 @@ } ], "summary": "Soft-delete a whole guest list", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/organizer-guest-lists/{id}/items": { @@ -7967,7 +8373,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -7991,7 +8400,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -8003,7 +8415,9 @@ } ], "summary": "A guest list's contacts (paginated)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] }, "post": { "operationId": "OrganizerGuestListsController_addItem", @@ -8046,7 +8460,9 @@ } ], "summary": "Add a contact to a guest list", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/organizer-guest-lists/{id}/items/{itemId}": { @@ -8090,7 +8506,9 @@ } ], "summary": "Remove a contact from a guest list", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/guest-list-links/invited-guests": { @@ -8135,7 +8553,9 @@ } ], "summary": "Set previous attendees invited to this event", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/guest-list-links/invited-guests/page": { @@ -8202,7 +8622,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -8226,7 +8649,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -8238,7 +8664,9 @@ } ], "summary": "Paginated guests selected to invite to this event", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/guest-list-links/invited-guests/notify": { @@ -8273,7 +8701,9 @@ } ], "summary": "Send invitation notifications for the event invite set", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/guest-list-links/page": { @@ -8340,7 +8770,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -8364,7 +8797,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -8376,7 +8812,9 @@ } ], "summary": "Paginated guest lists linked to this event", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/guest-list-links": { @@ -8421,7 +8859,9 @@ } ], "summary": "Attach a guest list to an event (stores link only — call notify to send invitations)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/guest-list-links/{listId}/notify": { @@ -8465,7 +8905,9 @@ } ], "summary": "Send invitation notifications for a guest list linked to this event", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/guest-list-links/{listId}": { @@ -8509,7 +8951,9 @@ } ], "summary": "Unlink a guest list from an event", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/admin/guest-lists": { @@ -8569,7 +9013,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -8593,7 +9040,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -8605,7 +9055,9 @@ } ], "summary": "Every organizer's guest lists (paginated)", - "tags": ["Admin - Event Extras"] + "tags": [ + "Admin - Event Extras" + ] } }, "/api/v1/admin/guest-lists/{id}/items": { @@ -8673,7 +9125,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -8697,7 +9152,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -8709,7 +9167,9 @@ } ], "summary": "Any guest list's contacts, admin view (paginated)", - "tags": ["Admin - Event Extras"] + "tags": [ + "Admin - Event Extras" + ] } }, "/api/v1/admin/events/{eventId}/guest-list-links": { @@ -8748,7 +9208,9 @@ } ], "summary": "Guest lists linked to any event, admin view (unpaginated)", - "tags": ["Admin - Event Extras"] + "tags": [ + "Admin - Event Extras" + ] } }, "/api/v1/admin/events/{eventId}/invited-guests": { @@ -8787,7 +9249,9 @@ } ], "summary": "Guests selected to invite to this event (unpaginated)", - "tags": ["Admin - Event Extras"] + "tags": [ + "Admin - Event Extras" + ] }, "put": { "description": "userIds must all be existing platform users. Full replace, not incremental. An empty array clears the invite set. Does not send notifications — use POST .../notify.", @@ -8834,7 +9298,9 @@ } ], "summary": "Replace the invite set for this event", - "tags": ["Admin - Event Extras"] + "tags": [ + "Admin - Event Extras" + ] } }, "/api/v1/admin/events/{eventId}/invited-guests/notify": { @@ -8870,7 +9336,9 @@ } ], "summary": "Send invitation notifications to the event invite set", - "tags": ["Admin - Event Extras"] + "tags": [ + "Admin - Event Extras" + ] } }, "/api/v1/bookings/{bookingId}/payments": { @@ -8914,7 +9382,9 @@ } ], "summary": "Create payment attempt for a booking", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/bookings/{bookingId}/discount-preview": { @@ -8958,7 +9428,9 @@ } ], "summary": "Preview a discount code against a booking", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/payments/me": { @@ -9017,7 +9489,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -9041,7 +9516,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -9053,7 +9531,9 @@ } ], "summary": "Current user's payments", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/payments/{id}/receipt": { @@ -9087,7 +9567,9 @@ } ], "summary": "Payment receipt (owner only)", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/payments": { @@ -9146,7 +9628,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -9170,7 +9655,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -9182,7 +9670,9 @@ } ], "summary": "Paginated admin payment list, all users", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/wallet-deposits": { @@ -9241,7 +9731,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -9265,7 +9758,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -9277,7 +9773,9 @@ } ], "summary": "Paginated admin wallet deposit list (gateway sessions)", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/users/me/wallet": { @@ -9302,7 +9800,9 @@ } ], "summary": "Current user's wallet", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/users/me/wallet/transactions": { @@ -9361,7 +9861,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -9385,7 +9888,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -9397,7 +9903,9 @@ } ], "summary": "Current user's wallet transactions", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/users/me/wallet/deposits": { @@ -9432,7 +9940,9 @@ } ], "summary": "Start a wallet top-up via payment gateway", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/users/me/wallet/deposits/{id}": { @@ -9466,7 +9976,9 @@ } ], "summary": "Get one of the current user wallet deposits", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/wallet/deposits/{id}/gateway-return": { @@ -9497,7 +10009,9 @@ } }, "summary": "Jibit browser return (GET) — verifies payment server-side then redirects to the frontend result page", - "tags": ["Financial"] + "tags": [ + "Financial" + ] }, "post": { "operationId": "WalletController_depositGatewayReturnPost", @@ -9526,7 +10040,9 @@ } }, "summary": "Jibit browser return (form POST from PPG) — verifies payment server-side then redirects to the frontend result page", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/wallet/deposits/{id}/gateway-callback": { @@ -9565,7 +10081,9 @@ } }, "summary": "Console/dev HMAC callback for wallet deposits (disabled when PAYMENT_GATEWAY_PROVIDER=jibit)", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/bank-accounts": { @@ -9600,7 +10118,9 @@ } ], "summary": "Create bank account for withdrawals/settlements", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/bank-accounts/me": { @@ -9628,7 +10148,9 @@ } ], "summary": "Current user's bank accounts", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/bank-accounts": { @@ -9687,7 +10209,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -9711,7 +10236,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -9723,7 +10251,9 @@ } ], "summary": "Paginated admin bank account verification queue", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/bank-accounts/{id}/jibit-inquiry": { @@ -9758,7 +10288,9 @@ } ], "summary": "Run Jibit IBAN/national-code/birth-date matching inquiry", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/bank-accounts/{id}/approve": { @@ -9792,7 +10324,9 @@ } ], "summary": "Approve bank account after a successful Jibit match", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/bank-accounts/{id}/reject": { @@ -9836,7 +10370,9 @@ } ], "summary": "Reject bank account with a reason", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/withdrawal-requests": { @@ -9871,7 +10407,9 @@ } ], "summary": "Create withdrawal request from wallet", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/withdrawal-requests/me": { @@ -9930,7 +10468,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -9954,7 +10495,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -9966,7 +10510,9 @@ } ], "summary": "Current user's withdrawal requests", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/withdrawal-requests": { @@ -10025,7 +10571,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -10049,7 +10598,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -10061,7 +10613,9 @@ } ], "summary": "Paginated admin withdrawal queue", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/withdrawal-requests/{id}/process": { @@ -10095,7 +10649,9 @@ } ], "summary": "Mark withdrawal request as processing", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/withdrawal-requests/{id}/complete": { @@ -10139,7 +10695,9 @@ } ], "summary": "Complete withdrawal with manual payment evidence", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/withdrawal-requests/{id}/reject": { @@ -10183,7 +10741,9 @@ } ], "summary": "Reject withdrawal request and reverse hold", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/organizers/me/earnings": { @@ -10242,7 +10802,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -10266,7 +10829,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -10278,7 +10844,9 @@ } ], "summary": "Current organizer's earnings ledger", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/settlements/me": { @@ -10337,7 +10905,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -10361,7 +10932,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -10373,7 +10947,9 @@ } ], "summary": "Current organizer's settlement batches", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/settlements": { @@ -10408,7 +10984,9 @@ } ], "summary": "Create organizer settlement batch", - "tags": ["Financial"] + "tags": [ + "Financial" + ] }, "get": { "operationId": "AdminSettlementsController_list", @@ -10465,7 +11043,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -10489,7 +11070,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -10501,7 +11085,9 @@ } ], "summary": "Paginated settlement batches", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/settlements/{id}": { @@ -10536,7 +11122,9 @@ } ], "summary": "Settlement batch detail, with items inlined", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/settlements/{id}/process": { @@ -10570,7 +11158,9 @@ } ], "summary": "Mark settlement batch as processing", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/settlements/{id}/complete": { @@ -10614,7 +11204,9 @@ } ], "summary": "Complete settlement with manual payment evidence", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/settlements/{id}/fail": { @@ -10659,7 +11251,9 @@ } ], "summary": "Mark settlement batch as failed and release its earnings", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/events/{eventId}/discount-codes": { @@ -10704,7 +11298,9 @@ } ], "summary": "Bulk-create discount codes for an event (host or admin)", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] }, "get": { "operationId": "DiscountCodesController_list", @@ -10770,7 +11366,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -10794,7 +11393,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -10806,7 +11408,9 @@ } ], "summary": "An event's discount codes (paginated)", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] } }, "/api/v1/events/{eventId}/discount-codes/management-bootstrap": { @@ -10840,7 +11444,9 @@ } ], "summary": "All initial data for an event's discount management tab", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] } }, "/api/v1/events/{eventId}/discount-codes/report": { @@ -10875,7 +11481,9 @@ } ], "summary": "Summary of an event's discount usage", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] } }, "/api/v1/events/{eventId}/discount-codes/redemptions": { @@ -10943,7 +11551,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -10967,7 +11578,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -10979,7 +11593,9 @@ } ], "summary": "An event's discount redemptions (paginated)", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] } }, "/api/v1/discount-codes/{id}": { @@ -11024,7 +11640,9 @@ } ], "summary": "Enable/disable a discount code (host or admin)", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] }, "delete": { "operationId": "DiscountCodesController_remove", @@ -11057,7 +11675,9 @@ } ], "summary": "Delete an unused discount code (host or admin)", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] } }, "/api/v1/events/{eventId}/bookings": { @@ -11101,7 +11721,9 @@ } ], "summary": "Create a booking for an event", - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/api/v1/bookings/me": { @@ -11160,7 +11782,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -11184,7 +11809,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -11196,7 +11824,9 @@ } ], "summary": "Current user's booking history", - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/api/v1/bookings/{id}": { @@ -11230,7 +11860,9 @@ } ], "summary": "Single booking detail (owner only)", - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/api/v1/bookings/{id}/cancel": { @@ -11275,7 +11907,9 @@ } ], "summary": "Cancel a booking (guest only)", - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/api/v1/bookings/{id}/check-in": { @@ -11309,7 +11943,9 @@ } ], "summary": "Check in a guest (event organizer only)", - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/api/v1/events/{eventId}/waitlist": { @@ -11353,7 +11989,9 @@ } ], "summary": "Join the waitlist for a full event", - "tags": ["Waitlist"] + "tags": [ + "Waitlist" + ] }, "get": { "operationId": "WaitlistController_listForEvent", @@ -11418,7 +12056,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -11442,7 +12083,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -11454,7 +12098,9 @@ } ], "summary": "Host view of the waiting queue for their own event (used to hand-pick who gets a seat when settings.waitlistAutoOffer is false)", - "tags": ["Waitlist"] + "tags": [ + "Waitlist" + ] } }, "/api/v1/waitlist/me": { @@ -11513,7 +12159,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -11537,7 +12186,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -11549,7 +12201,9 @@ } ], "summary": "Current user's waitlist entries", - "tags": ["Waitlist"] + "tags": [ + "Waitlist" + ] } }, "/api/v1/events/{eventId}/waitlist/{entryId}/offer": { @@ -11591,7 +12245,9 @@ } ], "summary": "Host manually offers an opened seat to a specific waitlist entry", - "tags": ["Waitlist"] + "tags": [ + "Waitlist" + ] } }, "/api/v1/waitlist/{id}/accept": { @@ -11625,7 +12281,9 @@ } ], "summary": "Accept a notified waitlist offer", - "tags": ["Waitlist"] + "tags": [ + "Waitlist" + ] } }, "/api/v1/admin/bookings": { @@ -11684,7 +12342,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -11708,7 +12369,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -11720,7 +12384,9 @@ } ], "summary": "Paginated admin bookings list", - "tags": ["Admin - Bookings"] + "tags": [ + "Admin - Bookings" + ] } }, "/api/v1/admin/bookings/{id}/check-in": { @@ -11754,7 +12420,9 @@ } ], "summary": "Check in a guest for any organizer’s event as admin", - "tags": ["Admin - Bookings"] + "tags": [ + "Admin - Bookings" + ] } }, "/api/v1/events/{eventId}/reviews": { @@ -11826,7 +12494,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -11860,7 +12531,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -11907,7 +12581,9 @@ } }, "summary": "List published reviews for an event", - "tags": ["Reviews"] + "tags": [ + "Reviews" + ] }, "post": { "description": "Authenticated guests with a confirmed booking may review once after the event is completed.", @@ -12012,7 +12688,9 @@ } ], "summary": "Create a review for a completed event", - "tags": ["Reviews"] + "tags": [ + "Reviews" + ] } }, "/api/v1/users/{userId}/reviews": { @@ -12084,7 +12762,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -12108,7 +12789,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -12155,7 +12839,9 @@ } }, "summary": "List published reviews for an organizer", - "tags": ["Reviews"] + "tags": [ + "Reviews" + ] } }, "/api/v1/reviews/{id}": { @@ -12262,7 +12948,9 @@ } ], "summary": "Update own review", - "tags": ["Reviews"] + "tags": [ + "Reviews" + ] } }, "/api/v1/reviews/{id}/host-reply": { @@ -12369,7 +13057,9 @@ } ], "summary": "Reply to a review as organizer", - "tags": ["Reviews"] + "tags": [ + "Reviews" + ] } }, "/api/v1/admin/reviews": { @@ -12431,7 +13121,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -12482,7 +13175,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -12494,7 +13190,9 @@ } ], "summary": "Paginated review moderation list", - "tags": ["Admin - Reviews"] + "tags": [ + "Admin - Reviews" + ] } }, "/api/v1/admin/reviews/{id}/hide": { @@ -12590,7 +13288,9 @@ } ], "summary": "Hide a review from public view", - "tags": ["Admin - Reviews"] + "tags": [ + "Admin - Reviews" + ] } }, "/api/v1/admin/reviews/{id}/restore": { @@ -12686,7 +13386,9 @@ } ], "summary": "Restore a hidden review to published", - "tags": ["Admin - Reviews"] + "tags": [ + "Admin - Reviews" + ] } }, "/api/v1/admin/reviews/{id}": { @@ -12722,7 +13424,9 @@ } ], "summary": "Soft-delete a review", - "tags": ["Admin - Reviews"] + "tags": [ + "Admin - Reviews" + ] } }, "/api/v1/conversations/me/unread-count": { @@ -12798,7 +13502,9 @@ } ], "summary": "Get total unread message count", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/me": { @@ -12860,7 +13566,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -12894,7 +13603,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -12956,7 +13668,9 @@ } ], "summary": "List my conversations", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/direct/{otherUserId}": { @@ -13053,7 +13767,9 @@ } ], "summary": "Get or create a direct conversation", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/direct/{otherUserId}/messages": { @@ -13160,7 +13876,9 @@ } ], "summary": "Send a direct message", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/{id}": { @@ -13257,7 +13975,9 @@ } ], "summary": "Get a conversation", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/{id}/participants": { @@ -13329,7 +14049,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -13353,7 +14076,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -13425,7 +14151,9 @@ } ], "summary": "List conversation participants", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/{id}/read": { @@ -13532,7 +14260,9 @@ } ], "summary": "Mark conversation as read", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/{id}/messages": { @@ -13614,7 +14344,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -13686,7 +14419,9 @@ } ], "summary": "List messages in a conversation", - "tags": ["Chat"] + "tags": [ + "Chat" + ] }, "post": { "description": "Sends a message in an existing conversation (typically an event group chat).", @@ -13791,7 +14526,9 @@ } ], "summary": "Send a message in a conversation", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/admin/conversations": { @@ -13850,7 +14587,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -13892,7 +14632,10 @@ "required": false, "in": "query", "schema": { - "enum": ["direct", "event_group"], + "enum": [ + "direct", + "event_group" + ], "type": "string" } } @@ -13917,7 +14660,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -13989,7 +14735,9 @@ } ], "summary": "List all conversations for read-only admin oversight", - "tags": ["Admin - Chat Oversight"] + "tags": [ + "Admin - Chat Oversight" + ] } }, "/api/v1/admin/conversations/{id}": { @@ -14084,7 +14832,9 @@ } ], "summary": "Get a conversation without joining or changing read state", - "tags": ["Admin - Chat Oversight"] + "tags": [ + "Admin - Chat Oversight" + ] } }, "/api/v1/admin/conversations/{id}/participants": { @@ -14152,7 +14902,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -14176,7 +14929,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -14248,7 +15004,9 @@ } ], "summary": "List conversation participants for admin oversight", - "tags": ["Admin - Chat Oversight"] + "tags": [ + "Admin - Chat Oversight" + ] } }, "/api/v1/admin/conversations/{id}/messages": { @@ -14327,7 +15085,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -14399,7 +15160,9 @@ } ], "summary": "Read message history without joining or changing read state", - "tags": ["Admin - Chat Oversight"] + "tags": [ + "Admin - Chat Oversight" + ] } }, "/api/v1/contact-messages": { @@ -14450,7 +15213,9 @@ } }, "summary": "Submit a public contact message", - "tags": ["Contact Messages"] + "tags": [ + "Contact Messages" + ] } }, "/api/v1/admin/contact-messages": { @@ -14512,7 +15277,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -14546,7 +15314,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -14618,7 +15389,9 @@ } ], "summary": "List contact form submissions", - "tags": ["Admin - Contact Messages"] + "tags": [ + "Admin - Contact Messages" + ] } }, "/api/v1/admin/contact-messages/{id}": { @@ -14715,7 +15488,9 @@ } ], "summary": "Get one contact message", - "tags": ["Admin - Contact Messages"] + "tags": [ + "Admin - Contact Messages" + ] } }, "/api/v1/admin/contact-messages/{id}/read": { @@ -14812,7 +15587,9 @@ } ], "summary": "Mark contact message as read", - "tags": ["Admin - Contact Messages"] + "tags": [ + "Admin - Contact Messages" + ] } }, "/api/v1/traffic-visits": { @@ -14866,7 +15643,9 @@ } }, "summary": "Record a unique attributed page visit", - "tags": ["Traffic Visits"] + "tags": [ + "Traffic Visits" + ] } }, "/api/v1/user-blocks": { @@ -14963,7 +15742,9 @@ } ], "summary": "Block another user", - "tags": ["User Blocks"] + "tags": [ + "User Blocks" + ] } }, "/api/v1/user-blocks/{blockedId}": { @@ -15051,7 +15832,9 @@ } ], "summary": "Unblock a user", - "tags": ["User Blocks"] + "tags": [ + "User Blocks" + ] } }, "/api/v1/user-blocks/me": { @@ -15113,7 +15896,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -15147,7 +15933,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -15199,7 +15988,9 @@ } ], "summary": "List users I have blocked", - "tags": ["User Blocks"] + "tags": [ + "User Blocks" + ] } }, "/api/v1/report-reasons": { @@ -15243,7 +16034,9 @@ } }, "summary": "List active report reasons", - "tags": ["User Reports"] + "tags": [ + "User Reports" + ] } }, "/api/v1/user-reports": { @@ -15330,7 +16123,9 @@ } ], "summary": "Report another user", - "tags": ["User Reports"] + "tags": [ + "User Reports" + ] } }, "/api/v1/admin/user-reports": { @@ -15392,7 +16187,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -15446,7 +16244,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -15518,7 +16319,9 @@ } ], "summary": "List user report review queue", - "tags": ["Admin - User Reports"] + "tags": [ + "Admin - User Reports" + ] } }, "/api/v1/admin/user-reports/{id}/review": { @@ -15616,7 +16419,9 @@ } ], "summary": "Mark user report as reviewed", - "tags": ["Admin - User Reports"] + "tags": [ + "Admin - User Reports" + ] } }, "/api/v1/admin/user-reports/{id}/dismiss": { @@ -15714,7 +16519,9 @@ } ], "summary": "Dismiss user report", - "tags": ["Admin - User Reports"] + "tags": [ + "Admin - User Reports" + ] } }, "/api/v1/admin/user-reports/{id}/block": { @@ -15812,7 +16619,9 @@ } ], "summary": "Block reported user on the reporter's behalf", - "tags": ["Admin - User Reports"] + "tags": [ + "Admin - User Reports" + ] } }, "/api/v1/support-tickets": { @@ -15907,7 +16716,9 @@ } ], "summary": "Create a support ticket", - "tags": ["Support Tickets"] + "tags": [ + "Support Tickets" + ] } }, "/api/v1/support-tickets/me": { @@ -15966,7 +16777,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -15990,7 +16804,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -16002,7 +16819,9 @@ } ], "summary": "List my support tickets", - "tags": ["Support Tickets"] + "tags": [ + "Support Tickets" + ] } }, "/api/v1/support-tickets/{id}/messages": { @@ -16061,7 +16880,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -16073,7 +16895,9 @@ } ], "summary": "List my support ticket messages", - "tags": ["Support Tickets"] + "tags": [ + "Support Tickets" + ] } }, "/api/v1/support-tickets/{id}": { @@ -16107,7 +16931,9 @@ } ], "summary": "Get my support ticket metadata", - "tags": ["Support Tickets"] + "tags": [ + "Support Tickets" + ] } }, "/api/v1/support-tickets/{id}/replies": { @@ -16152,7 +16978,9 @@ } ], "summary": "Reply to my support ticket", - "tags": ["Support Tickets"] + "tags": [ + "Support Tickets" + ] } }, "/api/v1/support-tickets/{id}/close": { @@ -16187,7 +17015,9 @@ } ], "summary": "Close my support ticket", - "tags": ["Support Tickets"] + "tags": [ + "Support Tickets" + ] } }, "/api/v1/admin/support-tickets": { @@ -16246,7 +17076,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -16270,7 +17103,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -16342,7 +17178,9 @@ } ], "summary": "List the support queue", - "tags": ["Admin - Support Tickets"] + "tags": [ + "Admin - Support Tickets" + ] } }, "/api/v1/admin/support-tickets/{id}": { @@ -16376,7 +17214,9 @@ } ], "summary": "Get a support ticket thread", - "tags": ["Admin - Support Tickets"] + "tags": [ + "Admin - Support Tickets" + ] } }, "/api/v1/admin/support-tickets/{id}/replies": { @@ -16420,7 +17260,9 @@ } ], "summary": "Reply as support and send the user an SMS", - "tags": ["Admin - Support Tickets"] + "tags": [ + "Admin - Support Tickets" + ] } }, "/api/v1/admin/support-tickets/{id}/status": { @@ -16464,7 +17306,9 @@ } ], "summary": "Change support ticket status", - "tags": ["Admin - Support Tickets"] + "tags": [ + "Admin - Support Tickets" + ] } }, "/api/v1/admin/reports/overview": { @@ -16550,7 +17394,9 @@ } ], "summary": "Platform-wide overview KPIs", - "tags": ["Admin - Reports"] + "tags": [ + "Admin - Reports" + ] } }, "/api/v1/admin/users/{id}/wallet/credit": { @@ -16655,7 +17501,9 @@ } ], "summary": "Manually credit a user wallet", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/identity/attest": { @@ -16750,7 +17598,9 @@ } ], "summary": "Verify host identity without a user submission", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/hosted-events": { @@ -16817,7 +17667,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -16841,7 +17694,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["events", "response"] + "required": [ + "events", + "response" + ] } } } @@ -16913,7 +17769,9 @@ } ], "summary": "Events this user has hosted (organizer_id = :id)", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/bookings": { @@ -16980,7 +17838,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -17004,7 +17865,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["bookings", "response"] + "required": [ + "bookings", + "response" + ] } } } @@ -17076,7 +17940,9 @@ } ], "summary": "Bookings this user made as a guest", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/payments": { @@ -17143,7 +18009,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -17167,7 +18036,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["payments", "response"] + "required": [ + "payments", + "response" + ] } } } @@ -17239,7 +18111,9 @@ } ], "summary": "Payments this user made", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/reviews": { @@ -17306,7 +18180,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -17315,7 +18192,10 @@ "in": "query", "description": "written (default): authored by this user. received: on events this user organized.", "schema": { - "enum": ["written", "received"], + "enum": [ + "written", + "received" + ], "type": "string" } } @@ -17340,7 +18220,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["reviews", "response"] + "required": [ + "reviews", + "response" + ] } } } @@ -17412,7 +18295,9 @@ } ], "summary": "Reviews written by this user or received on their events", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/follows": { @@ -17479,7 +18364,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -17488,7 +18376,10 @@ "in": "query", "description": "following (default): organizers this user follows. followers: users following this user.", "schema": { - "enum": ["following", "followers"], + "enum": [ + "following", + "followers" + ], "type": "string" } } @@ -17513,7 +18404,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["follows", "response"] + "required": [ + "follows", + "response" + ] } } } @@ -17585,7 +18479,9 @@ } ], "summary": "Organizers this user follows, or users following this user", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/reports": { @@ -17652,7 +18548,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -17661,7 +18560,10 @@ "in": "query", "description": "filed (default): reports this user submitted. received: reports submitted about this user.", "schema": { - "enum": ["filed", "received"], + "enum": [ + "filed", + "received" + ], "type": "string" } } @@ -17686,7 +18588,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["reports", "response"] + "required": [ + "reports", + "response" + ] } } } @@ -17758,7 +18663,9 @@ } ], "summary": "User reports this user filed, or reports filed about them", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/blocks": { @@ -17825,7 +18732,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -17834,7 +18744,10 @@ "in": "query", "description": "blocking (default): users this user blocked. blockedBy: users who blocked this user.", "schema": { - "enum": ["blocking", "blockedBy"], + "enum": [ + "blocking", + "blockedBy" + ], "type": "string" } } @@ -17859,7 +18772,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["blocks", "response"] + "required": [ + "blocks", + "response" + ] } } } @@ -17931,7 +18847,9 @@ } ], "summary": "Users this user has blocked, or users who blocked this user", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/audit-logs": { @@ -17993,7 +18911,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -18045,7 +18966,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -18117,7 +19041,9 @@ } ], "summary": "List admin action audit trail", - "tags": ["Admin - Audit Logs"] + "tags": [ + "Admin - Audit Logs" + ] } }, "/api/v1/uploads": { @@ -18131,7 +19057,9 @@ "multipart/form-data": { "schema": { "type": "object", - "required": ["file"], + "required": [ + "file" + ], "properties": { "file": { "type": "string", @@ -18200,7 +19128,9 @@ } ], "summary": "Upload an image file", - "tags": ["Uploads"] + "tags": [ + "Uploads" + ] } }, "/api/v1/uploads/identity": { @@ -18213,7 +19143,9 @@ "multipart/form-data": { "schema": { "type": "object", - "required": ["file"], + "required": [ + "file" + ], "properties": { "file": { "type": "string", @@ -18242,7 +19174,9 @@ } ], "summary": "Upload a private identity document image", - "tags": ["Uploads"] + "tags": [ + "Uploads" + ] } }, "/api/v1/uploads/identity/{ownerId}/{filename}": { @@ -18297,7 +19231,9 @@ } ], "summary": "Read an authorized private identity document", - "tags": ["Uploads"] + "tags": [ + "Uploads" + ] } }, "/api/v1/uploads/internal": { @@ -18336,7 +19272,9 @@ "multipart/form-data": { "schema": { "type": "object", - "required": ["file"], + "required": [ + "file" + ], "properties": { "file": { "type": "string", @@ -18400,7 +19338,9 @@ } }, "summary": "Internal upload from trusted app instances", - "tags": ["Uploads"] + "tags": [ + "Uploads" + ] } }, "/api/v1/blog-articles/page": { @@ -18459,7 +19399,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -18492,7 +19435,10 @@ "in": "query", "schema": { "type": "string", - "enum": ["true", "false"] + "enum": [ + "true", + "false" + ] } } ], @@ -18516,14 +19462,19 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } } }, "summary": "Paginated published blog articles", - "tags": ["Blog Articles"] + "tags": [ + "Blog Articles" + ] } }, "/api/v1/blog-articles/{slug}/related": { @@ -18564,7 +19515,9 @@ } }, "summary": "Related published articles by slug", - "tags": ["Blog Articles"] + "tags": [ + "Blog Articles" + ] } }, "/api/v1/blog-articles/{slug}": { @@ -18593,7 +19546,9 @@ } }, "summary": "Single published article by slug", - "tags": ["Blog Articles"] + "tags": [ + "Blog Articles" + ] } }, "/api/v1/admin/blog-articles": { @@ -18652,7 +19607,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -18676,7 +19634,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -18688,7 +19649,9 @@ } ], "summary": "Paginated article management list", - "tags": ["Admin - Blog Articles"] + "tags": [ + "Admin - Blog Articles" + ] }, "post": { "operationId": "AdminBlogArticlesController_create", @@ -18721,7 +19684,9 @@ } ], "summary": "Create blog article", - "tags": ["Admin - Blog Articles"] + "tags": [ + "Admin - Blog Articles" + ] } }, "/api/v1/admin/blog-articles/{id}": { @@ -18755,7 +19720,9 @@ } ], "summary": "Single article by id (draft or published)", - "tags": ["Admin - Blog Articles"] + "tags": [ + "Admin - Blog Articles" + ] }, "patch": { "operationId": "AdminBlogArticlesController_update", @@ -18797,7 +19764,9 @@ } ], "summary": "Update blog article", - "tags": ["Admin - Blog Articles"] + "tags": [ + "Admin - Blog Articles" + ] }, "delete": { "operationId": "AdminBlogArticlesController_remove", @@ -18829,7 +19798,9 @@ } ], "summary": "Soft-delete blog article", - "tags": ["Admin - Blog Articles"] + "tags": [ + "Admin - Blog Articles" + ] } }, "/health": { @@ -18850,7 +19821,9 @@ } }, "summary": "Health check", - "tags": ["Health"] + "tags": [ + "Health" + ] } }, "/health/ready": { @@ -18881,7 +19854,9 @@ } }, "summary": "Readiness check", - "tags": ["Health"] + "tags": [ + "Health" + ] } } }, @@ -19017,7 +19992,9 @@ "format": "phone" } }, - "required": ["mobile"] + "required": [ + "mobile" + ] }, "OtpRequestResponseDto": { "type": "object", @@ -19025,7 +20002,10 @@ "purpose": { "type": "string", "description": "Whether this OTP flow is for an existing or new account.", - "enum": ["login", "register"], + "enum": [ + "login", + "register" + ], "example": "login" }, "expiresIn": { @@ -19039,7 +20019,11 @@ "example": false } }, - "required": ["purpose", "expiresIn", "alreadySent"] + "required": [ + "purpose", + "expiresIn", + "alreadySent" + ] }, "ApiErrorCode": { "type": "string", @@ -19122,7 +20106,9 @@ "type": "object", "description": "Optional field-level validation errors keyed by request field name.", "example": { - "mobile": ["mobile must be a valid Iranian mobile number"] + "mobile": [ + "mobile must be a valid Iranian mobile number" + ] }, "additionalProperties": { "type": "array", @@ -19132,7 +20118,11 @@ } } }, - "required": ["success", "code", "message"] + "required": [ + "success", + "code", + "message" + ] }, "VerifyOtpDto": { "type": "object", @@ -19173,11 +20163,19 @@ "deprecated": true } }, - "required": ["mobile", "code"] + "required": [ + "mobile", + "code" + ] }, "UserStatus": { "type": "string", - "enum": ["active", "pending", "suspended", "deleted"], + "enum": [ + "active", + "pending", + "suspended", + "deleted" + ], "description": "Account status after OTP verification; pending users must complete profile." }, "AuthTokensDto": { @@ -19210,7 +20208,12 @@ ] } }, - "required": ["accessToken", "sessionId", "expiresAt", "status"] + "required": [ + "accessToken", + "sessionId", + "expiresAt", + "status" + ] }, "LoggedOutResponseDto": { "type": "object", @@ -19220,7 +20223,9 @@ "example": true } }, - "required": ["loggedOut"] + "required": [ + "loggedOut" + ] }, "SessionResponseDto": { "type": "object", @@ -19255,7 +20260,11 @@ "format": "date-time" } }, - "required": ["id", "createdAt", "expiresAt"] + "required": [ + "id", + "createdAt", + "expiresAt" + ] }, "RevokedResponseDto": { "type": "object", @@ -19265,16 +20274,30 @@ "example": true } }, - "required": ["revoked"] + "required": [ + "revoked" + ] }, "Gender": { "type": "string", - "enum": ["male", "female", "other"], + "enum": [ + "male", + "female", + "other" + ], "description": "Gender for placeholder avatars when no photo is set." }, "ContactChannel": { "type": "string", - "enum": ["instagram", "telegram", "twitter", "linkedin", "youtube", "website", "support_phone"] + "enum": [ + "instagram", + "telegram", + "twitter", + "linkedin", + "youtube", + "website", + "support_phone" + ] }, "PublicOrganizerContactLinkDto": { "type": "object", @@ -19298,7 +20321,12 @@ "description": "Raw stored value (username, URL, or phone digits)." } }, - "required": ["channel", "label", "url", "value"] + "required": [ + "channel", + "label", + "url", + "value" + ] }, "PublicOrganizerResponseDto": { "type": "object", @@ -19459,7 +20487,10 @@ }, "ListResultType": { "type": "number", - "enum": [0, 1], + "enum": [ + 0, + 1 + ], "description": "Result type requested by the client: 0 for JSON list, 1 for Excel export." }, "PaginationMetaDto": { @@ -19558,7 +20589,14 @@ "description": "True when newer messages exist beyond this page (pass `newerCursor` as `after`)." } }, - "required": ["page", "pageSize", "totalItemsCount", "totalPages", "sort", "filters"] + "required": [ + "page", + "pageSize", + "totalItemsCount", + "totalPages", + "sort", + "filters" + ] }, "OrganizerViewerStateResponseDto": { "type": "object", @@ -19574,16 +20612,27 @@ } } }, - "required": ["isFollowing", "attendeeContactLinks"] + "required": [ + "isFollowing", + "attendeeContactLinks" + ] }, "IdentityVerificationStatus": { "type": "string", - "enum": ["none", "pending", "verified", "rejected"], + "enum": [ + "none", + "pending", + "verified", + "rejected" + ], "description": "Host identity verification status; verified users may create events." }, "UserRole": { "type": "string", - "enum": ["user", "admin"], + "enum": [ + "user", + "admin" + ], "description": "User role. Admin is staff-only and manually assigned." }, "UserProfileResponseDto": { @@ -19757,7 +20806,14 @@ "format": "date-time" } }, - "required": ["id", "subject", "status", "category", "lastMessageAt", "updatedAt"] + "required": [ + "id", + "subject", + "status", + "category", + "lastMessageAt", + "updatedAt" + ] }, "ProfileSummaryEventPreviewDto": { "type": "object", @@ -19790,7 +20846,14 @@ "format": "date-time" } }, - "required": ["id", "title", "slug", "posterUrl", "squarePosterUrl", "startsAt"] + "required": [ + "id", + "title", + "slug", + "posterUrl", + "squarePosterUrl", + "startsAt" + ] }, "ProfileSummaryRegisteredPreviewDto": { "type": "object", @@ -19828,7 +20891,15 @@ "description": "Booking id" } }, - "required": ["id", "title", "slug", "posterUrl", "squarePosterUrl", "startsAt", "bookingId"] + "required": [ + "id", + "title", + "slug", + "posterUrl", + "squarePosterUrl", + "startsAt", + "bookingId" + ] }, "UserProfileSummaryResponseDto": { "type": "object", @@ -20001,7 +21072,13 @@ "minimum": 1 } }, - "required": ["firstName", "lastName", "gender", "dateOfBirth", "cityId"] + "required": [ + "firstName", + "lastName", + "gender", + "dateOfBirth", + "cityId" + ] }, "AdminUserListItemDto": { "type": "object", @@ -20128,7 +21205,11 @@ "userType": { "type": "string", "description": "Derived admin-facing user type: admin staff, verified host, or guest.", - "enum": ["guest", "host", "admin"], + "enum": [ + "guest", + "host", + "admin" + ], "example": "host" }, "walletBalance": { @@ -20172,7 +21253,9 @@ "format": "phone" } }, - "required": ["mobile"] + "required": [ + "mobile" + ] }, "AdminUpdateUserDto": { "type": "object", @@ -20230,13 +21313,19 @@ "status": { "type": "string", "description": "Suspend or reactivate the account. 'pending' and 'deleted' are not settable here — see the field-level note in this DTO.", - "enum": ["active", "suspended"], + "enum": [ + "active", + "suspended" + ], "example": "suspended" }, "hostPlan": { "type": "string", "description": "Free hosts can create 10 events; unlimited removes the quota.", - "enum": ["free", "unlimited"] + "enum": [ + "free", + "unlimited" + ] } } }, @@ -20249,7 +21338,15 @@ }, "channel": { "type": "string", - "enum": ["instagram", "telegram", "twitter", "linkedin", "youtube", "website", "support_phone"] + "enum": [ + "instagram", + "telegram", + "twitter", + "linkedin", + "youtube", + "website", + "support_phone" + ] }, "value": { "type": "string" @@ -20269,14 +21366,30 @@ "type": "string" } }, - "required": ["id", "channel", "value", "isPublic", "displayOrder", "createdAt", "updatedAt"] + "required": [ + "id", + "channel", + "value", + "isPublic", + "displayOrder", + "createdAt", + "updatedAt" + ] }, "CreateUserContactLinkDto": { "type": "object", "properties": { "channel": { "type": "string", - "enum": ["instagram", "telegram", "twitter", "linkedin", "youtube", "website", "support_phone"], + "enum": [ + "instagram", + "telegram", + "twitter", + "linkedin", + "youtube", + "website", + "support_phone" + ], "example": "instagram" }, "value": { @@ -20293,7 +21406,10 @@ "example": 0 } }, - "required": ["channel", "value"] + "required": [ + "channel", + "value" + ] }, "UpdateUserContactLinkDto": { "type": "object", @@ -20321,7 +21437,9 @@ "example": true } }, - "required": ["success"] + "required": [ + "success" + ] }, "IdentityRejectionReasonResponseDto": { "type": "object", @@ -20353,7 +21471,12 @@ "minimum": 0 } }, - "required": ["id", "code", "label", "sortOrder"] + "required": [ + "id", + "code", + "label", + "sortOrder" + ] }, "RequestHostContractOtpDto": { "type": "object", @@ -20377,7 +21500,11 @@ "description": "Must match the currently published host cooperation contract version." } }, - "required": ["nationalCode", "contractAccepted", "contractVersion"] + "required": [ + "nationalCode", + "contractAccepted", + "contractVersion" + ] }, "HostContractOtpRequestedDto": { "type": "object", @@ -20398,7 +21525,11 @@ "example": "2026-08-22" } }, - "required": ["purpose", "expiresIn", "contractVersion"] + "required": [ + "purpose", + "expiresIn", + "contractVersion" + ] }, "ConfirmHostContractOtpDto": { "type": "object", @@ -20411,11 +21542,16 @@ "maxLength": 4 } }, - "required": ["code"] + "required": [ + "code" + ] }, "IdentityVerificationSource": { "type": "string", - "enum": ["host_submission", "admin_attested"], + "enum": [ + "host_submission", + "admin_attested" + ], "description": "host_submission means the user sent KYC fields; admin_attested means staff verified the user without a host request." }, "IdentityVerificationResponseDto": { @@ -20555,7 +21691,14 @@ "format": "date-time" } }, - "required": ["id", "userId", "status", "source", "createdAt", "updatedAt"] + "required": [ + "id", + "userId", + "status", + "source", + "createdAt", + "updatedAt" + ] }, "AdminIdentityVerificationResponseDto": { "type": "object", @@ -20703,7 +21846,15 @@ } } }, - "required": ["id", "userId", "status", "source", "createdAt", "updatedAt", "user"] + "required": [ + "id", + "userId", + "status", + "source", + "createdAt", + "updatedAt", + "user" + ] }, "RejectIdentityVerificationDto": { "type": "object", @@ -20724,7 +21875,12 @@ }, "NotificationStatus": { "type": "string", - "enum": ["pending", "sent", "failed", "cancelled"], + "enum": [ + "pending", + "sent", + "failed", + "cancelled" + ], "description": "Parent notification delivery status." }, "NotificationResponseDto": { @@ -20798,7 +21954,14 @@ "format": "date-time" } }, - "required": ["id", "category", "title", "body", "status", "createdAt"] + "required": [ + "id", + "category", + "title", + "body", + "status", + "createdAt" + ] }, "NotificationUnreadCountResponseDto": { "type": "object", @@ -20809,7 +21972,9 @@ "example": 2 } }, - "required": ["totalUnread"] + "required": [ + "totalUnread" + ] }, "NotificationMarkAllReadResponseDto": { "type": "object", @@ -20823,7 +21988,10 @@ "format": "date-time" } }, - "required": ["updatedCount", "readAt"] + "required": [ + "updatedCount", + "readAt" + ] }, "PushVapidPublicKeyResponseDto": { "type": "object", @@ -20839,7 +22007,10 @@ "example": true } }, - "required": ["publicKey", "enabled"] + "required": [ + "publicKey", + "enabled" + ] }, "PushDeliveryReceiptDto": { "type": "object", @@ -20859,7 +22030,10 @@ "eventType": { "type": "string", "description": "displayed = browser showed the notification, opened = user tapped it.", - "enum": ["displayed", "opened"], + "enum": [ + "displayed", + "opened" + ], "example": "opened" }, "receiptHmac": { @@ -20868,7 +22042,12 @@ "example": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" } }, - "required": ["notificationId", "subscriptionId", "eventType", "receiptHmac"] + "required": [ + "notificationId", + "subscriptionId", + "eventType", + "receiptHmac" + ] }, "PushDeliveryReceiptResponseDto": { "type": "object", @@ -20905,7 +22084,11 @@ "nullable": true } }, - "required": ["recorded", "notificationId", "subscriptionId"] + "required": [ + "recorded", + "notificationId", + "subscriptionId" + ] }, "PushSubscribeDto": { "type": "object", @@ -20928,7 +22111,11 @@ "description": "Browser user-agent string for debugging multi-device subscriptions." } }, - "required": ["endpoint", "p256dh", "auth"] + "required": [ + "endpoint", + "p256dh", + "auth" + ] }, "PushSubscriptionResponseDto": { "type": "object", @@ -20949,7 +22136,12 @@ "type": "string" } }, - "required": ["id", "userId", "endpoint", "createdAt"] + "required": [ + "id", + "userId", + "endpoint", + "createdAt" + ] }, "DeletedResponseDto": { "type": "object", @@ -20959,7 +22151,9 @@ "example": true } }, - "required": ["deleted"] + "required": [ + "deleted" + ] }, "DeletedCountResponseDto": { "type": "object", @@ -20970,11 +22164,18 @@ "minimum": 0 } }, - "required": ["deletedCount"] + "required": [ + "deletedCount" + ] }, "SmsStatus": { "type": "string", - "enum": ["pending", "sent", "failed", "delivered"], + "enum": [ + "pending", + "sent", + "failed", + "delivered" + ], "description": "SMS delivery status." }, "SmsRecipientDto": { @@ -20993,7 +22194,10 @@ "nullable": true } }, - "required": ["firstName", "lastName"] + "required": [ + "firstName", + "lastName" + ] }, "SmsMessageResponseDto": { "type": "object", @@ -21086,7 +22290,16 @@ ] } }, - "required": ["id", "notificationId", "userId", "mobile", "messageBody", "status", "createdAt", "updatedAt"] + "required": [ + "id", + "notificationId", + "userId", + "mobile", + "messageBody", + "status", + "createdAt", + "updatedAt" + ] }, "NotificationRuleResponseDto": { "type": "object", @@ -21106,7 +22319,11 @@ }, "channel": { "type": "string", - "enum": ["in_app", "sms", "both"] + "enum": [ + "in_app", + "sms", + "both" + ] }, "titleTemplate": { "type": "string" @@ -21160,7 +22377,11 @@ }, "channel": { "type": "string", - "enum": ["in_app", "sms", "both"] + "enum": [ + "in_app", + "sms", + "both" + ] }, "titleTemplate": { "type": "string" @@ -21180,7 +22401,9 @@ "purpose": { "type": "string", "description": "OTP purpose used when confirming a bulk SMS send.", - "enum": ["admin_bulk_sms"], + "enum": [ + "admin_bulk_sms" + ], "example": "admin_bulk_sms" }, "expiresIn": { @@ -21189,11 +22412,18 @@ "example": 300 } }, - "required": ["purpose", "expiresIn"] + "required": [ + "purpose", + "expiresIn" + ] }, "NotificationChannel": { "type": "string", - "enum": ["in_app", "sms", "both"], + "enum": [ + "in_app", + "sms", + "both" + ], "description": "Delivery channel. `in_app` also dispatches Web Push when the user has an active subscription. Defaults to `in_app`." }, "AdminSendManualNotificationDto": { @@ -21229,7 +22459,9 @@ }, "userIds": { "description": "Recipient user ids. At least one of userIds or mobiles must be provided.", - "example": ["c3c921d5-4418-42ed-bf39-0f04b1d5123b"], + "example": [ + "c3c921d5-4418-42ed-bf39-0f04b1d5123b" + ], "type": "array", "items": { "type": "string" @@ -21237,7 +22469,10 @@ }, "mobiles": { "description": "Recipient mobile numbers (0912..., 98912..., or +98912...). At least one of userIds or mobiles must be provided.", - "example": ["09153641196", "989121234567"], + "example": [ + "09153641196", + "989121234567" + ], "type": "array", "items": { "type": "string" @@ -21250,7 +22485,9 @@ "maxLength": 10 } }, - "required": ["body"] + "required": [ + "body" + ] }, "AdminManualNotificationRecipientDto": { "type": "object", @@ -21285,7 +22522,11 @@ "format": "uuid" } }, - "required": ["userId", "mobile", "notificationId"] + "required": [ + "userId", + "mobile", + "notificationId" + ] }, "AdminManualNotificationResponseDto": { "type": "object", @@ -21304,7 +22545,9 @@ }, "missingUserIds": { "description": "Requested user ids that did not resolve to a user row.", - "example": ["11111111-1111-1111-1111-111111111111"], + "example": [ + "11111111-1111-1111-1111-111111111111" + ], "type": "array", "items": { "type": "string" @@ -21312,14 +22555,21 @@ }, "missingMobiles": { "description": "Requested mobile numbers that did not resolve to a user row after normalization.", - "example": ["989199999999"], + "example": [ + "989199999999" + ], "type": "array", "items": { "type": "string" } } }, - "required": ["recipientCount", "recipients", "missingUserIds", "missingMobiles"] + "required": [ + "recipientCount", + "recipients", + "missingUserIds", + "missingMobiles" + ] }, "AdminInAppRecipientDto": { "type": "object", @@ -21337,7 +22587,10 @@ "nullable": true } }, - "required": ["firstName", "lastName"] + "required": [ + "firstName", + "lastName" + ] }, "AdminInAppNotificationResponseDto": { "type": "object", @@ -21411,7 +22664,16 @@ ] } }, - "required": ["id", "userId", "mobile", "category", "title", "body", "status", "createdAt"] + "required": [ + "id", + "userId", + "mobile", + "category", + "title", + "body", + "status", + "createdAt" + ] }, "PushDeliveryRecipientDto": { "type": "object", @@ -21429,7 +22691,10 @@ "nullable": true } }, - "required": ["firstName", "lastName"] + "required": [ + "firstName", + "lastName" + ] }, "PushDeliveryResponseDto": { "type": "object", @@ -21530,7 +22795,18 @@ ] } }, - "required": ["id", "notificationId", "userId", "subscriptionId", "mobile", "category", "title", "body", "status", "createdAt"] + "required": [ + "id", + "notificationId", + "userId", + "subscriptionId", + "mobile", + "category", + "title", + "body", + "status", + "createdAt" + ] }, "EventCategoryResponseDto": { "type": "object", @@ -21651,7 +22927,10 @@ "example": "موسیقی" } }, - "required": ["id", "name"] + "required": [ + "id", + "name" + ] }, "CreateEventCategoryDto": { "type": "object", @@ -21726,7 +23005,10 @@ "nullable": true } }, - "required": ["name", "slug"] + "required": [ + "name", + "slug" + ] }, "UpdateEventCategoryDto": { "type": "object", @@ -21822,7 +23104,12 @@ "example": 51.389 } }, - "required": ["id", "name", "lat", "lng"] + "required": [ + "id", + "name", + "lat", + "lng" + ] }, "CityResponseDto": { "type": "object", @@ -21852,7 +23139,12 @@ "example": 51.389 } }, - "required": ["id", "provinceId", "name", "slug"] + "required": [ + "id", + "provinceId", + "name", + "slug" + ] }, "CityDetailResponseDto": { "type": "object", @@ -21890,11 +23182,26 @@ "example": "tehran-province" } }, - "required": ["id", "provinceId", "name", "slug", "provinceName", "provinceSlug"] + "required": [ + "id", + "provinceId", + "name", + "slug", + "provinceName", + "provinceSlug" + ] }, "EventStatus": { "type": "string", - "enum": ["draft", "pending_review", "published", "full", "rejected", "cancelled", "completed"] + "enum": [ + "draft", + "pending_review", + "published", + "full", + "rejected", + "cancelled", + "completed" + ] }, "MyEventsHostItemDto": { "type": "object", @@ -21980,7 +23287,14 @@ }, "BookingStatus": { "type": "string", - "enum": ["pending_payment", "confirmed", "cancelled", "expired", "refunded", "no_show"] + "enum": [ + "pending_payment", + "confirmed", + "cancelled", + "expired", + "refunded", + "no_show" + ] }, "MyEventsGuestItemDto": { "type": "object", @@ -22084,11 +23398,20 @@ }, "EventGenderRestriction": { "type": "string", - "enum": ["open", "female_only", "male_only"] + "enum": [ + "open", + "female_only", + "male_only" + ] }, "EventAgeRestriction": { "type": "string", - "enum": ["open", "age_15_19", "age_20_24", "age_25_plus"] + "enum": [ + "open", + "age_15_19", + "age_20_24", + "age_25_plus" + ] }, "EventSettingsDto": { "type": "object", @@ -22105,7 +23428,10 @@ }, "addressVisibility": { "type": "string", - "enum": ["public", "attendees_only"], + "enum": [ + "public", + "attendees_only" + ], "default": "public", "description": "When 'attendees_only', only the organizer/admin and guests with a confirmed booking see the exact address/lat/lng; everyone else sees generalArea instead." }, @@ -22131,7 +23457,10 @@ "properties": { "mediaType": { "type": "string", - "enum": ["image", "video"], + "enum": [ + "image", + "video" + ], "example": "image" }, "url": { @@ -22157,7 +23486,10 @@ "description": "Marks the 1:1 square card poster. Exactly one image per event." } }, - "required": ["mediaType", "url"] + "required": [ + "mediaType", + "url" + ] }, "CreateEventFaqDto": { "type": "object", @@ -22178,7 +23510,10 @@ "minimum": 0 } }, - "required": ["question", "answer"] + "required": [ + "question", + "answer" + ] }, "SubmitEventRevisionDto": { "type": "object", @@ -22295,7 +23630,9 @@ } } }, - "required": ["media"] + "required": [ + "media" + ] }, "EventRevisionResponseDto": { "type": "object", @@ -22308,7 +23645,12 @@ }, "status": { "type": "string", - "enum": ["pending", "approved", "rejected", "superseded"] + "enum": [ + "pending", + "approved", + "rejected", + "superseded" + ] }, "payload": { "type": "object", @@ -22331,7 +23673,14 @@ "type": "object" } }, - "required": ["id", "eventId", "status", "payload", "createdBy", "submittedAt"] + "required": [ + "id", + "eventId", + "status", + "payload", + "createdBy", + "submittedAt" + ] }, "CreateEventDto": { "type": "object", @@ -22475,7 +23824,10 @@ }, "addressVisibility": { "type": "string", - "enum": ["public", "attendees_only"] + "enum": [ + "public", + "attendees_only" + ] }, "generalArea": { "type": "string", @@ -22489,7 +23841,14 @@ "description": "When true, review_request after completion is sent as in-app + SMS; otherwise in-app only." } }, - "required": ["isDiscoverable", "autoCreateGroup", "addressVisibility", "generalArea", "waitlistAutoOffer", "sendReviewRequestSms"] + "required": [ + "isDiscoverable", + "autoCreateGroup", + "addressVisibility", + "generalArea", + "waitlistAutoOffer", + "sendReviewRequestSms" + ] }, "EventDiscoveryPlacementDto": { "type": "object", @@ -22502,7 +23861,10 @@ "minimum": 0 } }, - "required": ["placement", "priority"] + "required": [ + "placement", + "priority" + ] }, "EventResponseDto": { "type": "object", @@ -22838,7 +24200,15 @@ "minimum": 0 } }, - "required": ["grossAmount", "commissionAmount", "guestRefundAmount", "netAmount", "heldAmount", "availableAmount", "settledAmount"] + "required": [ + "grossAmount", + "commissionAmount", + "guestRefundAmount", + "netAmount", + "heldAmount", + "availableAmount", + "settledAmount" + ] }, "OwnerEventTrafficChannelInsightsDto": { "type": "object", @@ -22852,7 +24222,10 @@ "minimum": 0 } }, - "required": ["uniqueVisits", "confirmedBookings"] + "required": [ + "uniqueVisits", + "confirmedBookings" + ] }, "OwnerEventTrafficInsightsDto": { "type": "object", @@ -22864,7 +24237,10 @@ "$ref": "#/components/schemas/OwnerEventTrafficChannelInsightsDto" } }, - "required": ["instagram", "telegram"] + "required": [ + "instagram", + "telegram" + ] }, "OwnerEventInsightsResponseDto": { "type": "object", @@ -22883,11 +24259,19 @@ "$ref": "#/components/schemas/OwnerEventTrafficInsightsDto" } }, - "required": ["bookmarkCount", "registrations", "financial", "traffic"] + "required": [ + "bookmarkCount", + "registrations", + "financial", + "traffic" + ] }, "EventMediaType": { "type": "string", - "enum": ["image", "video"] + "enum": [ + "image", + "video" + ] }, "EventMediaResponseDto": { "type": "object", @@ -22930,7 +24314,17 @@ "type": "string" } }, - "required": ["id", "eventId", "mediaType", "url", "thumbnailUrl", "sortOrder", "isPoster", "isSquarePoster", "createdAt"] + "required": [ + "id", + "eventId", + "mediaType", + "url", + "thumbnailUrl", + "sortOrder", + "isPoster", + "isSquarePoster", + "createdAt" + ] }, "EventFaqResponseDto": { "type": "object", @@ -22961,7 +24355,15 @@ "type": "string" } }, - "required": ["id", "eventId", "question", "answer", "sortOrder", "createdAt", "updatedAt"] + "required": [ + "id", + "eventId", + "question", + "answer", + "sortOrder", + "createdAt", + "updatedAt" + ] }, "EventManagementBootstrapResponseDto": { "type": "object", @@ -22994,7 +24396,15 @@ } } }, - "required": ["event", "insights", "categoryName", "cityName", "provinceName", "media", "faqs"] + "required": [ + "event", + "insights", + "categoryName", + "cityName", + "provinceName", + "media", + "faqs" + ] }, "EventAttendeeResponseDto": { "type": "object", @@ -23045,11 +24455,24 @@ "type": "string" } }, - "required": ["bookingId", "userId", "bookingCode", "status", "createdAt"] + "required": [ + "bookingId", + "userId", + "bookingCode", + "status", + "createdAt" + ] }, "EventAttendeeFilter": { "type": "string", - "enum": ["all", "confirmed", "checked_in", "not_checked_in", "pending_payment", "cancelled"] + "enum": [ + "all", + "confirmed", + "checked_in", + "not_checked_in", + "pending_payment", + "cancelled" + ] }, "UpdateEventReservedCapacityDto": { "type": "object", @@ -23067,7 +24490,9 @@ "description": "Optional total capacity. Hosts may change capacity on live events without admin revision. Must be >= bookedCount + reservedCapacity; occupancy trigger flips published ↔ full." } }, - "required": ["reservedCapacity"] + "required": [ + "reservedCapacity" + ] }, "UpdateEventDto": { "type": "object", @@ -23182,7 +24607,9 @@ } } }, - "required": ["eventIds"] + "required": [ + "eventIds" + ] }, "BookmarkBatchStatusResponseDto": { "type": "object", @@ -23195,7 +24622,9 @@ } } }, - "required": ["bookmarkedEventIds"] + "required": [ + "bookmarkedEventIds" + ] }, "BookmarkStateResponseDto": { "type": "object", @@ -23204,7 +24633,9 @@ "type": "boolean" } }, - "required": ["isBookmarked"] + "required": [ + "isBookmarked" + ] }, "DiscoveryEventOrganizerDto": { "type": "object", @@ -23218,7 +24649,10 @@ "nullable": true } }, - "required": ["firstName", "lastName"] + "required": [ + "firstName", + "lastName" + ] }, "DiscoveryEventResponseDto": { "type": "object", @@ -23465,7 +24899,11 @@ "type": "string" } }, - "required": ["id", "name", "slug"] + "required": [ + "id", + "name", + "slug" + ] }, "EventLandingCityDto": { "type": "object", @@ -23477,7 +24915,10 @@ "type": "string" } }, - "required": ["id", "name"] + "required": [ + "id", + "name" + ] }, "EventLandingOrganizerContactLinkDto": { "type": "object", @@ -23492,7 +24933,11 @@ "type": "string" } }, - "required": ["channel", "label", "url"] + "required": [ + "channel", + "label", + "url" + ] }, "EventLandingOrganizerDto": { "type": "object", @@ -23513,7 +24958,11 @@ }, "gender": { "type": "string", - "enum": ["male", "female", "other"], + "enum": [ + "male", + "female", + "other" + ], "nullable": true }, "bio": { @@ -23565,7 +25014,11 @@ }, "ReviewStatus": { "type": "string", - "enum": ["published", "hidden", "deleted"], + "enum": [ + "published", + "hidden", + "deleted" + ], "description": "Publication status." }, "ReviewUserSummaryDto": { @@ -23596,7 +25049,12 @@ "nullable": true } }, - "required": ["id", "firstName", "lastName", "avatarUrl"] + "required": [ + "id", + "firstName", + "lastName", + "avatarUrl" + ] }, "ReviewResponseDto": { "type": "object", @@ -23681,7 +25139,18 @@ ] } }, - "required": ["id", "eventId", "userId", "bookingId", "rating", "body", "status", "createdAt", "updatedAt", "user"] + "required": [ + "id", + "eventId", + "userId", + "bookingId", + "rating", + "body", + "status", + "createdAt", + "updatedAt", + "user" + ] }, "EventLandingBootstrapResponseDto": { "type": "object", @@ -23723,7 +25192,17 @@ "type": "number" } }, - "required": ["event", "category", "city", "media", "faqs", "faqsTotal", "organizer", "reviews", "reviewsTotal"] + "required": [ + "event", + "category", + "city", + "media", + "faqs", + "faqsTotal", + "organizer", + "reviews", + "reviewsTotal" + ] }, "EventViewerBookingDto": { "type": "object", @@ -23734,10 +25213,20 @@ }, "status": { "type": "string", - "enum": ["pending_payment", "confirmed", "cancelled", "expired", "refunded", "no_show"] + "enum": [ + "pending_payment", + "confirmed", + "cancelled", + "expired", + "refunded", + "no_show" + ] } }, - "required": ["id", "status"] + "required": [ + "id", + "status" + ] }, "EventViewerWaitlistDto": { "type": "object", @@ -23748,10 +25237,20 @@ }, "status": { "type": "string", - "enum": ["waiting", "notified", "accepted", "expired", "cancelled", "converted"] + "enum": [ + "waiting", + "notified", + "accepted", + "expired", + "cancelled", + "converted" + ] } }, - "required": ["id", "status"] + "required": [ + "id", + "status" + ] }, "EventViewerLocationDto": { "type": "object", @@ -23766,7 +25265,11 @@ "type": "number" } }, - "required": ["address", "lat", "lng"] + "required": [ + "address", + "lat", + "lng" + ] }, "EventViewerStateResponseDto": { "type": "object", @@ -23817,7 +25320,11 @@ "description": "Empty when canJoinAudience is true.", "items": { "type": "string", - "enum": ["gender", "age", "city"] + "enum": [ + "gender", + "age", + "city" + ] } } }, @@ -23841,7 +25348,9 @@ "maxLength": 2000 } }, - "required": ["rejectionReason"] + "required": [ + "rejectionReason" + ] }, "AdminEventRelationSummaryDto": { "type": "object", @@ -23853,7 +25362,10 @@ "type": "string" } }, - "required": ["id", "name"] + "required": [ + "id", + "name" + ] }, "AdminEventOrganizerSummaryDto": { "type": "object", @@ -23875,7 +25387,9 @@ "nullable": true } }, - "required": ["id"] + "required": [ + "id" + ] }, "AdminEventResponseDto": { "type": "object", @@ -23917,7 +25431,18 @@ "$ref": "#/components/schemas/AdminEventOrganizerSummaryDto" } }, - "required": ["id", "title", "startsAt", "status", "isFree", "price", "category", "province", "city", "organizer"] + "required": [ + "id", + "title", + "startsAt", + "status", + "isFree", + "price", + "category", + "province", + "city", + "organizer" + ] }, "AdminCreateEventDto": { "type": "object", @@ -24317,7 +25842,9 @@ "maxLength": 2000 } }, - "required": ["rejectionReason"] + "required": [ + "rejectionReason" + ] }, "DiscoveryCategorySummaryDto": { "type": "object", @@ -24348,7 +25875,14 @@ "example": true } }, - "required": ["id", "name", "slug", "parentId", "sortOrder", "isActive"] + "required": [ + "id", + "name", + "slug", + "parentId", + "sortOrder", + "isActive" + ] }, "HomeFeedOrganizerDto": { "type": "object", @@ -24390,7 +25924,14 @@ "$ref": "#/components/schemas/HomeFeedOrganizerDto" } }, - "required": ["id", "title", "slug", "posterUrl", "squarePosterUrl", "organizer"] + "required": [ + "id", + "title", + "slug", + "posterUrl", + "squarePosterUrl", + "organizer" + ] }, "HomeCategoryPreviewEventDto": { "type": "object", @@ -24424,7 +25965,15 @@ "nullable": true } }, - "required": ["id", "title", "slug", "startsAt", "endsAt", "posterUrl", "squarePosterUrl"] + "required": [ + "id", + "title", + "slug", + "startsAt", + "endsAt", + "posterUrl", + "squarePosterUrl" + ] }, "HomeFeedCategoryPreviewGroupDto": { "type": "object", @@ -24440,7 +25989,10 @@ } } }, - "required": ["categoryId", "items"] + "required": [ + "categoryId", + "items" + ] }, "HomeCityPreviewEventDto": { "type": "object", @@ -24544,7 +26096,10 @@ } } }, - "required": ["cityId", "items"] + "required": [ + "cityId", + "items" + ] }, "HomeFeedResponseDto": { "type": "object", @@ -24568,7 +26123,11 @@ } } }, - "required": ["popular", "categoryPreviews", "cityPreviews"] + "required": [ + "popular", + "categoryPreviews", + "cityPreviews" + ] }, "DiscoveryBootstrapResponseDto": { "type": "object", @@ -24586,7 +26145,10 @@ } } }, - "required": ["categories", "cities"] + "required": [ + "categories", + "cities" + ] }, "FollowUserSummaryDto": { "type": "object", @@ -24620,7 +26182,10 @@ ] } }, - "required": ["firstName", "lastName"] + "required": [ + "firstName", + "lastName" + ] }, "FollowResponseDto": { "type": "object", @@ -24646,7 +26211,10 @@ "status": { "type": "string", "description": "Follow status.", - "enum": ["active", "muted"], + "enum": [ + "active", + "muted" + ], "example": "active" }, "notifyNewEvents": { @@ -24669,7 +26237,14 @@ ] } }, - "required": ["id", "followerId", "organizerId", "status", "notifyNewEvents", "createdAt"] + "required": [ + "id", + "followerId", + "organizerId", + "status", + "notifyNewEvents", + "createdAt" + ] }, "UpdateFollowSettingsDto": { "type": "object", @@ -24686,7 +26261,10 @@ "properties": { "mediaType": { "type": "string", - "enum": ["image", "video"] + "enum": [ + "image", + "video" + ] }, "url": { "type": "string" @@ -24739,7 +26317,11 @@ "nullable": true } }, - "required": ["userId", "firstName", "lastName"] + "required": [ + "userId", + "firstName", + "lastName" + ] }, "OrganizerGuestListResponseDto": { "type": "object", @@ -24761,7 +26343,10 @@ }, "kind": { "type": "string", - "enum": ["manual", "previous_attendees"] + "enum": [ + "manual", + "previous_attendees" + ] }, "createdAt": { "format": "date-time", @@ -24772,7 +26357,15 @@ "type": "string" } }, - "required": ["id", "organizerId", "name", "description", "kind", "createdAt", "updatedAt"] + "required": [ + "id", + "organizerId", + "name", + "description", + "kind", + "createdAt", + "updatedAt" + ] }, "CreateOrganizerGuestListDto": { "type": "object", @@ -24787,7 +26380,9 @@ "example": "مهمانان رویدادهای قبلی و مخاطبین میزبان" } }, - "required": ["name"] + "required": [ + "name" + ] }, "GuestListItemResponseDto": { "type": "object", @@ -24826,7 +26421,15 @@ "type": "string" } }, - "required": ["id", "listId", "firstName", "lastName", "userId", "note", "createdAt"] + "required": [ + "id", + "listId", + "firstName", + "lastName", + "userId", + "note", + "createdAt" + ] }, "AddGuestListItemDto": { "type": "object", @@ -24851,21 +26454,27 @@ "type": "string" } }, - "required": ["mobile"] + "required": [ + "mobile" + ] }, "SetEventInvitedGuestsDto": { "type": "object", "properties": { "userIds": { "description": "Full replacement set of platform user ids invited to this event from the host guest list. An empty array clears the invite set.", - "example": ["b3f1c2a0-1111-4111-8111-b3f1c2a01111"], + "example": [ + "b3f1c2a0-1111-4111-8111-b3f1c2a01111" + ], "type": "array", "items": { "type": "string" } } }, - "required": ["userIds"] + "required": [ + "userIds" + ] }, "InvitedGuestResponseDto": { "type": "object", @@ -24888,7 +26497,11 @@ "nullable": true } }, - "required": ["userId", "firstName", "lastName"] + "required": [ + "userId", + "firstName", + "lastName" + ] }, "GuestListNotifyResultDto": { "type": "object", @@ -24906,7 +26519,11 @@ "type": "string" } }, - "required": ["sent", "skipped", "notifiedAt"] + "required": [ + "sent", + "skipped", + "notifiedAt" + ] }, "GuestListLinkResponseDto": { "type": "object", @@ -24932,7 +26549,12 @@ "type": "string" } }, - "required": ["eventId", "listId", "notifiedAt", "createdAt"] + "required": [ + "eventId", + "listId", + "notifiedAt", + "createdAt" + ] }, "LinkGuestListToEventDto": { "type": "object", @@ -24942,7 +26564,9 @@ "description": "Guest list to attach to the event" } }, - "required": ["listId"] + "required": [ + "listId" + ] }, "CreatePaymentDto": { "type": "object", @@ -24962,11 +26586,21 @@ }, "PaymentMethod": { "type": "string", - "enum": ["gateway", "wallet", "mixed"] + "enum": [ + "gateway", + "wallet", + "mixed" + ] }, "PaymentStatus": { "type": "string", - "enum": ["pending", "processing", "succeeded", "failed", "cancelled"] + "enum": [ + "pending", + "processing", + "succeeded", + "failed", + "cancelled" + ] }, "PaymentCheckoutResponseDto": { "type": "object", @@ -24979,7 +26613,10 @@ "format": "uri" } }, - "required": ["trackingId", "paymentUrl"] + "required": [ + "trackingId", + "paymentUrl" + ] }, "CreatePaymentResponseDto": { "type": "object", @@ -25123,7 +26760,9 @@ "example": "SAVE20AB" } }, - "required": ["code"] + "required": [ + "code" + ] }, "DiscountPreviewResponseDto": { "type": "object", @@ -25134,7 +26773,10 @@ }, "type": { "type": "string", - "enum": ["percent", "fixed"] + "enum": [ + "percent", + "fixed" + ] }, "value": { "type": "number", @@ -25153,7 +26795,14 @@ "example": 80000 } }, - "required": ["code", "type", "value", "listAmount", "discountAmount", "payableAmount"] + "required": [ + "code", + "type", + "value", + "listAmount", + "discountAmount", + "payableAmount" + ] }, "PaymentResponseDto": { "type": "object", @@ -25291,7 +26940,16 @@ "type": "string" } }, - "required": ["id", "paymentId", "userId", "bookingId", "eventId", "receiptCode", "snapshot", "issuedAt"] + "required": [ + "id", + "paymentId", + "userId", + "bookingId", + "eventId", + "receiptCode", + "snapshot", + "issuedAt" + ] }, "FinancialUserSummaryDto": { "type": "object", @@ -25312,7 +26970,10 @@ "nullable": true } }, - "required": ["id", "mobile"] + "required": [ + "id", + "mobile" + ] }, "AdminPaymentResponseDto": { "type": "object", @@ -25447,7 +27108,10 @@ }, "purpose": { "type": "string", - "enum": ["top_up", "booking_checkout"] + "enum": [ + "top_up", + "booking_checkout" + ] }, "amount": { "type": "number", @@ -25465,7 +27129,13 @@ }, "status": { "type": "string", - "enum": ["pending", "processing", "succeeded", "failed", "cancelled"] + "enum": [ + "pending", + "processing", + "succeeded", + "failed", + "cancelled" + ] }, "gatewayProvider": { "type": "string", @@ -25544,11 +27214,24 @@ "type": "string" } }, - "required": ["id", "userId", "balance", "createdAt", "updatedAt"] + "required": [ + "id", + "userId", + "balance", + "createdAt", + "updatedAt" + ] }, "WalletTransactionType": { "type": "string", - "enum": ["booking_payment", "refund_guest_cancel", "refund_event_cancel", "organizer_earning", "withdrawal", "deposit"] + "enum": [ + "booking_payment", + "refund_guest_cancel", + "refund_event_cancel", + "organizer_earning", + "withdrawal", + "deposit" + ] }, "WalletTransactionResponseDto": { "type": "object", @@ -25601,7 +27284,16 @@ "type": "string" } }, - "required": ["id", "walletId", "userId", "transactionCode", "type", "amount", "balanceAfter", "createdAt"] + "required": [ + "id", + "walletId", + "userId", + "transactionCode", + "type", + "amount", + "balanceAfter", + "createdAt" + ] }, "CreateWalletDepositDto": { "type": "object", @@ -25612,7 +27304,9 @@ "minimum": 10000 } }, - "required": ["amount"] + "required": [ + "amount" + ] }, "CreateWalletDepositResponseDto": { "type": "object", @@ -25634,7 +27328,10 @@ }, "purpose": { "type": "string", - "enum": ["top_up", "booking_checkout"] + "enum": [ + "top_up", + "booking_checkout" + ] }, "amount": { "type": "number", @@ -25652,7 +27349,13 @@ }, "status": { "type": "string", - "enum": ["pending", "processing", "succeeded", "failed", "cancelled"] + "enum": [ + "pending", + "processing", + "succeeded", + "failed", + "cancelled" + ] }, "gatewayProvider": { "type": "string", @@ -25738,7 +27441,10 @@ }, "purpose": { "type": "string", - "enum": ["top_up", "booking_checkout"] + "enum": [ + "top_up", + "booking_checkout" + ] }, "amount": { "type": "number", @@ -25756,7 +27462,13 @@ }, "status": { "type": "string", - "enum": ["pending", "processing", "succeeded", "failed", "cancelled"] + "enum": [ + "pending", + "processing", + "succeeded", + "failed", + "cancelled" + ] }, "gatewayProvider": { "type": "string", @@ -25812,7 +27524,10 @@ "properties": { "status": { "type": "string", - "enum": ["succeeded", "failed"] + "enum": [ + "succeeded", + "failed" + ] }, "signature": { "type": "string" @@ -25837,7 +27552,12 @@ "type": "string" } }, - "required": ["status", "signature", "timestamp", "nonce"] + "required": [ + "status", + "signature", + "timestamp", + "nonce" + ] }, "CreateBankAccountDto": { "type": "object", @@ -25852,15 +27572,24 @@ "example": "0012345678" } }, - "required": ["iban"] + "required": [ + "iban" + ] }, "BankAccountOwnerType": { "type": "string", - "enum": ["guest", "organizer"] + "enum": [ + "guest", + "organizer" + ] }, "BankAccountVerificationStatus": { "type": "string", - "enum": ["pending_review", "approved", "rejected"] + "enum": [ + "pending_review", + "approved", + "rejected" + ] }, "BankAccountResponseDto": { "type": "object", @@ -25957,7 +27686,9 @@ "minLength": 3 } }, - "required": ["reason"] + "required": [ + "reason" + ] }, "CreateWithdrawalRequestDto": { "type": "object", @@ -25971,11 +27702,19 @@ "description": "Amount in Toman" } }, - "required": ["bankAccountId", "amount"] + "required": [ + "bankAccountId", + "amount" + ] }, "WithdrawalStatus": { "type": "string", - "enum": ["pending", "processing", "completed", "rejected"] + "enum": [ + "pending", + "processing", + "completed", + "rejected" + ] }, "WithdrawalUserSummaryDto": { "type": "object", @@ -25992,7 +27731,9 @@ "nullable": true } }, - "required": ["mobile"] + "required": [ + "mobile" + ] }, "WithdrawalBankAccountSummaryDto": { "type": "object", @@ -26001,7 +27742,9 @@ "type": "string" } }, - "required": ["iban"] + "required": [ + "iban" + ] }, "WithdrawalResponseDto": { "type": "object", @@ -26109,7 +27852,10 @@ "description": "Optional admin note shown to the recipient" } }, - "required": ["trackingCode", "receiptUrl"] + "required": [ + "trackingCode", + "receiptUrl" + ] }, "RejectWithdrawalRequestDto": { "type": "object", @@ -26118,11 +27864,18 @@ "type": "string" } }, - "required": ["reason"] + "required": [ + "reason" + ] }, "OrganizerEarningStatus": { "type": "string", - "enum": ["held", "available", "settled", "cancelled"] + "enum": [ + "held", + "available", + "settled", + "cancelled" + ] }, "OrganizerEarningResponseDto": { "type": "object", @@ -26206,7 +27959,12 @@ }, "SettlementBatchStatus": { "type": "string", - "enum": ["pending", "processing", "completed", "failed"] + "enum": [ + "pending", + "processing", + "completed", + "failed" + ] }, "SettlementItemResponseDto": { "type": "object", @@ -26230,7 +27988,13 @@ "type": "string" } }, - "required": ["id", "amount", "organizerEarningId", "eventId", "eventTitle"] + "required": [ + "id", + "amount", + "organizerEarningId", + "eventId", + "eventTitle" + ] }, "SettlementResponseDto": { "type": "object", @@ -26336,7 +28100,12 @@ "example": "2026-07-07" } }, - "required": ["organizerId", "bankAccountId", "periodStart", "periodEnd"] + "required": [ + "organizerId", + "bankAccountId", + "periodStart", + "periodEnd" + ] }, "FailSettlementDto": { "type": "object", @@ -26345,14 +28114,19 @@ "type": "string" } }, - "required": ["reason"] + "required": [ + "reason" + ] }, "CreateDiscountCodesDto": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["percent", "fixed"], + "enum": [ + "percent", + "fixed" + ], "example": "percent" }, "value": { @@ -26392,12 +28166,19 @@ }, "bearer": { "type": "string", - "enum": ["organizer", "platform"], + "enum": [ + "organizer", + "platform" + ], "description": "Who absorbs the discount. Admin-only; host requests are always forced to \"organizer\".", "example": "organizer" } }, - "required": ["type", "value", "quantity"] + "required": [ + "type", + "value", + "quantity" + ] }, "DiscountCodeResponseDto": { "type": "object", @@ -26416,7 +28197,10 @@ }, "type": { "type": "string", - "enum": ["percent", "fixed"] + "enum": [ + "percent", + "fixed" + ] }, "value": { "type": "number", @@ -26424,7 +28208,10 @@ }, "bearer": { "type": "string", - "enum": ["organizer", "platform"] + "enum": [ + "organizer", + "platform" + ] }, "maxUses": { "type": "number", @@ -26495,7 +28282,10 @@ }, "codes": { "description": "The generated codes, ready to share", - "example": ["SAVE20AB", "SAVE20CD"], + "example": [ + "SAVE20AB", + "SAVE20CD" + ], "type": "array", "items": { "type": "string" @@ -26508,7 +28298,12 @@ } } }, - "required": ["batchId", "count", "codes", "items"] + "required": [ + "batchId", + "count", + "codes", + "items" + ] }, "DiscountCodePageDto": { "type": "object", @@ -26520,7 +28315,9 @@ } } }, - "required": ["items"] + "required": [ + "items" + ] }, "DiscountReportSummaryDto": { "type": "object", @@ -26549,7 +28346,13 @@ "example": 70000 } }, - "required": ["totalCodes", "totalRedemptions", "totalDiscountAmount", "totalPlatformAbsorbed", "totalOrganizerAbsorbed"] + "required": [ + "totalCodes", + "totalRedemptions", + "totalDiscountAmount", + "totalPlatformAbsorbed", + "totalOrganizerAbsorbed" + ] }, "DiscountRedemptionResponseDto": { "type": "object", @@ -26600,7 +28403,10 @@ }, "bearer": { "type": "string", - "enum": ["organizer", "platform"] + "enum": [ + "organizer", + "platform" + ] }, "platformAbsorbedAmount": { "type": "number", @@ -26641,7 +28447,9 @@ } } }, - "required": ["items"] + "required": [ + "items" + ] }, "DiscountManagementBootstrapResponseDto": { "type": "object", @@ -26656,7 +28464,11 @@ "$ref": "#/components/schemas/DiscountRedemptionPageDto" } }, - "required": ["codes", "report", "redemptions"] + "required": [ + "codes", + "report", + "redemptions" + ] }, "UpdateDiscountCodeDto": { "type": "object", @@ -26667,11 +28479,16 @@ "example": false } }, - "required": ["isActive"] + "required": [ + "isActive" + ] }, "TrafficSource": { "type": "string", - "enum": ["instagram", "telegram"], + "enum": [ + "instagram", + "telegram" + ], "description": "First-touch attribution from a tagged share link. Ignored if invalid." }, "CreateBookingDto": { @@ -26834,7 +28651,9 @@ "description": "Cancellation reason — mandatory (booking-cancellation-refund.md: required from the product’s point of view, previously only optional in this DTO)." } }, - "required": ["cancellationReason"] + "required": [ + "cancellationReason" + ] }, "JoinWaitlistDto": { "type": "object", @@ -26851,7 +28670,14 @@ }, "WaitlistStatus": { "type": "string", - "enum": ["waiting", "notified", "accepted", "expired", "cancelled", "converted"] + "enum": [ + "waiting", + "notified", + "accepted", + "expired", + "cancelled", + "converted" + ] }, "WaitlistResponseDto": { "type": "object", @@ -26899,7 +28725,14 @@ "type": "string" } }, - "required": ["id", "eventId", "userId", "status", "createdAt", "updatedAt"] + "required": [ + "id", + "eventId", + "userId", + "status", + "createdAt", + "updatedAt" + ] }, "WaitlistAcceptedBookingDto": { "type": "object", @@ -26964,7 +28797,16 @@ "type": "string" } }, - "required": ["id", "eventId", "userId", "bookingCode", "status", "cancellationReason", "createdAt", "updatedAt"] + "required": [ + "id", + "eventId", + "userId", + "bookingCode", + "status", + "cancellationReason", + "createdAt", + "updatedAt" + ] }, "WaitlistAcceptResponseDto": { "type": "object", @@ -26977,7 +28819,10 @@ "$ref": "#/components/schemas/WaitlistAcceptedBookingDto" } }, - "required": ["waitlistEntryId", "booking"] + "required": [ + "waitlistEntryId", + "booking" + ] }, "AdminBookingEventDto": { "type": "object", @@ -27005,7 +28850,13 @@ "format": "uuid" } }, - "required": ["id", "title", "startsAt", "status", "organizerId"] + "required": [ + "id", + "title", + "startsAt", + "status", + "organizerId" + ] }, "AdminBookingUserDto": { "type": "object", @@ -27026,7 +28877,10 @@ "nullable": true } }, - "required": ["id", "mobile"] + "required": [ + "id", + "mobile" + ] }, "AdminBookingResponseDto": { "type": "object", @@ -27305,7 +29159,10 @@ "maxLength": 5000 } }, - "required": ["bookingId", "rating"] + "required": [ + "bookingId", + "rating" + ] }, "UpdateReviewDto": { "type": "object", @@ -27353,7 +29210,10 @@ "example": "Tehran hiking meetup" } }, - "required": ["id", "title"] + "required": [ + "id", + "title" + ] }, "AdminReviewResponseDto": { "type": "object", @@ -27446,7 +29306,19 @@ ] } }, - "required": ["id", "eventId", "userId", "bookingId", "rating", "body", "status", "createdAt", "updatedAt", "user", "event"] + "required": [ + "id", + "eventId", + "userId", + "bookingId", + "rating", + "body", + "status", + "createdAt", + "updatedAt", + "user", + "event" + ] }, "UnreadCountResponseDto": { "type": "object", @@ -27457,11 +29329,16 @@ "example": 3 } }, - "required": ["totalUnread"] + "required": [ + "totalUnread" + ] }, "ConversationType": { "type": "string", - "enum": ["event_group", "direct"], + "enum": [ + "event_group", + "direct" + ], "description": "Conversation type." }, "ConversationResponseDto": { @@ -27556,7 +29433,14 @@ "format": "date-time" } }, - "required": ["id", "type", "unreadCount", "memberCount", "messagingBlocked", "createdAt"] + "required": [ + "id", + "type", + "unreadCount", + "memberCount", + "messagingBlocked", + "createdAt" + ] }, "SendMessageDto": { "type": "object", @@ -27615,7 +29499,13 @@ "description": "True when the parent cannot be jumped to (soft-deleted, missing, or wrong conversation)." } }, - "required": ["id", "senderId", "senderDisplayName", "hasImage", "isUnavailable"] + "required": [ + "id", + "senderId", + "senderDisplayName", + "hasImage", + "isUnavailable" + ] }, "MessageResponseDto": { "type": "object", @@ -27697,7 +29587,12 @@ "format": "date-time" } }, - "required": ["id", "conversationId", "senderId", "createdAt"] + "required": [ + "id", + "conversationId", + "senderId", + "createdAt" + ] }, "ConversationParticipantResponseDto": { "type": "object", @@ -27744,7 +29639,10 @@ "format": "date-time" } }, - "required": ["userId", "joinedAt"] + "required": [ + "userId", + "joinedAt" + ] }, "MarkConversationReadDto": { "type": "object", @@ -27755,7 +29653,9 @@ "format": "uuid" } }, - "required": ["lastSeenMessageId"] + "required": [ + "lastSeenMessageId" + ] }, "AdminChatUserDto": { "type": "object", @@ -27803,7 +29703,12 @@ "format": "date-time" } }, - "required": ["userId", "mobile", "status", "joinedAt"] + "required": [ + "userId", + "mobile", + "status", + "joinedAt" + ] }, "AdminConversationResponseDto": { "type": "object", @@ -27857,7 +29762,13 @@ "format": "date-time" } }, - "required": ["id", "type", "participantPreview", "memberCount", "createdAt"] + "required": [ + "id", + "type", + "participantPreview", + "memberCount", + "createdAt" + ] }, "AdminMessageResponseDto": { "type": "object", @@ -27923,7 +29834,13 @@ "format": "date-time" } }, - "required": ["id", "conversationId", "senderId", "senderMobile", "createdAt"] + "required": [ + "id", + "conversationId", + "senderId", + "senderMobile", + "createdAt" + ] }, "CreateContactMessageDto": { "type": "object", @@ -27962,7 +29879,13 @@ "maxLength": 4096 } }, - "required": ["fullName", "mobile", "subject", "message", "arcaptchaToken"] + "required": [ + "fullName", + "mobile", + "subject", + "message", + "arcaptchaToken" + ] }, "ContactMessageResponseDto": { "type": "object", @@ -28014,14 +29937,24 @@ "format": "date-time" } }, - "required": ["id", "fullName", "mobile", "subject", "message", "createdAt"] + "required": [ + "id", + "fullName", + "mobile", + "subject", + "message", + "createdAt" + ] }, "CreateTrafficVisitDto": { "type": "object", "properties": { "pageKind": { "type": "string", - "enum": ["home", "event"] + "enum": [ + "home", + "event" + ] }, "eventId": { "type": "string", @@ -28041,7 +29974,11 @@ "description": "Durable anonymous visitor id from the browser localStorage." } }, - "required": ["pageKind", "source", "visitorKey"] + "required": [ + "pageKind", + "source", + "visitorKey" + ] }, "CreateUserBlockDto": { "type": "object", @@ -28053,7 +29990,9 @@ "format": "uuid" } }, - "required": ["blockedId"] + "required": [ + "blockedId" + ] }, "UserBlockUserSummaryDto": { "type": "object", @@ -28071,7 +30010,10 @@ "nullable": true } }, - "required": ["firstName", "lastName"] + "required": [ + "firstName", + "lastName" + ] }, "UserBlockResponseDto": { "type": "object", @@ -28109,7 +30051,13 @@ ] } }, - "required": ["id", "blockerId", "blockedId", "createdAt", "blockedUser"] + "required": [ + "id", + "blockerId", + "blockedId", + "createdAt", + "blockedUser" + ] }, "ReportReasonResponseDto": { "type": "object", @@ -28141,7 +30089,12 @@ "minimum": 0 } }, - "required": ["id", "code", "label", "sortOrder"] + "required": [ + "id", + "code", + "label", + "sortOrder" + ] }, "CreateUserReportDto": { "type": "object", @@ -28171,11 +30124,17 @@ "format": "uuid" } }, - "required": ["reportedId"] + "required": [ + "reportedId" + ] }, "ReportStatus": { "type": "string", - "enum": ["pending", "reviewed", "dismissed"], + "enum": [ + "pending", + "reviewed", + "dismissed" + ], "description": "Report review status." }, "UserReportResponseDto": { @@ -28268,7 +30227,13 @@ "format": "date-time" } }, - "required": ["id", "reporterId", "reportedId", "status", "createdAt"] + "required": [ + "id", + "reporterId", + "reportedId", + "status", + "createdAt" + ] }, "UserReportUserSummaryDto": { "type": "object", @@ -28291,7 +30256,11 @@ "nullable": true } }, - "required": ["mobile", "firstName", "lastName"] + "required": [ + "mobile", + "firstName", + "lastName" + ] }, "AdminUserReportResponseDto": { "type": "object", @@ -28407,7 +30376,15 @@ ] } }, - "required": ["id", "reporterId", "reportedId", "status", "createdAt", "reporter", "reported"] + "required": [ + "id", + "reporterId", + "reportedId", + "status", + "createdAt", + "reporter", + "reported" + ] }, "AdminUserReportBlockResponseDto": { "type": "object", @@ -28429,7 +30406,10 @@ ] } }, - "required": ["report", "block"] + "required": [ + "report", + "block" + ] }, "CreateSupportTicketDto": { "type": "object", @@ -28440,12 +30420,24 @@ }, "category": { "type": "string", - "enum": ["general", "account", "event", "booking", "payment", "technical"], + "enum": [ + "general", + "account", + "event", + "booking", + "payment", + "technical" + ], "example": "payment" }, "priority": { "type": "string", - "enum": ["low", "normal", "high", "urgent"], + "enum": [ + "low", + "normal", + "high", + "urgent" + ], "example": "normal" }, "message": { @@ -28453,7 +30445,12 @@ "example": "پرداخت انجام شد اما رزرو ثبت نشده است." } }, - "required": ["subject", "category", "priority", "message"] + "required": [ + "subject", + "category", + "priority", + "message" + ] }, "SupportTicketUserResponseDto": { "type": "object", @@ -28468,7 +30465,9 @@ "example": "علی رضایی" } }, - "required": ["mobile"] + "required": [ + "mobile" + ] }, "SupportTicketMessageResponseDto": { "type": "object", @@ -28492,7 +30491,13 @@ "format": "date-time" } }, - "required": ["id", "senderId", "body", "isAdmin", "createdAt"] + "required": [ + "id", + "senderId", + "body", + "isAdmin", + "createdAt" + ] }, "SupportTicketResponseDto": { "type": "object", @@ -28510,15 +30515,32 @@ }, "category": { "type": "string", - "enum": ["general", "account", "event", "booking", "payment", "technical"] + "enum": [ + "general", + "account", + "event", + "booking", + "payment", + "technical" + ] }, "priority": { "type": "string", - "enum": ["low", "normal", "high", "urgent"] + "enum": [ + "low", + "normal", + "high", + "urgent" + ] }, "status": { "type": "string", - "enum": ["open", "waiting_admin", "waiting_user", "closed"] + "enum": [ + "open", + "waiting_admin", + "waiting_user", + "closed" + ] }, "lastMessageAt": { "type": "string", @@ -28531,7 +30553,10 @@ }, "closedBy": { "type": "string", - "enum": ["user", "admin"], + "enum": [ + "user", + "admin" + ], "nullable": true, "description": "Who closed the ticket. Consumers cannot reopen admin-closed tickets." }, @@ -28549,7 +30574,18 @@ } } }, - "required": ["id", "userId", "subject", "category", "priority", "status", "lastMessageAt", "createdAt", "user", "messages"] + "required": [ + "id", + "userId", + "subject", + "category", + "priority", + "status", + "lastMessageAt", + "createdAt", + "user", + "messages" + ] }, "SupportTicketSummaryResponseDto": { "type": "object", @@ -28567,15 +30603,32 @@ }, "category": { "type": "string", - "enum": ["general", "account", "event", "booking", "payment", "technical"] + "enum": [ + "general", + "account", + "event", + "booking", + "payment", + "technical" + ] }, "priority": { "type": "string", - "enum": ["low", "normal", "high", "urgent"] + "enum": [ + "low", + "normal", + "high", + "urgent" + ] }, "status": { "type": "string", - "enum": ["open", "waiting_admin", "waiting_user", "closed"] + "enum": [ + "open", + "waiting_admin", + "waiting_user", + "closed" + ] }, "lastMessageAt": { "type": "string", @@ -28588,7 +30641,10 @@ }, "closedBy": { "type": "string", - "enum": ["user", "admin"], + "enum": [ + "user", + "admin" + ], "nullable": true, "description": "Who closed the ticket. Consumers cannot reopen admin-closed tickets." }, @@ -28610,7 +30666,17 @@ ] } }, - "required": ["id", "userId", "subject", "category", "priority", "status", "lastMessageAt", "createdAt", "user"] + "required": [ + "id", + "userId", + "subject", + "category", + "priority", + "status", + "lastMessageAt", + "createdAt", + "user" + ] }, "ReplySupportTicketDto": { "type": "object", @@ -28620,17 +30686,26 @@ "example": "درخواست شما در حال بررسی است." } }, - "required": ["message"] + "required": [ + "message" + ] }, "UpdateSupportTicketStatusDto": { "type": "object", "properties": { "status": { "type": "string", - "enum": ["open", "waiting_admin", "waiting_user", "closed"] + "enum": [ + "open", + "waiting_admin", + "waiting_user", + "closed" + ] } }, - "required": ["status"] + "required": [ + "status" + ] }, "UserCountsDto": { "type": "object", @@ -28652,7 +30727,12 @@ "example": 12 } }, - "required": ["total", "active", "pending", "suspended"] + "required": [ + "total", + "active", + "pending", + "suspended" + ] }, "EventStatusCountsDto": { "type": "object", @@ -28686,7 +30766,15 @@ "example": 210 } }, - "required": ["draft", "pending_review", "published", "full", "rejected", "cancelled", "completed"] + "required": [ + "draft", + "pending_review", + "published", + "full", + "rejected", + "cancelled", + "completed" + ] }, "EventCountsDto": { "type": "object", @@ -28709,7 +30797,12 @@ "$ref": "#/components/schemas/EventStatusCountsDto" } }, - "required": ["total", "active", "totalHeld", "byStatus"] + "required": [ + "total", + "active", + "totalHeld", + "byStatus" + ] }, "BookingStatusCountsDto": { "type": "object", @@ -28739,7 +30832,14 @@ "example": 25 } }, - "required": ["pending_payment", "confirmed", "cancelled", "expired", "refunded", "no_show"] + "required": [ + "pending_payment", + "confirmed", + "cancelled", + "expired", + "refunded", + "no_show" + ] }, "BookingCountsDto": { "type": "object", @@ -28752,7 +30852,10 @@ "$ref": "#/components/schemas/BookingStatusCountsDto" } }, - "required": ["total", "byStatus"] + "required": [ + "total", + "byStatus" + ] }, "IdentityVerificationCountsDto": { "type": "object", @@ -28774,7 +30877,12 @@ "example": 29 } }, - "required": ["none", "pending", "verified", "rejected"] + "required": [ + "none", + "pending", + "verified", + "rejected" + ] }, "FinancialTotalsDto": { "type": "object", @@ -28790,7 +30898,10 @@ "description": "Sum of wallets.balance across all wallets (Toman, as a string)." } }, - "required": ["totalCommissionCollected", "totalWalletBalance"] + "required": [ + "totalCommissionCollected", + "totalWalletBalance" + ] }, "AdminReportsOverviewDto": { "type": "object", @@ -28811,7 +30922,13 @@ "$ref": "#/components/schemas/FinancialTotalsDto" } }, - "required": ["users", "events", "bookings", "identityVerifications", "financial"] + "required": [ + "users", + "events", + "bookings", + "identityVerifications", + "financial" + ] }, "AdminUserContactLinkDto": { "type": "object", @@ -28844,11 +30961,22 @@ "type": "number" } }, - "required": ["id", "channel", "label", "value", "url", "isPublic", "displayOrder"] + "required": [ + "id", + "channel", + "label", + "value", + "url", + "isPublic", + "displayOrder" + ] }, "HostPlan": { "type": "string", - "enum": ["free", "unlimited"] + "enum": [ + "free", + "unlimited" + ] }, "AdminUserSummaryCountsDto": { "type": "object", @@ -28982,7 +31110,12 @@ }, "identityStatus": { "type": "string", - "enum": ["none", "pending", "verified", "rejected"] + "enum": [ + "none", + "pending", + "verified", + "rejected" + ] }, "identityVerifiedAt": { "type": "string", @@ -29056,7 +31189,9 @@ "description": "Optional admin note (Toman credit reason)" } }, - "required": ["amount"] + "required": [ + "amount" + ] }, "AdminCreditWalletResponseDto": { "type": "object", @@ -29069,7 +31204,10 @@ "$ref": "#/components/schemas/WalletTransactionResponseDto" } }, - "required": ["walletBalance", "transaction"] + "required": [ + "walletBalance", + "transaction" + ] }, "AdminUserHostedEventDto": { "type": "object", @@ -29113,7 +31251,18 @@ "type": "string" } }, - "required": ["id", "title", "status", "startsAt", "endsAt", "capacity", "bookedCount", "isFree", "price", "createdAt"] + "required": [ + "id", + "title", + "status", + "startsAt", + "endsAt", + "capacity", + "bookedCount", + "isFree", + "price", + "createdAt" + ] }, "AdminUserBookingDto": { "type": "object", @@ -29159,7 +31308,14 @@ "type": "string" } }, - "required": ["id", "bookingCode", "status", "eventId", "eventTitle", "createdAt"] + "required": [ + "id", + "bookingCode", + "status", + "eventId", + "eventTitle", + "createdAt" + ] }, "AdminUserPaymentDto": { "type": "object", @@ -29276,7 +31432,15 @@ "type": "string" } }, - "required": ["id", "rating", "status", "eventId", "eventTitle", "authorId", "createdAt"] + "required": [ + "id", + "rating", + "status", + "eventId", + "eventTitle", + "authorId", + "createdAt" + ] }, "AdminUserFollowDto": { "type": "object", @@ -29304,7 +31468,13 @@ "type": "string" } }, - "required": ["id", "userId", "mobile", "notifyNewEvents", "createdAt"] + "required": [ + "id", + "userId", + "mobile", + "notifyNewEvents", + "createdAt" + ] }, "AdminUserReportDto": { "type": "object", @@ -29344,7 +31514,13 @@ "type": "string" } }, - "required": ["id", "status", "otherUserId", "otherUserMobile", "createdAt"] + "required": [ + "id", + "status", + "otherUserId", + "otherUserMobile", + "createdAt" + ] }, "AdminUserBlockDto": { "type": "object", @@ -29369,7 +31545,12 @@ "type": "string" } }, - "required": ["id", "otherUserId", "otherUserMobile", "createdAt"] + "required": [ + "id", + "otherUserId", + "otherUserMobile", + "createdAt" + ] }, "AdminAuditLogResponseDto": { "type": "object", @@ -29425,7 +31606,14 @@ "format": "date-time" } }, - "required": ["id", "method", "path", "params", "statusCode", "createdAt"] + "required": [ + "id", + "method", + "path", + "params", + "statusCode", + "createdAt" + ] }, "UploadFileResponseDto": { "type": "object", @@ -29441,7 +31629,10 @@ "example": "http://localhost:3000/uploads/files/550e8400-e29b-41d4-a716-446655440000.jpg" } }, - "required": ["id", "url"] + "required": [ + "id", + "url" + ] }, "BlogArticleCitySummaryDto": { "type": "object", @@ -29459,7 +31650,11 @@ "example": "اهواز" } }, - "required": ["id", "slug", "name"] + "required": [ + "id", + "slug", + "name" + ] }, "BlogArticleEventCategorySummaryDto": { "type": "object", @@ -29477,7 +31672,11 @@ "example": "عکاسی" } }, - "required": ["id", "slug", "name"] + "required": [ + "id", + "slug", + "name" + ] }, "BlogArticleSummaryResponseDto": { "type": "object", @@ -29707,7 +31906,12 @@ }, "categorySlug": { "type": "string", - "enum": ["attendee-guide", "hosting", "city-guides", "event-selection"], + "enum": [ + "attendee-guide", + "hosting", + "city-guides", + "event-selection" + ], "example": "city-guides" }, "categoryName": { @@ -29745,7 +31949,14 @@ "format": "date-time" } }, - "required": ["slug", "title", "excerpt", "categorySlug", "categoryName", "bodyHtml"] + "required": [ + "slug", + "title", + "excerpt", + "categorySlug", + "categoryName", + "bodyHtml" + ] }, "UpdateBlogArticleDto": { "type": "object", @@ -29774,7 +31985,12 @@ }, "categorySlug": { "type": "string", - "enum": ["attendee-guide", "hosting", "city-guides", "event-selection"], + "enum": [ + "attendee-guide", + "hosting", + "city-guides", + "event-selection" + ], "example": "city-guides" }, "categoryName": { @@ -29822,7 +32038,9 @@ "example": "ok" } }, - "required": ["status"] + "required": [ + "status" + ] } } }