diff --git a/contracts/admin-openapi.json b/contracts/admin-openapi.json index 1673ecc..5b0ff2b 100644 --- a/contracts/admin-openapi.json +++ b/contracts/admin-openapi.json @@ -1,3010 +1,3432 @@ { - "openapi": "3.1.0", - "info": { - "title": "HYApp Admin API", - "version": "0.1.0" + "openapi": "3.1.0", + "info": { + "title": "HYApp Admin API", + "version": "0.1.0" + }, + "servers": [ + { + "url": "/api/v1" + } + ], + "paths": { + "/admin/activity/daily-tasks": { + "get": { + "operationId": "listTaskDefinitions", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "daily-task:view", + "x-permissions": [ + "daily-task:view" + ] + }, + "post": { + "operationId": "createTaskDefinition", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "daily-task:create", + "x-permissions": [ + "daily-task:create" + ] + } }, - "servers": [ - { - "url": "/api/v1" - } - ], - "paths": { - "/admin/agencies": { - "get": { - "operationId": "listAgencies", - "parameters": [ - { - "$ref": "#/components/parameters/Page" - }, - { - "$ref": "#/components/parameters/PageSize" - }, - { - "$ref": "#/components/parameters/Keyword" - }, - { - "$ref": "#/components/parameters/Status" - }, - { - "$ref": "#/components/parameters/RegionId" - }, - { - "$ref": "#/components/parameters/ParentBdUserId" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/AgencyPageResponse" - } - }, - "x-permission": "agency:view", - "x-permissions": ["agency:view"] - }, - "post": { - "operationId": "createAgency", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "agency:create", - "x-permissions": ["agency:create"] - } - }, - "/admin/agencies/{agency_id}/close": { - "post": { - "operationId": "closeAgency", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "agency_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "agency:status", - "x-permissions": ["agency:status"] - } - }, - "/admin/agencies/{agency_id}/join-enabled": { - "post": { - "operationId": "setAgencyJoinEnabled", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "agency_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "agency:status", - "x-permissions": ["agency:status"] - } - }, - "/admin/app-config/banners": { - "get": { - "operationId": "listBanners", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "app-config:view", - "x-permissions": ["app-config:view"] - }, - "post": { - "operationId": "createBanner", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "app-config:update", - "x-permissions": ["app-config:update"] - } - }, - "/admin/app-config/banners/{banner_id}": { - "put": { - "operationId": "updateBanner", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "banner_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "app-config:update", - "x-permissions": ["app-config:update"] - }, - "delete": { - "operationId": "deleteBanner", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "banner_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "app-config:update", - "x-permissions": ["app-config:update"] - } - }, - "/admin/app-config/h5-links": { - "get": { - "operationId": "listH5Links", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "app-config:view", - "x-permissions": ["app-config:view"] - }, - "put": { - "operationId": "updateH5Links", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "app-config:update", - "x-permissions": ["app-config:update"] - } - }, - "/admin/apps": { - "get": { - "operationId": "listApps", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - } - } - }, - "/admin/bd-leaders": { - "get": { - "operationId": "listBDLeaders", - "parameters": [ - { - "$ref": "#/components/parameters/Page" - }, - { - "$ref": "#/components/parameters/PageSize" - }, - { - "$ref": "#/components/parameters/Keyword" - }, - { - "$ref": "#/components/parameters/Status" - }, - { - "$ref": "#/components/parameters/RegionId" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/BDProfilePageResponse" - } - }, - "x-permission": "bd:view", - "x-permissions": ["bd:view"] - }, - "post": { - "operationId": "createBDLeader", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "bd:create", - "x-permissions": ["bd:create"] - } - }, - "/admin/bd-leaders/{user_id}/status": { - "patch": { - "operationId": "setBDLeaderStatus", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "user_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "bd:update", - "x-permissions": ["bd:update"] - } - }, - "/admin/bds": { - "get": { - "operationId": "listBDs", - "parameters": [ - { - "$ref": "#/components/parameters/Page" - }, - { - "$ref": "#/components/parameters/PageSize" - }, - { - "$ref": "#/components/parameters/Keyword" - }, - { - "$ref": "#/components/parameters/Status" - }, - { - "$ref": "#/components/parameters/RegionId" - }, - { - "$ref": "#/components/parameters/ParentLeaderUserId" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/BDProfilePageResponse" - } - }, - "x-permission": "bd:view", - "x-permissions": ["bd:view"] - }, - "post": { - "operationId": "createBD", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "bd:create", - "x-permissions": ["bd:create"] - } - }, - "/admin/bds/{user_id}/status": { - "patch": { - "operationId": "setBDStatus", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "user_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "bd:update", - "x-permissions": ["bd:update"] - } - }, - "/admin/coin-sellers": { - "get": { - "operationId": "listCoinSellers", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "coin-seller:view", - "x-permissions": ["coin-seller:view"] - }, - "post": { - "operationId": "createCoinSeller", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "coin-seller:create", - "x-permissions": ["coin-seller:create"] - } - }, - "/admin/coin-sellers/{user_id}/status": { - "patch": { - "operationId": "setCoinSellerStatus", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "user_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "coin-seller:update", - "x-permissions": ["coin-seller:update"] - } - }, - "/admin/coin-sellers/{user_id}/stock-credits": { - "post": { - "operationId": "creditCoinSellerStock", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "user_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "coin-seller:stock-credit", - "x-permissions": ["coin-seller:stock-credit"] - } - }, - "/admin/countries": { - "get": { - "operationId": "listCountries", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "country:view", - "x-permissions": ["country:view"] - }, - "post": { - "operationId": "createCountry", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "country:create", - "x-permissions": ["country:create"] - } - }, - "/admin/countries/{country_id}": { - "get": { - "operationId": "getCountry", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "country_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "country:view", - "x-permissions": ["country:view"] - }, - "patch": { - "operationId": "updateCountry", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "country_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "country:update", - "x-permissions": ["country:update"] - }, - "delete": { - "operationId": "deleteCountry", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "country_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "country:status", - "x-permissions": ["country:status"] - } - }, - "/admin/countries/{country_id}/disable": { - "post": { - "operationId": "disableCountry", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "country_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "country:status", - "x-permissions": ["country:status"] - } - }, - "/admin/countries/{country_id}/enable": { - "post": { - "operationId": "enableCountry", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "country_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "country:status", - "x-permissions": ["country:status"] - } - }, - "/admin/files/image/upload": { - "post": { - "operationId": "uploadImage", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "upload:create", - "x-permissions": ["upload:create"] - } - }, - "/admin/files/upload": { - "post": { - "operationId": "uploadFile", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "upload:create", - "x-permissions": ["upload:create"] - } - }, - "/admin/gifts": { - "get": { - "operationId": "listGifts", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "gift:view", - "x-permissions": ["gift:view"] - }, - "post": { - "operationId": "createGift", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "gift:create", - "x-permissions": ["gift:create"] - } - }, - "/admin/gifts/{gift_id}": { - "put": { - "operationId": "updateGift", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "gift_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "gift:update", - "x-permissions": ["gift:update"] - } - }, - "/admin/gifts/{gift_id}/disable": { - "post": { - "operationId": "disableGift", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "gift_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "gift:status", - "x-permissions": ["gift:status"] - } - }, - "/admin/gifts/{gift_id}/enable": { - "post": { - "operationId": "enableGift", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "gift_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "gift:status", - "x-permissions": ["gift:status"] - } - }, - "/admin/hosts": { - "get": { - "operationId": "listHosts", - "parameters": [ - { - "$ref": "#/components/parameters/Page" - }, - { - "$ref": "#/components/parameters/PageSize" - }, - { - "$ref": "#/components/parameters/Keyword" - }, - { - "$ref": "#/components/parameters/Status" - }, - { - "$ref": "#/components/parameters/RegionId" - }, - { - "$ref": "#/components/parameters/AgencyId" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/HostProfilePageResponse" - } - }, - "x-permission": "host:view", - "x-permissions": ["host:view"] - } - }, - "/admin/payment/recharge-bills": { - "get": { - "operationId": "listRechargeBills", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "payment-bill:view", - "x-permissions": ["payment-bill:view"] - } - }, - "/admin/regions": { - "get": { - "operationId": "listRegions", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "region:view", - "x-permissions": ["region:view"] - }, - "post": { - "operationId": "createRegion", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "region:create", - "x-permissions": ["region:create"] - } - }, - "/admin/regions/{region_id}": { - "get": { - "operationId": "getRegion", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "region_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "region:view", - "x-permissions": ["region:view"] - }, - "patch": { - "operationId": "updateRegion", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "region_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "region:update", - "x-permissions": ["region:update"] - }, - "delete": { - "operationId": "disableRegion", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "region_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "region:status", - "x-permissions": ["region:status"] - } - }, - "/admin/regions/{region_id}/countries": { - "put": { - "operationId": "replaceRegionCountries", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "region_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "region:update", - "x-permissions": ["region:update"] - } - }, - "/admin/regions/{region_id}/enable": { - "post": { - "operationId": "enableRegion", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "region_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "region:status", - "x-permissions": ["region:status"] - } - }, - "/admin/resource-grants": { - "get": { - "operationId": "listResourceGrants", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "resource-grant:view", - "x-permissions": ["resource-grant:view"] - } - }, - "/admin/resource-grants/group": { - "post": { - "operationId": "grantResourceGroup", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "resource-grant:create", - "x-permissions": ["resource-grant:create"] - } - }, - "/admin/resource-grants/resource": { - "post": { - "operationId": "grantResource", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "resource-grant:create", - "x-permissions": ["resource-grant:create"] - } - }, - "/admin/resource-groups": { - "get": { - "operationId": "listResourceGroups", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "resource-group:view", - "x-permissions": ["resource-group:view"] - }, - "post": { - "operationId": "createResourceGroup", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "resource-group:create", - "x-permissions": ["resource-group:create"] - } - }, - "/admin/resource-groups/{group_id}": { - "get": { - "operationId": "getResourceGroup", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "group_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "resource-group:view", - "x-permissions": ["resource-group:view"] - }, - "put": { - "operationId": "updateResourceGroup", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "group_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "resource-group:update", - "x-permissions": ["resource-group:update"] - } - }, - "/admin/resource-groups/{group_id}/disable": { - "post": { - "operationId": "disableResourceGroup", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "group_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "resource-group:update", - "x-permissions": ["resource-group:update"] - } - }, - "/admin/resource-groups/{group_id}/enable": { - "post": { - "operationId": "enableResourceGroup", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "group_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "resource-group:update", - "x-permissions": ["resource-group:update"] - } - }, - "/admin/resource-groups/{group_id}/items": { - "put": { - "operationId": "updateResourceGroupItems", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "group_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "resource-group:update", - "x-permissions": ["resource-group:update"] - } - }, - "/admin/resources": { - "get": { - "operationId": "listResources", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "resource:view", - "x-permissions": ["resource:view"] - }, - "post": { - "operationId": "createResource", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "resource:create", - "x-permissions": ["resource:create"] - } - }, - "/admin/resources/{resource_id}": { - "get": { - "operationId": "getResource", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "resource_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "resource:view", - "x-permissions": ["resource:view"] - }, - "put": { - "operationId": "updateResource", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "resource_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "resource:update", - "x-permissions": ["resource:update"] - } - }, - "/admin/resources/{resource_id}/disable": { - "post": { - "operationId": "disableResource", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "resource_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "resource:update", - "x-permissions": ["resource:update"] - } - }, - "/admin/resources/{resource_id}/enable": { - "post": { - "operationId": "enableResource", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "resource_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "resource:update", - "x-permissions": ["resource:update"] - } - }, - "/admin/rooms": { - "get": { - "operationId": "listRooms", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "room:view", - "x-permissions": ["room:view"] - } - }, - "/admin/rooms/{room_id}": { - "patch": { - "operationId": "updateRoom", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "room_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "room:update", - "x-permissions": ["room:update"] - }, - "delete": { - "operationId": "deleteRoom", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "in": "path", - "name": "room_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "x-permission": "room:delete", - "x-permissions": ["room:delete"] - } - }, - "/app/users": { - "get": { - "operationId": "appListUsers", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "app-user:view", - "x-permissions": ["app-user:view"] - } - }, - "/app/users/{id}": { - "get": { - "operationId": "appGetUser", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "x-permission": "app-user:view", - "x-permissions": ["app-user:view"] - }, - "patch": { - "operationId": "appUpdateUser", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "x-permission": "app-user:update", - "x-permissions": ["app-user:update"] - } - }, - "/app/users/{id}/ban": { - "post": { - "operationId": "appBanUser", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "x-permission": "app-user:status", - "x-permissions": ["app-user:status"] - } - }, - "/app/users/{id}/password": { - "post": { - "operationId": "appSetPassword", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "x-permission": "app-user:password", - "x-permissions": ["app-user:password"] - } - }, - "/app/users/{id}/unban": { - "post": { - "operationId": "appUnbanUser", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "x-permission": "app-user:status", - "x-permissions": ["app-user:status"] - } - }, - "/auth/change-password": { - "post": { - "operationId": "changePassword", - "requestBody": { - "$ref": "#/components/requestBodies/ChangePasswordRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - } - } - }, - "/auth/login": { - "post": { - "operationId": "login", - "requestBody": { - "$ref": "#/components/requestBodies/LoginRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/SessionResponse" - } - } - } - }, - "/auth/logout": { - "post": { - "operationId": "logout", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - } - } - }, - "/auth/me": { - "get": { - "operationId": "me", - "responses": { - "200": { - "$ref": "#/components/responses/SessionResponse" - } - } - } - }, - "/auth/refresh": { - "post": { - "operationId": "refresh", - "responses": { - "200": { - "$ref": "#/components/responses/SessionResponse" - } - } - } - }, - "/dashboard/overview": { - "get": { - "operationId": "dashboardOverview", - "x-permission": "overview:view", - "responses": { - "200": { - "$ref": "#/components/responses/DashboardOverviewResponse" - } - }, - "x-permissions": ["overview:view"] - } - }, - "/exports/users": { - "post": { - "operationId": "createUserExportJob", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "export:create", - "x-permissions": ["export:create"] - } - }, - "/jobs": { - "get": { - "operationId": "listJobs", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permission": "job:view", - "x-permissions": ["job:view"] - } - }, - "/jobs/{id}/artifact": { - "get": { - "operationId": "downloadJobArtifact", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "x-permission": "job:view", - "x-permissions": ["job:view"] - } - }, - "/jobs/{id}/cancel": { - "post": { - "operationId": "cancelJob", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "x-permission": "job:cancel", - "x-permissions": ["job:cancel"] - } - }, - "/logs/login": { - "get": { - "operationId": "listLoginLogs", - "x-permission": "log:view", - "parameters": [ - { - "$ref": "#/components/parameters/Page" - }, - { - "$ref": "#/components/parameters/PageSize" - }, - { - "$ref": "#/components/parameters/Keyword" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/LogPageResponse" - } - }, - "x-permissions": ["log:view"] - } - }, - "/logs/login/export": { - "get": { - "operationId": "exportLoginLogs", - "x-permission": "log:export", - "responses": { - "200": { - "description": "CSV" - } - }, - "x-permissions": ["log:export"] - } - }, - "/logs/operations": { - "get": { - "operationId": "listOperationLogs", - "x-permission": "log:view", - "parameters": [ - { - "$ref": "#/components/parameters/Page" - }, - { - "$ref": "#/components/parameters/PageSize" - }, - { - "$ref": "#/components/parameters/Keyword" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/LogPageResponse" - } - }, - "x-permissions": ["log:view"] - } - }, - "/logs/operations/export": { - "get": { - "operationId": "exportOperationLogs", - "x-permission": "log:export", - "responses": { - "200": { - "description": "CSV" - } - }, - "x-permissions": ["log:export"] - } - }, - "/navigation/menus": { - "get": { - "operationId": "navigationMenus", - "responses": { - "200": { - "$ref": "#/components/responses/MenuListResponse" - } - } - } - }, - "/notifications": { - "get": { - "operationId": "listNotifications", - "x-permission": "notification:view", - "responses": { - "200": { - "$ref": "#/components/responses/NotificationListResponse" - } - }, - "x-permissions": ["notification:view"] - } - }, - "/notifications/{id}": { - "delete": { - "operationId": "deleteNotification", - "x-permission": "notification:delete", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permissions": ["notification:delete"] - } - }, - "/notifications/{id}/read": { - "patch": { - "operationId": "markNotificationRead", - "x-permission": "notification:read", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/NotificationResponse" - } - }, - "x-permissions": ["notification:read"] - } - }, - "/notifications/read-all": { - "patch": { - "operationId": "markAllNotificationsRead", - "x-permission": "notification:read-all", - "responses": { - "200": { - "$ref": "#/components/responses/NotificationListResponse" - } - }, - "x-permissions": ["notification:read-all"] - } - }, - "/permissions": { - "get": { - "operationId": "listPermissions", - "x-permission": "permission:view", - "responses": { - "200": { - "$ref": "#/components/responses/PermissionListResponse" - } - }, - "x-permissions": ["permission:view", "role:permission", "role:manage"] - }, - "post": { - "operationId": "createPermission", - "x-permission": "permission:create", - "requestBody": { - "$ref": "#/components/requestBodies/PermissionRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/PermissionResponse" - } - }, - "x-permissions": ["permission:create"] - } - }, - "/permissions/{id}": { - "patch": { - "operationId": "updatePermission", - "x-permission": "permission:update", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/PermissionRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/PermissionResponse" - } - }, - "x-permissions": ["permission:update"] - }, - "delete": { - "operationId": "deletePermission", - "x-permission": "permission:delete", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permissions": ["permission:delete"] - } - }, - "/permissions/sync": { - "post": { - "operationId": "syncPermissions", - "x-permission": "permission:sync", - "responses": { - "200": { - "$ref": "#/components/responses/PermissionListResponse" - } - }, - "x-permissions": ["permission:sync"] - } - }, - "/roles": { - "get": { - "operationId": "listRoles", - "x-permission": "role:view", - "responses": { - "200": { - "$ref": "#/components/responses/RoleListResponse" - } - }, - "x-permissions": ["role:view"] - }, - "post": { - "operationId": "createRole", - "x-permission": "role:create", - "requestBody": { - "$ref": "#/components/requestBodies/RoleRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/RoleResponse" - } - }, - "x-permissions": ["role:create", "role:manage"] - } - }, - "/roles/{id}": { - "patch": { - "operationId": "updateRole", - "x-permission": "role:update", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/RoleRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/RoleResponse" - } - }, - "x-permissions": ["role:update", "role:manage"] - }, - "delete": { - "operationId": "deleteRole", - "x-permission": "role:delete", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permissions": ["role:delete", "role:manage"] - } - }, - "/roles/{id}/data-scopes": { - "get": { - "operationId": "getRoleDataScopes", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "x-permission": "role:data-scope", - "x-permissions": ["role:data-scope"] - }, - "put": { - "operationId": "replaceRoleDataScopes", - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "x-permission": "role:data-scope", - "x-permissions": ["role:data-scope"] - } - }, - "/roles/{id}/permissions": { - "put": { - "operationId": "replaceRolePermissions", - "x-permission": "role:permission", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/RolePermissionRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/RoleResponse" - } - }, - "x-permissions": ["role:permission", "role:manage"] - } - }, - "/search": { - "get": { - "operationId": "search", - "parameters": [ - { - "$ref": "#/components/parameters/Keyword" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/SearchResponse" - } - } - } - }, - "/system/menus": { - "get": { - "operationId": "listSystemMenus", - "x-permission": "menu:view", - "responses": { - "200": { - "$ref": "#/components/responses/MenuListResponse" - } - }, - "x-permissions": ["menu:view"] - }, - "post": { - "operationId": "createMenu", - "x-permission": "menu:create", - "requestBody": { - "$ref": "#/components/requestBodies/MenuRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/MenuResponse" - } - }, - "x-permissions": ["menu:create"] - } - }, - "/system/menus/{id}": { - "patch": { - "operationId": "updateMenu", - "x-permission": "menu:update", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/MenuRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/MenuResponse" - } - }, - "x-permissions": ["menu:update"] - }, - "delete": { - "operationId": "deleteMenu", - "x-permission": "menu:delete", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permissions": ["menu:delete"] - } - }, - "/system/menus/{id}/visible": { - "patch": { - "operationId": "updateMenuVisible", - "x-permission": "menu:visible", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/MenuVisibleRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/MenuResponse" - } - }, - "x-permissions": ["menu:visible"] - } - }, - "/system/menus/sort": { - "put": { - "operationId": "sortMenus", - "x-permission": "menu:sort", - "requestBody": { - "$ref": "#/components/requestBodies/MenuSortRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/MenuListResponse" - } - }, - "x-permissions": ["menu:sort"] - } - }, - "/users": { - "get": { - "operationId": "listUsers", - "x-permission": "user:view", - "parameters": [ - { - "$ref": "#/components/parameters/Page" - }, - { - "$ref": "#/components/parameters/PageSize" - }, - { - "$ref": "#/components/parameters/Keyword" - }, - { - "name": "role", - "in": "query", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/Status" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/UserPageResponse" - } - }, - "x-permissions": ["user:view"] - }, - "post": { - "operationId": "createUser", - "x-permission": "user:create", - "requestBody": { - "$ref": "#/components/requestBodies/UserRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/CreateUserResponse" - } - }, - "x-permissions": ["user:create"] - } - }, - "/users/{id}": { - "get": { - "operationId": "getUser", - "x-permission": "user:view", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/UserResponse" - } - }, - "x-permissions": ["user:view"] - }, - "patch": { - "operationId": "updateUser", - "x-permission": "user:update", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/UserRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/UserResponse" - } - }, - "x-permissions": ["user:update"] - } - }, - "/users/{id}/reset-password": { - "post": { - "operationId": "resetUserPassword", - "x-permission": "user:reset-password", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ResetPasswordResponse" - } - }, - "x-permissions": ["user:reset-password"] - } - }, - "/users/{id}/status": { - "patch": { - "operationId": "updateUserStatus", - "x-permission": "user:status", - "parameters": [ - { - "$ref": "#/components/parameters/Id" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/StatusRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/UserResponse" - } - }, - "x-permissions": ["user:status"] - } - }, - "/users/batch/status": { - "post": { - "operationId": "batchUpdateUserStatus", - "x-permission": "user:status", - "requestBody": { - "$ref": "#/components/requestBodies/BatchStatusRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/EmptyResponse" - } - }, - "x-permissions": ["user:status"] - } - }, - "/users/export": { - "get": { - "operationId": "exportUsers", - "x-permission": "user:export", - "responses": { - "200": { - "description": "CSV" - } - }, - "x-permissions": ["user:export"] - } - } + "/admin/activity/daily-tasks/{task_id}": { + "put": { + "operationId": "updateTaskDefinition", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "daily-task:update", + "x-permissions": [ + "daily-task:update" + ] + } }, - "components": { - "parameters": { - "AgencyId": { - "name": "agency_id", - "in": "query", - "schema": { - "type": "integer" - } - }, - "Id": { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "integer" - } - }, - "Keyword": { - "name": "keyword", - "in": "query", - "schema": { - "type": "string" - } - }, - "Page": { - "name": "page", - "in": "query", - "schema": { - "type": "integer", - "minimum": 1 - } - }, - "PageSize": { - "name": "page_size", - "in": "query", - "schema": { - "type": "integer", - "minimum": 1 - } - }, - "ParentBdUserId": { - "name": "parent_bd_user_id", - "in": "query", - "schema": { - "type": "integer" - } - }, - "ParentLeaderUserId": { - "name": "parent_leader_user_id", - "in": "query", - "schema": { - "type": "integer" - } - }, - "RegionId": { - "name": "region_id", - "in": "query", - "schema": { - "type": "integer" - } - }, - "Status": { - "name": "status", - "in": "query", - "schema": { - "type": "string" - } - } + "/admin/activity/daily-tasks/{task_id}/status": { + "post": { + "operationId": "setTaskDefinitionStatus", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } }, - "requestBodies": { - "BatchStatusRequest": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["ids", "status"], - "properties": { - "ids": { - "type": "array", - "items": { - "type": "integer" - } - }, - "status": { - "type": "string" - } - } - } - } - } - }, - "ChangePasswordRequest": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["oldPassword", "newPassword"], - "properties": { - "oldPassword": { - "type": "string" - }, - "newPassword": { - "type": "string" - } - } - } - } - } - }, - "LoginRequest": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["username", "password"], - "properties": { - "username": { - "type": "string" - }, - "password": { - "type": "string" - } - } - } - } - } - }, - "MenuRequest": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MenuInput" - } - } - } - }, - "MenuSortRequest": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["items"], - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "required": ["id", "sort"], - "properties": { - "id": { - "type": "integer" - }, - "sort": { - "type": "integer" - } - } - } - } - } - } - } - } - }, - "MenuVisibleRequest": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["visible"], - "properties": { - "visible": { - "type": "boolean" - } - } - } - } - } - }, - "PermissionRequest": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PermissionInput" - } - } - } - }, - "RolePermissionRequest": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["permissionIds"], - "properties": { - "permissionIds": { - "type": "array", - "items": { - "type": "integer" - } - } - } - } - } - } - }, - "RoleRequest": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RoleInput" - } - } - } - }, - "StatusRequest": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["status"], - "properties": { - "status": { - "type": "string" - } - } - } - } - } - }, - "UserRequest": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserInput" - } - } - } + "parameters": [ + { + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "type": "integer" } + } + ], + "x-permission": "daily-task:status", + "x-permissions": [ + "daily-task:status" + ] + } + }, + "/admin/agencies": { + "get": { + "operationId": "listAgencies", + "parameters": [ + { + "$ref": "#/components/parameters/Page" + }, + { + "$ref": "#/components/parameters/PageSize" + }, + { + "$ref": "#/components/parameters/Keyword" + }, + { + "$ref": "#/components/parameters/Status" + }, + { + "$ref": "#/components/parameters/RegionId" + }, + { + "$ref": "#/components/parameters/ParentBdUserId" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/AgencyPageResponse" + } + }, + "x-permission": "agency:view", + "x-permissions": [ + "agency:view" + ] + }, + "post": { + "operationId": "createAgency", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "agency:create", + "x-permissions": [ + "agency:create" + ] + } + }, + "/admin/agencies/{agency_id}/close": { + "post": { + "operationId": "closeAgency", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "agency_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "agency:status", + "x-permissions": [ + "agency:status" + ] + } + }, + "/admin/agencies/{agency_id}/join-enabled": { + "post": { + "operationId": "setAgencyJoinEnabled", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "agency_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "agency:status", + "x-permissions": [ + "agency:status" + ] + } + }, + "/admin/app-config/banners": { + "get": { + "operationId": "listBanners", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "app-config:view", + "x-permissions": [ + "app-config:view" + ] + }, + "post": { + "operationId": "createBanner", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "app-config:update", + "x-permissions": [ + "app-config:update" + ] + } + }, + "/admin/app-config/banners/{banner_id}": { + "put": { + "operationId": "updateBanner", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "banner_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "app-config:update", + "x-permissions": [ + "app-config:update" + ] + }, + "delete": { + "operationId": "deleteBanner", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "banner_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "app-config:update", + "x-permissions": [ + "app-config:update" + ] + } + }, + "/admin/app-config/h5-links": { + "get": { + "operationId": "listH5Links", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "app-config:view", + "x-permissions": [ + "app-config:view" + ] + }, + "put": { + "operationId": "updateH5Links", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "app-config:update", + "x-permissions": [ + "app-config:update" + ] + } + }, + "/admin/apps": { + "get": { + "operationId": "listApps", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + } + } + }, + "/admin/bd-leaders": { + "get": { + "operationId": "listBDLeaders", + "parameters": [ + { + "$ref": "#/components/parameters/Page" + }, + { + "$ref": "#/components/parameters/PageSize" + }, + { + "$ref": "#/components/parameters/Keyword" + }, + { + "$ref": "#/components/parameters/Status" + }, + { + "$ref": "#/components/parameters/RegionId" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/BDProfilePageResponse" + } + }, + "x-permission": "bd:view", + "x-permissions": [ + "bd:view" + ] + }, + "post": { + "operationId": "createBDLeader", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "bd:create", + "x-permissions": [ + "bd:create" + ] + } + }, + "/admin/bd-leaders/{user_id}": { + "delete": { + "operationId": "deleteBDLeader", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "bd:update", + "x-permissions": [ + "bd:update" + ] + } + }, + "/admin/bd-leaders/{user_id}/status": { + "patch": { + "operationId": "setBDLeaderStatus", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "bd:update", + "x-permissions": [ + "bd:update" + ] + } + }, + "/admin/bds": { + "get": { + "operationId": "listBDs", + "parameters": [ + { + "$ref": "#/components/parameters/Page" + }, + { + "$ref": "#/components/parameters/PageSize" + }, + { + "$ref": "#/components/parameters/Keyword" + }, + { + "$ref": "#/components/parameters/Status" + }, + { + "$ref": "#/components/parameters/RegionId" + }, + { + "$ref": "#/components/parameters/ParentLeaderUserId" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/BDProfilePageResponse" + } + }, + "x-permission": "bd:view", + "x-permissions": [ + "bd:view" + ] + }, + "post": { + "operationId": "createBD", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "bd:create", + "x-permissions": [ + "bd:create" + ] + } + }, + "/admin/bds/{user_id}/status": { + "patch": { + "operationId": "setBDStatus", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "bd:update", + "x-permissions": [ + "bd:update" + ] + } + }, + "/admin/coin-sellers": { + "get": { + "operationId": "listCoinSellers", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "coin-seller:view", + "x-permissions": [ + "coin-seller:view" + ] + }, + "post": { + "operationId": "createCoinSeller", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "coin-seller:create", + "x-permissions": [ + "coin-seller:create" + ] + } + }, + "/admin/coin-sellers/{user_id}/status": { + "patch": { + "operationId": "setCoinSellerStatus", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "coin-seller:update", + "x-permissions": [ + "coin-seller:update" + ] + } + }, + "/admin/coin-sellers/{user_id}/stock-credits": { + "post": { + "operationId": "creditCoinSellerStock", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "coin-seller:stock-credit", + "x-permissions": [ + "coin-seller:stock-credit" + ] + } + }, + "/admin/countries": { + "get": { + "operationId": "listCountries", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "country:view", + "x-permissions": [ + "country:view" + ] + }, + "post": { + "operationId": "createCountry", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "country:create", + "x-permissions": [ + "country:create" + ] + } + }, + "/admin/countries/{country_id}": { + "get": { + "operationId": "getCountry", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "country_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "country:view", + "x-permissions": [ + "country:view" + ] + }, + "patch": { + "operationId": "updateCountry", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "country_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "country:update", + "x-permissions": [ + "country:update" + ] + }, + "delete": { + "operationId": "deleteCountry", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "country_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "country:status", + "x-permissions": [ + "country:status" + ] + } + }, + "/admin/countries/{country_id}/disable": { + "post": { + "operationId": "disableCountry", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "country_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "country:status", + "x-permissions": [ + "country:status" + ] + } + }, + "/admin/countries/{country_id}/enable": { + "post": { + "operationId": "enableCountry", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "country_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "country:status", + "x-permissions": [ + "country:status" + ] + } + }, + "/admin/files/image/upload": { + "post": { + "operationId": "uploadImage", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "upload:create", + "x-permissions": [ + "upload:create" + ] + } + }, + "/admin/files/upload": { + "post": { + "operationId": "uploadFile", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "upload:create", + "x-permissions": [ + "upload:create" + ] + } + }, + "/admin/gifts": { + "get": { + "operationId": "listGifts", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "gift:view", + "x-permissions": [ + "gift:view" + ] + }, + "post": { + "operationId": "createGift", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "gift:create", + "x-permissions": [ + "gift:create" + ] + } + }, + "/admin/gifts/{gift_id}": { + "put": { + "operationId": "updateGift", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "gift_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "gift:update", + "x-permissions": [ + "gift:update" + ] + } + }, + "/admin/gifts/{gift_id}/disable": { + "post": { + "operationId": "disableGift", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "gift_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "gift:status", + "x-permissions": [ + "gift:status" + ] + } + }, + "/admin/gifts/{gift_id}/enable": { + "post": { + "operationId": "enableGift", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "gift_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "gift:status", + "x-permissions": [ + "gift:status" + ] + } + }, + "/admin/hosts": { + "get": { + "operationId": "listHosts", + "parameters": [ + { + "$ref": "#/components/parameters/Page" + }, + { + "$ref": "#/components/parameters/PageSize" + }, + { + "$ref": "#/components/parameters/Keyword" + }, + { + "$ref": "#/components/parameters/Status" + }, + { + "$ref": "#/components/parameters/RegionId" + }, + { + "$ref": "#/components/parameters/AgencyId" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/HostProfilePageResponse" + } + }, + "x-permission": "host:view", + "x-permissions": [ + "host:view" + ] + } + }, + "/admin/payment/recharge-bills": { + "get": { + "operationId": "listRechargeBills", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "payment-bill:view", + "x-permissions": [ + "payment-bill:view" + ] + } + }, + "/admin/regions": { + "get": { + "operationId": "listRegions", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "region:view", + "x-permissions": [ + "region:view" + ] + }, + "post": { + "operationId": "createRegion", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "region:create", + "x-permissions": [ + "region:create" + ] + } + }, + "/admin/regions/{region_id}": { + "get": { + "operationId": "getRegion", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "region_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "region:view", + "x-permissions": [ + "region:view" + ] + }, + "patch": { + "operationId": "updateRegion", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "region_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "region:update", + "x-permissions": [ + "region:update" + ] + }, + "delete": { + "operationId": "disableRegion", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "region_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "region:status", + "x-permissions": [ + "region:status" + ] + } + }, + "/admin/regions/{region_id}/countries": { + "put": { + "operationId": "replaceRegionCountries", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "region_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "region:update", + "x-permissions": [ + "region:update" + ] + } + }, + "/admin/regions/{region_id}/enable": { + "post": { + "operationId": "enableRegion", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "region_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "region:status", + "x-permissions": [ + "region:status" + ] + } + }, + "/admin/resource-grants": { + "get": { + "operationId": "listResourceGrants", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "resource-grant:view", + "x-permissions": [ + "resource-grant:view" + ] + } + }, + "/admin/resource-grants/group": { + "post": { + "operationId": "grantResourceGroup", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "resource-grant:create", + "x-permissions": [ + "resource-grant:create" + ] + } + }, + "/admin/resource-grants/resource": { + "post": { + "operationId": "grantResource", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "resource-grant:create", + "x-permissions": [ + "resource-grant:create" + ] + } + }, + "/admin/resource-groups": { + "get": { + "operationId": "listResourceGroups", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "resource-group:view", + "x-permissions": [ + "resource-group:view" + ] + }, + "post": { + "operationId": "createResourceGroup", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "resource-group:create", + "x-permissions": [ + "resource-group:create" + ] + } + }, + "/admin/resource-groups/{group_id}": { + "get": { + "operationId": "getResourceGroup", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "resource-group:view", + "x-permissions": [ + "resource-group:view" + ] + }, + "put": { + "operationId": "updateResourceGroup", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "resource-group:update", + "x-permissions": [ + "resource-group:update" + ] + } + }, + "/admin/resource-groups/{group_id}/disable": { + "post": { + "operationId": "disableResourceGroup", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "resource-group:update", + "x-permissions": [ + "resource-group:update" + ] + } + }, + "/admin/resource-groups/{group_id}/enable": { + "post": { + "operationId": "enableResourceGroup", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "resource-group:update", + "x-permissions": [ + "resource-group:update" + ] + } + }, + "/admin/resource-groups/{group_id}/items": { + "put": { + "operationId": "updateResourceGroupItems", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "resource-group:update", + "x-permissions": [ + "resource-group:update" + ] + } + }, + "/admin/resources": { + "get": { + "operationId": "listResources", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "resource:view", + "x-permissions": [ + "resource:view" + ] + }, + "post": { + "operationId": "createResource", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "resource:create", + "x-permissions": [ + "resource:create" + ] + } + }, + "/admin/resources/{resource_id}": { + "get": { + "operationId": "getResource", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "resource:view", + "x-permissions": [ + "resource:view" + ] + }, + "put": { + "operationId": "updateResource", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "resource:update", + "x-permissions": [ + "resource:update" + ] + } + }, + "/admin/resources/{resource_id}/disable": { + "post": { + "operationId": "disableResource", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "resource:update", + "x-permissions": [ + "resource:update" + ] + } + }, + "/admin/resources/{resource_id}/enable": { + "post": { + "operationId": "enableResource", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "resource:update", + "x-permissions": [ + "resource:update" + ] + } + }, + "/admin/rooms": { + "get": { + "operationId": "listRooms", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "room:view", + "x-permissions": [ + "room:view" + ] + } + }, + "/admin/rooms/{room_id}": { + "patch": { + "operationId": "updateRoom", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "room_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "room:update", + "x-permissions": [ + "room:update" + ] + }, + "delete": { + "operationId": "deleteRoom", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "in": "path", + "name": "room_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "x-permission": "room:delete", + "x-permissions": [ + "room:delete" + ] + } + }, + "/app/users": { + "get": { + "operationId": "appListUsers", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "app-user:view", + "x-permissions": [ + "app-user:view" + ] + } + }, + "/app/users/{id}": { + "get": { + "operationId": "appGetUser", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "x-permission": "app-user:view", + "x-permissions": [ + "app-user:view" + ] + }, + "patch": { + "operationId": "appUpdateUser", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "x-permission": "app-user:update", + "x-permissions": [ + "app-user:update" + ] + } + }, + "/app/users/{id}/ban": { + "post": { + "operationId": "appBanUser", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "x-permission": "app-user:status", + "x-permissions": [ + "app-user:status" + ] + } + }, + "/app/users/{id}/login-logs": { + "get": { + "operationId": "appListUserLoginLogs", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "x-permission": "app-user:view", + "x-permissions": [ + "app-user:view" + ] + } + }, + "/app/users/{id}/password": { + "post": { + "operationId": "appSetPassword", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "x-permission": "app-user:password", + "x-permissions": [ + "app-user:password" + ] + } + }, + "/app/users/{id}/unban": { + "post": { + "operationId": "appUnbanUser", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "x-permission": "app-user:status", + "x-permissions": [ + "app-user:status" + ] + } + }, + "/app/users/login-logs": { + "get": { + "operationId": "appListLoginLogs", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "app-user:view", + "x-permissions": [ + "app-user:view" + ] + } + }, + "/auth/change-password": { + "post": { + "operationId": "changePassword", + "requestBody": { + "$ref": "#/components/requestBodies/ChangePasswordRequest" }, "responses": { - "AgencyPageResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseAgencyPage" - } - } - } - }, - "BDProfilePageResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseBDProfilePage" - } - } - } - }, - "CreateUserResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseCreateUserResult" - } - } - } - }, - "DashboardOverviewResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseDashboardOverview" - } - } - } - }, - "EmptyResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseEmpty" - } - } - } - }, - "HostProfilePageResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseHostProfilePage" - } - } - } - }, - "LogPageResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseLogPage" - } - } - } - }, - "MenuListResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseMenuList" - } - } - } - }, - "MenuResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseMenu" - } - } - } - }, - "NotificationListResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseNotificationList" - } - } - } - }, - "NotificationResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseNotification" - } - } - } - }, - "PermissionListResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponsePermissionList" - } - } - } - }, - "PermissionResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponsePermission" - } - } - } - }, - "ResetPasswordResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseResetPasswordResult" - } - } - } - }, - "RoleListResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseRoleList" - } - } - } - }, - "RoleResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseRole" - } - } - } - }, - "SearchResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseSearchList" - } - } - } - }, - "SessionResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseSession" - } - } - } - }, - "UserPageResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseUserPage" - } - } - } - }, - "UserResponse": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponseUser" - } - } - } - } - }, - "schemas": { - "ApiPageAgency": { - "type": "object", - "required": ["items", "page", "pageSize", "total"], - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Agency" - } - }, - "page": { - "type": "integer" - }, - "pageSize": { - "type": "integer" - }, - "total": { - "type": "integer" - } - } - }, - "ApiPageBDProfile": { - "type": "object", - "required": ["items", "page", "pageSize", "total"], - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BDProfile" - } - }, - "page": { - "type": "integer" - }, - "pageSize": { - "type": "integer" - }, - "total": { - "type": "integer" - } - } - }, - "ApiPageHostProfile": { - "type": "object", - "required": ["items", "page", "pageSize", "total"], - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HostProfile" - } - }, - "page": { - "type": "integer" - }, - "pageSize": { - "type": "integer" - }, - "total": { - "type": "integer" - } - } - }, - "ApiPageLog": { - "type": "object", - "required": ["items", "page", "pageSize", "total"], - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Log" - } - }, - "page": { - "type": "integer" - }, - "pageSize": { - "type": "integer" - }, - "total": { - "type": "integer" - } - } - }, - "ApiPageUser": { - "type": "object", - "required": ["items", "page", "pageSize", "total"], - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AdminUser" - } - }, - "page": { - "type": "integer" - }, - "pageSize": { - "type": "integer" - }, - "total": { - "type": "integer" - } - } - }, - "ApiResponseCreateUserResult": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/CreateUserResult" - } - } - } - ] - }, - "ApiResponseAgencyPage": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/ApiPageAgency" - } - } - } - ] - }, - "ApiResponseBDProfilePage": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/ApiPageBDProfile" - } - } - } - ] - }, - "ApiResponseDashboardOverview": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/DashboardOverview" - } - } - } - ] - }, - "ApiResponseEmpty": { - "$ref": "#/components/schemas/Envelope" - }, - "ApiResponseHostProfilePage": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/ApiPageHostProfile" - } - } - } - ] - }, - "ApiResponseLogPage": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/ApiPageLog" - } - } - } - ] - }, - "ApiResponseMenu": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Menu" - } - } - } - ] - }, - "ApiResponseMenuList": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Menu" - } - } - } - } - ] - }, - "ApiResponseNotification": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Notification" - } - } - } - ] - }, - "ApiResponseNotificationList": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/NotificationList" - } - } - } - ] - }, - "ApiResponsePermission": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Permission" - } - } - } - ] - }, - "ApiResponsePermissionList": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Permission" - } - } - } - } - ] - }, - "ApiResponseResetPasswordResult": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/ResetPasswordResult" - } - } - } - ] - }, - "ApiResponseRole": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Role" - } - } - } - ] - }, - "ApiResponseRoleList": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Role" - } - } - } - } - ] - }, - "ApiResponseSearchList": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SearchResult" - } - } - } - } - ] - }, - "ApiResponseSession": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Session" - } - } - } - ] - }, - "ApiResponseUser": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/AdminUser" - } - } - } - ] - }, - "ApiResponseUserPage": { - "allOf": [ - { - "$ref": "#/components/schemas/Envelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/ApiPageUser" - } - } - } - ] - }, - "AdminUser": { - "type": "object", - "required": ["account", "id", "name", "status"], - "properties": { - "account": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "lastLogin": { - "type": "string" - }, - "mfa": { - "type": "string" - }, - "mfaEnabled": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "role": { - "type": "string" - }, - "roleIds": { - "type": "array", - "items": { - "type": "integer" - } - }, - "status": { - "type": "string" - }, - "team": { - "type": "string" - } - } - }, - "Agency": { - "type": "object", - "required": ["agencyId"], - "properties": { - "agencyId": { - "type": "integer" - }, - "createdAtMs": { - "type": "integer" - }, - "createdByUserId": { - "type": "integer" - }, - "joinEnabled": { - "type": "boolean" - }, - "maxHosts": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "ownerUserId": { - "type": "integer" - }, - "parentBdUserId": { - "type": "integer" - }, - "regionId": { - "type": "integer" - }, - "status": { - "type": "string" - }, - "updatedAtMs": { - "type": "integer" - } - } - }, - "BDProfile": { - "type": "object", - "required": ["userId"], - "properties": { - "createdAtMs": { - "type": "integer" - }, - "createdByUserId": { - "type": "integer" - }, - "parentLeaderUserId": { - "type": "integer" - }, - "regionId": { - "type": "integer" - }, - "role": { - "type": "string" - }, - "status": { - "type": "string" - }, - "updatedAtMs": { - "type": "integer" - }, - "userId": { - "type": "integer" - } - } - }, - "CreateUserResult": { - "type": "object", - "properties": { - "initialPassword": { - "type": "string" - } - } - }, - "DashboardOverview": { - "type": "object", - "additionalProperties": true - }, - "Envelope": { - "type": "object", - "properties": { - "code": { - "type": "integer" - }, - "data": {}, - "message": { - "type": "string" - } - } - }, - "HostProfile": { - "type": "object", - "required": ["userId"], - "properties": { - "createdAtMs": { - "type": "integer" - }, - "currentAgencyId": { - "type": "integer" - }, - "currentMembershipId": { - "type": "integer" - }, - "firstBecameHostAtMs": { - "type": "integer" - }, - "regionId": { - "type": "integer" - }, - "source": { - "type": "string" - }, - "status": { - "type": "string" - }, - "updatedAtMs": { - "type": "integer" - }, - "userId": { - "type": "integer" - } - } - }, - "Log": { - "type": "object", - "additionalProperties": true - }, - "Menu": { - "type": "object", - "additionalProperties": true - }, - "MenuInput": { - "type": "object", - "required": ["code", "label"], - "additionalProperties": true - }, - "Notification": { - "type": "object", - "additionalProperties": true - }, - "NotificationList": { - "type": "object", - "required": ["items", "unread"], - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Notification" - } - }, - "unread": { - "type": "integer" - } - } - }, - "Permission": { - "type": "object", - "additionalProperties": true - }, - "PermissionInput": { - "type": "object", - "required": ["code", "kind", "name"], - "additionalProperties": true - }, - "ResetPasswordResult": { - "type": "object", - "properties": { - "initialPassword": { - "type": "string" - } - } - }, - "Role": { - "type": "object", - "additionalProperties": true - }, - "RoleInput": { - "type": "object", - "required": ["code", "name"], - "additionalProperties": true - }, - "SearchResult": { - "type": "object", - "additionalProperties": true - }, - "Session": { - "type": "object", - "additionalProperties": true - }, - "UserInput": { - "type": "object", - "required": ["name"], - "additionalProperties": true - } + "200": { + "$ref": "#/components/responses/EmptyResponse" + } } + } + }, + "/auth/login": { + "post": { + "operationId": "login", + "requestBody": { + "$ref": "#/components/requestBodies/LoginRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/SessionResponse" + } + } + } + }, + "/auth/logout": { + "post": { + "operationId": "logout", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + } + } + }, + "/auth/me": { + "get": { + "operationId": "me", + "responses": { + "200": { + "$ref": "#/components/responses/SessionResponse" + } + } + } + }, + "/auth/refresh": { + "post": { + "operationId": "refresh", + "responses": { + "200": { + "$ref": "#/components/responses/SessionResponse" + } + } + } + }, + "/dashboard/overview": { + "get": { + "operationId": "dashboardOverview", + "x-permission": "overview:view", + "responses": { + "200": { + "$ref": "#/components/responses/DashboardOverviewResponse" + } + }, + "x-permissions": [ + "overview:view" + ] + } + }, + "/exports/users": { + "post": { + "operationId": "createUserExportJob", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "export:create", + "x-permissions": [ + "export:create" + ] + } + }, + "/jobs": { + "get": { + "operationId": "listJobs", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permission": "job:view", + "x-permissions": [ + "job:view" + ] + } + }, + "/jobs/{id}/artifact": { + "get": { + "operationId": "downloadJobArtifact", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "x-permission": "job:view", + "x-permissions": [ + "job:view" + ] + } + }, + "/jobs/{id}/cancel": { + "post": { + "operationId": "cancelJob", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "x-permission": "job:cancel", + "x-permissions": [ + "job:cancel" + ] + } + }, + "/logs/login": { + "get": { + "operationId": "listLoginLogs", + "x-permission": "log:view", + "parameters": [ + { + "$ref": "#/components/parameters/Page" + }, + { + "$ref": "#/components/parameters/PageSize" + }, + { + "$ref": "#/components/parameters/Keyword" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/LogPageResponse" + } + }, + "x-permissions": [ + "log:view" + ] + } + }, + "/logs/login/export": { + "get": { + "operationId": "exportLoginLogs", + "x-permission": "log:export", + "responses": { + "200": { + "description": "CSV" + } + }, + "x-permissions": [ + "log:export" + ] + } + }, + "/logs/operations": { + "get": { + "operationId": "listOperationLogs", + "x-permission": "log:view", + "parameters": [ + { + "$ref": "#/components/parameters/Page" + }, + { + "$ref": "#/components/parameters/PageSize" + }, + { + "$ref": "#/components/parameters/Keyword" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/LogPageResponse" + } + }, + "x-permissions": [ + "log:view" + ] + } + }, + "/logs/operations/export": { + "get": { + "operationId": "exportOperationLogs", + "x-permission": "log:export", + "responses": { + "200": { + "description": "CSV" + } + }, + "x-permissions": [ + "log:export" + ] + } + }, + "/navigation/menus": { + "get": { + "operationId": "navigationMenus", + "responses": { + "200": { + "$ref": "#/components/responses/MenuListResponse" + } + } + } + }, + "/notifications": { + "get": { + "operationId": "listNotifications", + "x-permission": "notification:view", + "responses": { + "200": { + "$ref": "#/components/responses/NotificationListResponse" + } + }, + "x-permissions": [ + "notification:view" + ] + } + }, + "/notifications/{id}": { + "delete": { + "operationId": "deleteNotification", + "x-permission": "notification:delete", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permissions": [ + "notification:delete" + ] + } + }, + "/notifications/{id}/read": { + "patch": { + "operationId": "markNotificationRead", + "x-permission": "notification:read", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/NotificationResponse" + } + }, + "x-permissions": [ + "notification:read" + ] + } + }, + "/notifications/read-all": { + "patch": { + "operationId": "markAllNotificationsRead", + "x-permission": "notification:read-all", + "responses": { + "200": { + "$ref": "#/components/responses/NotificationListResponse" + } + }, + "x-permissions": [ + "notification:read-all" + ] + } + }, + "/permissions": { + "get": { + "operationId": "listPermissions", + "x-permission": "permission:view", + "responses": { + "200": { + "$ref": "#/components/responses/PermissionListResponse" + } + }, + "x-permissions": [ + "permission:view", + "role:permission", + "role:manage" + ] + }, + "post": { + "operationId": "createPermission", + "x-permission": "permission:create", + "requestBody": { + "$ref": "#/components/requestBodies/PermissionRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/PermissionResponse" + } + }, + "x-permissions": [ + "permission:create" + ] + } + }, + "/permissions/{id}": { + "patch": { + "operationId": "updatePermission", + "x-permission": "permission:update", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/PermissionRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/PermissionResponse" + } + }, + "x-permissions": [ + "permission:update" + ] + }, + "delete": { + "operationId": "deletePermission", + "x-permission": "permission:delete", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permissions": [ + "permission:delete" + ] + } + }, + "/permissions/sync": { + "post": { + "operationId": "syncPermissions", + "x-permission": "permission:sync", + "responses": { + "200": { + "$ref": "#/components/responses/PermissionListResponse" + } + }, + "x-permissions": [ + "permission:sync" + ] + } + }, + "/roles": { + "get": { + "operationId": "listRoles", + "x-permission": "role:view", + "responses": { + "200": { + "$ref": "#/components/responses/RoleListResponse" + } + }, + "x-permissions": [ + "role:view" + ] + }, + "post": { + "operationId": "createRole", + "x-permission": "role:create", + "requestBody": { + "$ref": "#/components/requestBodies/RoleRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/RoleResponse" + } + }, + "x-permissions": [ + "role:create", + "role:manage" + ] + } + }, + "/roles/{id}": { + "patch": { + "operationId": "updateRole", + "x-permission": "role:update", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/RoleRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/RoleResponse" + } + }, + "x-permissions": [ + "role:update", + "role:manage" + ] + }, + "delete": { + "operationId": "deleteRole", + "x-permission": "role:delete", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permissions": [ + "role:delete", + "role:manage" + ] + } + }, + "/roles/{id}/data-scopes": { + "get": { + "operationId": "getRoleDataScopes", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "x-permission": "role:data-scope", + "x-permissions": [ + "role:data-scope" + ] + }, + "put": { + "operationId": "replaceRoleDataScopes", + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "x-permission": "role:data-scope", + "x-permissions": [ + "role:data-scope" + ] + } + }, + "/roles/{id}/permissions": { + "put": { + "operationId": "replaceRolePermissions", + "x-permission": "role:permission", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/RolePermissionRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/RoleResponse" + } + }, + "x-permissions": [ + "role:permission", + "role:manage" + ] + } + }, + "/search": { + "get": { + "operationId": "search", + "parameters": [ + { + "$ref": "#/components/parameters/Keyword" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/SearchResponse" + } + } + } + }, + "/system/menus": { + "get": { + "operationId": "listSystemMenus", + "x-permission": "menu:view", + "responses": { + "200": { + "$ref": "#/components/responses/MenuListResponse" + } + }, + "x-permissions": [ + "menu:view" + ] + }, + "post": { + "operationId": "createMenu", + "x-permission": "menu:create", + "requestBody": { + "$ref": "#/components/requestBodies/MenuRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/MenuResponse" + } + }, + "x-permissions": [ + "menu:create" + ] + } + }, + "/system/menus/{id}": { + "patch": { + "operationId": "updateMenu", + "x-permission": "menu:update", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/MenuRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/MenuResponse" + } + }, + "x-permissions": [ + "menu:update" + ] + }, + "delete": { + "operationId": "deleteMenu", + "x-permission": "menu:delete", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permissions": [ + "menu:delete" + ] + } + }, + "/system/menus/{id}/visible": { + "patch": { + "operationId": "updateMenuVisible", + "x-permission": "menu:visible", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/MenuVisibleRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/MenuResponse" + } + }, + "x-permissions": [ + "menu:visible" + ] + } + }, + "/system/menus/sort": { + "put": { + "operationId": "sortMenus", + "x-permission": "menu:sort", + "requestBody": { + "$ref": "#/components/requestBodies/MenuSortRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/MenuListResponse" + } + }, + "x-permissions": [ + "menu:sort" + ] + } + }, + "/users": { + "get": { + "operationId": "listUsers", + "x-permission": "user:view", + "parameters": [ + { + "$ref": "#/components/parameters/Page" + }, + { + "$ref": "#/components/parameters/PageSize" + }, + { + "$ref": "#/components/parameters/Keyword" + }, + { + "name": "role", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/Status" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/UserPageResponse" + } + }, + "x-permissions": [ + "user:view" + ] + }, + "post": { + "operationId": "createUser", + "x-permission": "user:create", + "requestBody": { + "$ref": "#/components/requestBodies/UserRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/CreateUserResponse" + } + }, + "x-permissions": [ + "user:create" + ] + } + }, + "/users/{id}": { + "get": { + "operationId": "getUser", + "x-permission": "user:view", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/UserResponse" + } + }, + "x-permissions": [ + "user:view" + ] + }, + "patch": { + "operationId": "updateUser", + "x-permission": "user:update", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/UserRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/UserResponse" + } + }, + "x-permissions": [ + "user:update" + ] + } + }, + "/users/{id}/reset-password": { + "post": { + "operationId": "resetUserPassword", + "x-permission": "user:reset-password", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/ResetPasswordResponse" + } + }, + "x-permissions": [ + "user:reset-password" + ] + } + }, + "/users/{id}/status": { + "patch": { + "operationId": "updateUserStatus", + "x-permission": "user:status", + "parameters": [ + { + "$ref": "#/components/parameters/Id" + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/StatusRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/UserResponse" + } + }, + "x-permissions": [ + "user:status" + ] + } + }, + "/users/batch/status": { + "post": { + "operationId": "batchUpdateUserStatus", + "x-permission": "user:status", + "requestBody": { + "$ref": "#/components/requestBodies/BatchStatusRequest" + }, + "responses": { + "200": { + "$ref": "#/components/responses/EmptyResponse" + } + }, + "x-permissions": [ + "user:status" + ] + } + }, + "/users/export": { + "get": { + "operationId": "exportUsers", + "x-permission": "user:export", + "responses": { + "200": { + "description": "CSV" + } + }, + "x-permissions": [ + "user:export" + ] + } } + }, + "components": { + "parameters": { + "AgencyId": { + "name": "agency_id", + "in": "query", + "schema": { + "type": "integer" + } + }, + "Id": { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + }, + "Keyword": { + "name": "keyword", + "in": "query", + "schema": { + "type": "string" + } + }, + "Page": { + "name": "page", + "in": "query", + "schema": { + "type": "integer", + "minimum": 1 + } + }, + "PageSize": { + "name": "page_size", + "in": "query", + "schema": { + "type": "integer", + "minimum": 1 + } + }, + "ParentBdUserId": { + "name": "parent_bd_user_id", + "in": "query", + "schema": { + "type": "integer" + } + }, + "ParentLeaderUserId": { + "name": "parent_leader_user_id", + "in": "query", + "schema": { + "type": "integer" + } + }, + "RegionId": { + "name": "region_id", + "in": "query", + "schema": { + "type": "integer" + } + }, + "Status": { + "name": "status", + "in": "query", + "schema": { + "type": "string" + } + } + }, + "requestBodies": { + "BatchStatusRequest": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ids", + "status" + ], + "properties": { + "ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "status": { + "type": "string" + } + } + } + } + } + }, + "ChangePasswordRequest": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "oldPassword", + "newPassword" + ], + "properties": { + "oldPassword": { + "type": "string" + }, + "newPassword": { + "type": "string" + } + } + } + } + } + }, + "LoginRequest": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "username", + "password" + ], + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + } + } + } + } + }, + "MenuRequest": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MenuInput" + } + } + } + }, + "MenuSortRequest": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "sort" + ], + "properties": { + "id": { + "type": "integer" + }, + "sort": { + "type": "integer" + } + } + } + } + } + } + } + } + }, + "MenuVisibleRequest": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "visible" + ], + "properties": { + "visible": { + "type": "boolean" + } + } + } + } + } + }, + "PermissionRequest": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionInput" + } + } + } + }, + "RolePermissionRequest": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "permissionIds" + ], + "properties": { + "permissionIds": { + "type": "array", + "items": { + "type": "integer" + } + } + } + } + } + } + }, + "RoleRequest": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleInput" + } + } + } + }, + "StatusRequest": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "status" + ], + "properties": { + "status": { + "type": "string" + } + } + } + } + } + }, + "UserRequest": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserInput" + } + } + } + } + }, + "responses": { + "AgencyPageResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseAgencyPage" + } + } + } + }, + "BDProfilePageResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseBDProfilePage" + } + } + } + }, + "CreateUserResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseCreateUserResult" + } + } + } + }, + "DashboardOverviewResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseDashboardOverview" + } + } + } + }, + "EmptyResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseEmpty" + } + } + } + }, + "HostProfilePageResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseHostProfilePage" + } + } + } + }, + "LogPageResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseLogPage" + } + } + } + }, + "MenuListResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseMenuList" + } + } + } + }, + "MenuResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseMenu" + } + } + } + }, + "NotificationListResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseNotificationList" + } + } + } + }, + "NotificationResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseNotification" + } + } + } + }, + "PermissionListResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponsePermissionList" + } + } + } + }, + "PermissionResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponsePermission" + } + } + } + }, + "ResetPasswordResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseResetPasswordResult" + } + } + } + }, + "RoleListResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseRoleList" + } + } + } + }, + "RoleResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseRole" + } + } + } + }, + "SearchResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseSearchList" + } + } + } + }, + "SessionResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseSession" + } + } + } + }, + "UserPageResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseUserPage" + } + } + } + }, + "UserResponse": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponseUser" + } + } + } + } + }, + "schemas": { + "ApiPageAgency": { + "type": "object", + "required": [ + "items", + "page", + "pageSize", + "total" + ], + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Agency" + } + }, + "page": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ApiPageBDProfile": { + "type": "object", + "required": [ + "items", + "page", + "pageSize", + "total" + ], + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BDProfile" + } + }, + "page": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ApiPageHostProfile": { + "type": "object", + "required": [ + "items", + "page", + "pageSize", + "total" + ], + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HostProfile" + } + }, + "page": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ApiPageLog": { + "type": "object", + "required": [ + "items", + "page", + "pageSize", + "total" + ], + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Log" + } + }, + "page": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ApiPageUser": { + "type": "object", + "required": [ + "items", + "page", + "pageSize", + "total" + ], + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AdminUser" + } + }, + "page": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "ApiResponseCreateUserResult": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/CreateUserResult" + } + } + } + ] + }, + "ApiResponseAgencyPage": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/ApiPageAgency" + } + } + } + ] + }, + "ApiResponseBDProfilePage": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/ApiPageBDProfile" + } + } + } + ] + }, + "ApiResponseDashboardOverview": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/DashboardOverview" + } + } + } + ] + }, + "ApiResponseEmpty": { + "$ref": "#/components/schemas/Envelope" + }, + "ApiResponseHostProfilePage": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/ApiPageHostProfile" + } + } + } + ] + }, + "ApiResponseLogPage": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/ApiPageLog" + } + } + } + ] + }, + "ApiResponseMenu": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Menu" + } + } + } + ] + }, + "ApiResponseMenuList": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Menu" + } + } + } + } + ] + }, + "ApiResponseNotification": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Notification" + } + } + } + ] + }, + "ApiResponseNotificationList": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/NotificationList" + } + } + } + ] + }, + "ApiResponsePermission": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Permission" + } + } + } + ] + }, + "ApiResponsePermissionList": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Permission" + } + } + } + } + ] + }, + "ApiResponseResetPasswordResult": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/ResetPasswordResult" + } + } + } + ] + }, + "ApiResponseRole": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Role" + } + } + } + ] + }, + "ApiResponseRoleList": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + } + } + } + } + ] + }, + "ApiResponseSearchList": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SearchResult" + } + } + } + } + ] + }, + "ApiResponseSession": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Session" + } + } + } + ] + }, + "ApiResponseUser": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/AdminUser" + } + } + } + ] + }, + "ApiResponseUserPage": { + "allOf": [ + { + "$ref": "#/components/schemas/Envelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/ApiPageUser" + } + } + } + ] + }, + "AdminUser": { + "type": "object", + "required": [ + "account", + "id", + "name", + "status" + ], + "properties": { + "account": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "lastLogin": { + "type": "string" + }, + "mfa": { + "type": "string" + }, + "mfaEnabled": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "role": { + "type": "string" + }, + "roleIds": { + "type": "array", + "items": { + "type": "integer" + } + }, + "status": { + "type": "string" + }, + "team": { + "type": "string" + } + } + }, + "Agency": { + "type": "object", + "required": [ + "agencyId" + ], + "properties": { + "agencyId": { + "type": "integer" + }, + "createdAtMs": { + "type": "integer" + }, + "createdByUserId": { + "type": "integer" + }, + "joinEnabled": { + "type": "boolean" + }, + "maxHosts": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "ownerUserId": { + "type": "integer" + }, + "parentBdUserId": { + "type": "integer" + }, + "regionId": { + "type": "integer" + }, + "status": { + "type": "string" + }, + "updatedAtMs": { + "type": "integer" + } + } + }, + "BDProfile": { + "type": "object", + "required": [ + "userId" + ], + "properties": { + "createdAtMs": { + "type": "integer" + }, + "createdByUserId": { + "type": "integer" + }, + "parentLeaderUserId": { + "type": "integer" + }, + "regionId": { + "type": "integer" + }, + "role": { + "type": "string" + }, + "status": { + "type": "string" + }, + "updatedAtMs": { + "type": "integer" + }, + "userId": { + "type": "integer" + } + } + }, + "CreateUserResult": { + "type": "object", + "properties": { + "initialPassword": { + "type": "string" + } + } + }, + "DashboardOverview": { + "type": "object", + "additionalProperties": true + }, + "Envelope": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "data": {}, + "message": { + "type": "string" + } + } + }, + "HostProfile": { + "type": "object", + "required": [ + "userId" + ], + "properties": { + "createdAtMs": { + "type": "integer" + }, + "currentAgencyId": { + "type": "integer" + }, + "currentMembershipId": { + "type": "integer" + }, + "firstBecameHostAtMs": { + "type": "integer" + }, + "regionId": { + "type": "integer" + }, + "source": { + "type": "string" + }, + "status": { + "type": "string" + }, + "updatedAtMs": { + "type": "integer" + }, + "userId": { + "type": "integer" + } + } + }, + "Log": { + "type": "object", + "additionalProperties": true + }, + "Menu": { + "type": "object", + "additionalProperties": true + }, + "MenuInput": { + "type": "object", + "required": [ + "code", + "label" + ], + "additionalProperties": true + }, + "Notification": { + "type": "object", + "additionalProperties": true + }, + "NotificationList": { + "type": "object", + "required": [ + "items", + "unread" + ], + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Notification" + } + }, + "unread": { + "type": "integer" + } + } + }, + "Permission": { + "type": "object", + "additionalProperties": true + }, + "PermissionInput": { + "type": "object", + "required": [ + "code", + "kind", + "name" + ], + "additionalProperties": true + }, + "ResetPasswordResult": { + "type": "object", + "properties": { + "initialPassword": { + "type": "string" + } + } + }, + "Role": { + "type": "object", + "additionalProperties": true + }, + "RoleInput": { + "type": "object", + "required": [ + "code", + "name" + ], + "additionalProperties": true + }, + "SearchResult": { + "type": "object", + "additionalProperties": true + }, + "Session": { + "type": "object", + "additionalProperties": true + }, + "UserInput": { + "type": "object", + "required": [ + "name" + ], + "additionalProperties": true + } + } + } } diff --git a/src/app/layout/Sidebar.jsx b/src/app/layout/Sidebar.jsx index 3d06017..5aa05c0 100644 --- a/src/app/layout/Sidebar.jsx +++ b/src/app/layout/Sidebar.jsx @@ -84,8 +84,9 @@ function NavGroup({ const Icon = item.icon; const children = item.children || []; const hasChildren = children.length > 0; - const isActive = Boolean(item.path && activePath.startsWith(item.path)); - const isChildActive = children.some((child) => child.path && activePath.startsWith(child.path)); + const activeChildPath = findBestActiveChildPath(activePath, children); + const isActive = isActiveRoute(activePath, item.path); + const isChildActive = Boolean(activeChildPath); const isOpen = isCollapsed ? isFlyoutOpen : isExpanded; const handleParentClick = () => { @@ -138,7 +139,7 @@ function NavGroup({ return (