- swaggo/swag 기반 전체 API 엔드포인트 Swagger 어노테이션 (59개) - /swagger/ 경로에 Swagger UI 제공 - 보스레이드 데디서버 관리 (등록, 하트비트, 슬롯 리셋) - 플레이어 레벨/경험치 시스템 및 스탯 성장 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4097 lines
137 KiB
JSON
4097 lines
137 KiB
JSON
{
|
|
"swagger": "2.0",
|
|
"info": {
|
|
"description": "멀티플레이어 보스 레이드 게임 플랫폼 백엔드 API",
|
|
"title": "One of the Plans API",
|
|
"contact": {},
|
|
"version": "1.0"
|
|
},
|
|
"host": "a301.api.tolelom.xyz",
|
|
"basePath": "/",
|
|
"paths": {
|
|
"/api/announcements/": {
|
|
"get": {
|
|
"description": "공지사항 목록을 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Announcements"
|
|
],
|
|
"summary": "공지사항 목록 조회",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"default": 0,
|
|
"description": "시작 위치",
|
|
"name": "offset",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"default": 20,
|
|
"description": "조회 수",
|
|
"name": "limit",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/docs.AnnouncementResponse"
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "새 공지사항을 생성합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Announcements"
|
|
],
|
|
"summary": "공지사항 생성 (관리자)",
|
|
"parameters": [
|
|
{
|
|
"description": "공지사항 내용",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.CreateAnnouncementRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.AnnouncementResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/announcements/{id}": {
|
|
"put": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "공지사항을 수정합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Announcements"
|
|
],
|
|
"summary": "공지사항 수정 (관리자)",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "공지사항 ID",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "수정할 내용",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.UpdateAnnouncementRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.AnnouncementResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "공지사항을 삭제합니다",
|
|
"tags": [
|
|
"Announcements"
|
|
],
|
|
"summary": "공지사항 삭제 (관리자)",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "공지사항 ID",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "No Content"
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/launch-ticket": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "게임 런처용 일회성 티켓을 발급합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "런처 티켓 발급",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.LaunchTicketResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/login": {
|
|
"post": {
|
|
"description": "사용자 인증 후 JWT 토큰을 발급합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "로그인",
|
|
"parameters": [
|
|
{
|
|
"description": "로그인 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.LoginRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.LoginResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/logout": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "현재 세션을 무효화합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "로그아웃",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.MessageResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/redeem-ticket": {
|
|
"post": {
|
|
"description": "일회성 티켓을 Access 토큰으로 교환합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "런처 티켓 교환",
|
|
"parameters": [
|
|
{
|
|
"description": "티켓",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RedeemTicketRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RedeemTicketResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/refresh": {
|
|
"post": {
|
|
"description": "Refresh 토큰으로 새 Access 토큰을 발급합니다 (쿠키 또는 body)",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "토큰 갱신",
|
|
"parameters": [
|
|
{
|
|
"description": "Refresh 토큰 (쿠키 우선)",
|
|
"name": "body",
|
|
"in": "body",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RefreshRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RefreshResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/register": {
|
|
"post": {
|
|
"description": "새로운 사용자 계정을 생성합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "회원가입",
|
|
"parameters": [
|
|
{
|
|
"description": "회원가입 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RegisterRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.MessageResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/ssafy/callback": {
|
|
"post": {
|
|
"description": "SSAFY 인가 코드를 교환하여 로그인합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "SSAFY OAuth 콜백",
|
|
"parameters": [
|
|
{
|
|
"description": "인가 코드",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.SSAFYCallbackRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.LoginResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/ssafy/login": {
|
|
"get": {
|
|
"description": "SSAFY OAuth 로그인 URL을 생성합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "SSAFY 로그인 URL",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.SSAFYLoginURLResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/bossraid/entry": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "게임 클라이언트에서 보스 레이드 입장을 요청합니다. 인증된 유저가 입장 목록에 포함되어야 합니다.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Boss Raid"
|
|
],
|
|
"summary": "보스 레이드 입장 요청",
|
|
"parameters": [
|
|
{
|
|
"description": "입장 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RequestEntryAuthRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RequestEntryResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/bossraid/my-entry-token": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "현재 유저의 대기 중인 입장 토큰을 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Boss Raid"
|
|
],
|
|
"summary": "내 입장 토큰 조회",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.MyEntryTokenResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/admin/mint": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "새 에셋을 발행합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain - Admin"
|
|
],
|
|
"summary": "에셋 발행 (관리자)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "발행 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.MintAssetRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/admin/reward": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "유저에게 토큰 및 에셋 보상을 지급합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain - Admin"
|
|
],
|
|
"summary": "보상 지급 (관리자)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "보상 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.GrantRewardRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/admin/template": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "새 에셋 템플릿을 등록합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain - Admin"
|
|
],
|
|
"summary": "템플릿 등록 (관리자)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "템플릿 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RegisterTemplateRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/asset/transfer": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "다른 유저에게 에셋을 전송합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain - Transactions"
|
|
],
|
|
"summary": "에셋 전송",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "전송 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.TransferAssetRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/asset/{id}": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "특정 에셋의 상세 정보를 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain"
|
|
],
|
|
"summary": "에셋 상세 조회",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "에셋 ID",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/assets": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "현재 유저의 블록체인 에셋 목록을 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain"
|
|
],
|
|
"summary": "에셋 목록 조회",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"default": 0,
|
|
"description": "시작 위치",
|
|
"name": "offset",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"default": 50,
|
|
"description": "조회 수",
|
|
"name": "limit",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/balance": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "현재 유저의 토큰 잔액을 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain"
|
|
],
|
|
"summary": "잔액 조회",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/inventory": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "현재 유저의 인벤토리를 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain"
|
|
],
|
|
"summary": "인벤토리 조회",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/inventory/equip": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "에셋을 장비 슬롯에 장착합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain - Transactions"
|
|
],
|
|
"summary": "아이템 장착",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "장착 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.EquipItemRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/inventory/unequip": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "에셋의 장비 슬롯 장착을 해제합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain - Transactions"
|
|
],
|
|
"summary": "아이템 장착 해제",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "해제 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.UnequipItemRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/market": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "마켓에 등록된 매물 목록을 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain"
|
|
],
|
|
"summary": "마켓 목록 조회",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"default": 0,
|
|
"description": "시작 위치",
|
|
"name": "offset",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"default": 50,
|
|
"description": "조회 수",
|
|
"name": "limit",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/market/buy": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "마켓에서 매물을 구매합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain - Transactions"
|
|
],
|
|
"summary": "마켓 구매",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "구매 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.BuyFromMarketRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/market/cancel": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "마켓에 등록한 매물을 취소합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain - Transactions"
|
|
],
|
|
"summary": "마켓 등록 취소",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "취소 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.CancelListingRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/market/list": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "에셋을 마켓에 등록합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain - Transactions"
|
|
],
|
|
"summary": "마켓 등록",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "등록 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ListOnMarketRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/market/{id}": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "특정 마켓 매물의 상세 정보를 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain"
|
|
],
|
|
"summary": "마켓 매물 상세 조회",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "매물 ID",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/transfer": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "다른 유저에게 토큰을 전송합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain - Transactions"
|
|
],
|
|
"summary": "토큰 전송",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "전송 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.TransferRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/chain/wallet": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "현재 유저의 블록체인 지갑 정보를 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Chain"
|
|
],
|
|
"summary": "지갑 정보 조회",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.WalletInfoResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/download/file": {
|
|
"get": {
|
|
"description": "게임 zip 파일을 다운로드합니다",
|
|
"produces": [
|
|
"application/octet-stream"
|
|
],
|
|
"tags": [
|
|
"Download"
|
|
],
|
|
"summary": "게임 파일 다운로드",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "file"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/download/info": {
|
|
"get": {
|
|
"description": "게임 및 런처 다운로드 정보를 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Download"
|
|
],
|
|
"summary": "다운로드 정보 조회",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.DownloadInfoResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/download/launcher": {
|
|
"get": {
|
|
"description": "런처 실행 파일을 다운로드합니다",
|
|
"produces": [
|
|
"application/octet-stream"
|
|
],
|
|
"tags": [
|
|
"Download"
|
|
],
|
|
"summary": "런처 다운로드",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "file"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/download/upload/game": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "게임 zip 파일을 스트리밍 업로드합니다. Body는 raw binary입니다.",
|
|
"consumes": [
|
|
"application/octet-stream"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Download"
|
|
],
|
|
"summary": "게임 파일 업로드 (관리자)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"default": "game.zip",
|
|
"description": "파일명",
|
|
"name": "filename",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.DownloadInfoResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/download/upload/launcher": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "런처 실행 파일을 스트리밍 업로드합니다. Body는 raw binary입니다.",
|
|
"consumes": [
|
|
"application/octet-stream"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Download"
|
|
],
|
|
"summary": "런처 업로드 (관리자)",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.DownloadInfoResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/auth/verify": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "JWT 토큰을 검증하고 username을 반환합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Auth"
|
|
],
|
|
"summary": "토큰 검증 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"description": "검증할 토큰",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.VerifyTokenRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.VerifyTokenResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/bossraid/complete": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "보스 처치 시 데디케이티드 서버에서 호출합니다. 보상을 분배합니다.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Boss Raid"
|
|
],
|
|
"summary": "레이드 완료 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "완료 정보 및 보상",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.CompleteRaidRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.CompleteRaidResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/bossraid/entry": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "MMO 서버에서 파티의 보스 레이드 입장을 요청합니다. 모든 플레이어의 entry token을 반환합니다.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Boss Raid"
|
|
],
|
|
"summary": "보스 레이드 입장 요청 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"description": "입장 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RequestEntryRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.InternalRequestEntryResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/bossraid/fail": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "타임아웃 또는 전멸 시 데디케이티드 서버에서 호출합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Boss Raid"
|
|
],
|
|
"summary": "레이드 실패 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"description": "세션 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.SessionNameRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RoomStatusResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/bossraid/heartbeat": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "데디케이티드 서버 컨테이너가 주기적으로 호출합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Boss Raid"
|
|
],
|
|
"summary": "하트비트 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"description": "인스턴스 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.HeartbeatRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.StatusResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/bossraid/register": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "데디케이티드 서버 컨테이너가 시작 시 호출합니다. 룸 슬롯을 자동 할당합니다.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Boss Raid"
|
|
],
|
|
"summary": "데디케이티드 서버 등록 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"description": "서버 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RegisterServerRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RegisterServerResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"409": {
|
|
"description": "Conflict",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/bossraid/reset-room": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "레이드 종료 후 슬롯을 idle 상태로 되돌립니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Boss Raid"
|
|
],
|
|
"summary": "룸 슬롯 리셋 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"description": "세션 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ResetRoomRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ResetRoomResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/bossraid/room": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "sessionName으로 보스 레이드 방 정보를 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Boss Raid"
|
|
],
|
|
"summary": "방 정보 조회 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "세션 이름",
|
|
"name": "sessionName",
|
|
"in": "query",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/bossraid.BossRoom"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/bossraid/server-status": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "데디케이티드 서버의 정보와 룸 슬롯 목록을 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Boss Raid"
|
|
],
|
|
"summary": "서버 상태 조회 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "서버 이름",
|
|
"name": "serverName",
|
|
"in": "query",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/bossraid/start": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "Fusion 세션이 시작될 때 데디케이티드 서버에서 호출합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Boss Raid"
|
|
],
|
|
"summary": "레이드 시작 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"description": "세션 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.SessionNameRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.RoomStatusResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/bossraid/validate-entry": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "데디케이티드 서버에서 플레이어의 입장 토큰을 검증합니다. 일회성 소모.",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Boss Raid"
|
|
],
|
|
"summary": "입장 토큰 검증 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"description": "토큰",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ValidateEntryTokenRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ValidateEntryTokenResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/chain/assets": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "username으로 에셋 목록을 조회합니다 (게임 서버용)",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Chain"
|
|
],
|
|
"summary": "에셋 목록 조회 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "유저명",
|
|
"name": "username",
|
|
"in": "query",
|
|
"required": true
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"default": 0,
|
|
"description": "시작 위치",
|
|
"name": "offset",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"default": 50,
|
|
"description": "조회 수",
|
|
"name": "limit",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/chain/balance": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "username으로 잔액을 조회합니다 (게임 서버용)",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Chain"
|
|
],
|
|
"summary": "잔액 조회 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "유저명",
|
|
"name": "username",
|
|
"in": "query",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/chain/inventory": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "username으로 인벤토리를 조회합니다 (게임 서버용)",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Chain"
|
|
],
|
|
"summary": "인벤토리 조회 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "유저명",
|
|
"name": "username",
|
|
"in": "query",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/chain/mint": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "username으로 에셋을 발행합니다 (게임 서버용)",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Chain"
|
|
],
|
|
"summary": "에셋 발행 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "발행 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.InternalMintAssetRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/chain/reward": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "username으로 유저에게 보상을 지급합니다 (게임 서버용)",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Chain"
|
|
],
|
|
"summary": "보상 지급 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "멱등성 키",
|
|
"name": "Idempotency-Key",
|
|
"in": "header",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "보상 정보",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.InternalGrantRewardRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Created",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/player/profile": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "username으로 플레이어 프로필을 조회합니다 (게임 서버용)",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Player"
|
|
],
|
|
"summary": "프로필 조회 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "유저명",
|
|
"name": "username",
|
|
"in": "query",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.PlayerProfileResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/internal/player/save": {
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"ApiKeyAuth": []
|
|
}
|
|
],
|
|
"description": "username으로 게임 데이터를 저장합니다 (게임 서버용)",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Internal - Player"
|
|
],
|
|
"summary": "게임 데이터 저장 (내부 API)",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "유저명",
|
|
"name": "username",
|
|
"in": "query",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "게임 데이터",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.GameDataRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.MessageResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/player/profile": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "현재 유저의 플레이어 프로필을 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Player"
|
|
],
|
|
"summary": "내 프로필 조회",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.PlayerProfileResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Not Found",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "현재 유저의 닉네임을 수정합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Player"
|
|
],
|
|
"summary": "프로필 수정",
|
|
"parameters": [
|
|
{
|
|
"description": "수정할 프로필",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.UpdateProfileRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/player.PlayerProfile"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "모든 유저 목록을 조회합니다",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Users"
|
|
],
|
|
"summary": "전체 유저 목록 (관리자)",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"default": 0,
|
|
"description": "시작 위치",
|
|
"name": "offset",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"default": 50,
|
|
"description": "조회 수",
|
|
"name": "limit",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/docs.UserResponse"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/{id}": {
|
|
"delete": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "유저를 삭제합니다",
|
|
"tags": [
|
|
"Users"
|
|
],
|
|
"summary": "유저 삭제 (관리자)",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "유저 ID",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "No Content"
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/{id}/role": {
|
|
"patch": {
|
|
"security": [
|
|
{
|
|
"BearerAuth": []
|
|
}
|
|
],
|
|
"description": "유저의 역할을 admin 또는 user로 변경합니다",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"Users"
|
|
],
|
|
"summary": "유저 권한 변경 (관리자)",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "유저 ID",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
},
|
|
{
|
|
"description": "변경할 역할",
|
|
"name": "body",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.UpdateRoleRequest"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.MessageResponse"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Bad Request",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"schema": {
|
|
"$ref": "#/definitions/docs.ErrorResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"definitions": {
|
|
"bossraid.BossRoom": {
|
|
"type": "object",
|
|
"properties": {
|
|
"bossId": {
|
|
"type": "integer"
|
|
},
|
|
"completedAt": {
|
|
"type": "string"
|
|
},
|
|
"createdAt": {
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"maxPlayers": {
|
|
"type": "integer"
|
|
},
|
|
"players": {
|
|
"description": "Players is stored as a JSON text column for simplicity.\nTODO: For better query performance, consider migrating to a junction table\n(boss_room_players with room_id + username columns).",
|
|
"type": "string"
|
|
},
|
|
"sessionName": {
|
|
"type": "string"
|
|
},
|
|
"startedAt": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"$ref": "#/definitions/bossraid.RoomStatus"
|
|
},
|
|
"updatedAt": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"bossraid.RoomStatus": {
|
|
"type": "string",
|
|
"enum": [
|
|
"waiting",
|
|
"in_progress",
|
|
"completed",
|
|
"failed"
|
|
],
|
|
"x-enum-varnames": [
|
|
"StatusWaiting",
|
|
"StatusInProgress",
|
|
"StatusCompleted",
|
|
"StatusFailed"
|
|
]
|
|
},
|
|
"docs.AnnouncementResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"content": {
|
|
"type": "string",
|
|
"example": "3월 16일 서버 점검이 예정되어 있습니다."
|
|
},
|
|
"createdAt": {
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"type": "integer",
|
|
"example": 1
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"example": "서버 점검 안내"
|
|
},
|
|
"updatedAt": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"docs.BuyFromMarketRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"listingId": {
|
|
"type": "string",
|
|
"example": "listing_001"
|
|
}
|
|
}
|
|
},
|
|
"docs.CancelListingRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"listingId": {
|
|
"type": "string",
|
|
"example": "listing_001"
|
|
}
|
|
}
|
|
},
|
|
"docs.CompleteRaidRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"rewards": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/docs.PlayerReward"
|
|
}
|
|
},
|
|
"sessionName": {
|
|
"type": "string",
|
|
"example": "Dedi1_Room0"
|
|
}
|
|
}
|
|
},
|
|
"docs.CompleteRaidResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"rewardResults": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/docs.RewardResult"
|
|
}
|
|
},
|
|
"roomId": {
|
|
"type": "integer",
|
|
"example": 1
|
|
},
|
|
"sessionName": {
|
|
"type": "string",
|
|
"example": "Dedi1_Room0"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"example": "completed"
|
|
}
|
|
}
|
|
},
|
|
"docs.CreateAnnouncementRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"content": {
|
|
"type": "string",
|
|
"example": "3월 16일 서버 점검이 예정되어 있습니다."
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"example": "서버 점검 안내"
|
|
}
|
|
}
|
|
},
|
|
"docs.DownloadInfoResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"createdAt": {
|
|
"type": "string"
|
|
},
|
|
"fileHash": {
|
|
"type": "string",
|
|
"example": "a1b2c3d4e5f6..."
|
|
},
|
|
"fileName": {
|
|
"type": "string",
|
|
"example": "A301_v1.0.zip"
|
|
},
|
|
"fileSize": {
|
|
"type": "string",
|
|
"example": "1.5 GB"
|
|
},
|
|
"id": {
|
|
"type": "integer",
|
|
"example": 1
|
|
},
|
|
"launcherSize": {
|
|
"type": "string",
|
|
"example": "25.3 MB"
|
|
},
|
|
"launcherUrl": {
|
|
"type": "string",
|
|
"example": "https://a301.api.tolelom.xyz/api/download/launcher"
|
|
},
|
|
"updatedAt": {
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"type": "string",
|
|
"example": "https://a301.api.tolelom.xyz/api/download/file"
|
|
},
|
|
"version": {
|
|
"type": "string",
|
|
"example": "1.0.0"
|
|
}
|
|
}
|
|
},
|
|
"docs.EquipItemRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"assetId": {
|
|
"type": "string",
|
|
"example": "asset_001"
|
|
},
|
|
"slot": {
|
|
"type": "string",
|
|
"example": "weapon"
|
|
}
|
|
}
|
|
},
|
|
"docs.ErrorResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {
|
|
"type": "string",
|
|
"example": "오류 메시지"
|
|
}
|
|
}
|
|
},
|
|
"docs.GameDataRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"attackPower": {
|
|
"type": "number",
|
|
"example": 25
|
|
},
|
|
"attackRange": {
|
|
"type": "number",
|
|
"example": 3
|
|
},
|
|
"experience": {
|
|
"type": "integer",
|
|
"example": 1200
|
|
},
|
|
"lastPosX": {
|
|
"type": "number",
|
|
"example": 10.5
|
|
},
|
|
"lastPosY": {
|
|
"type": "number",
|
|
"example": 0
|
|
},
|
|
"lastPosZ": {
|
|
"type": "number",
|
|
"example": 20.3
|
|
},
|
|
"lastRotY": {
|
|
"type": "number",
|
|
"example": 90
|
|
},
|
|
"level": {
|
|
"type": "integer",
|
|
"example": 5
|
|
},
|
|
"maxHp": {
|
|
"type": "number",
|
|
"example": 150
|
|
},
|
|
"maxMp": {
|
|
"type": "number",
|
|
"example": 75
|
|
},
|
|
"sprintMultiplier": {
|
|
"type": "number",
|
|
"example": 1.8
|
|
},
|
|
"totalPlayTime": {
|
|
"type": "integer",
|
|
"example": 3600
|
|
}
|
|
}
|
|
},
|
|
"docs.GrantRewardRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"assets": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/docs.MintAssetPayload"
|
|
}
|
|
},
|
|
"recipientPubKey": {
|
|
"type": "string",
|
|
"example": "abcdef012345..."
|
|
},
|
|
"tokenAmount": {
|
|
"type": "integer",
|
|
"example": 1000
|
|
}
|
|
}
|
|
},
|
|
"docs.HeartbeatRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"instanceId": {
|
|
"type": "string",
|
|
"example": "container_abc"
|
|
}
|
|
}
|
|
},
|
|
"docs.InternalGrantRewardRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"assets": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/docs.MintAssetPayload"
|
|
}
|
|
},
|
|
"tokenAmount": {
|
|
"type": "integer",
|
|
"example": 1000
|
|
},
|
|
"username": {
|
|
"type": "string",
|
|
"example": "player1"
|
|
}
|
|
}
|
|
},
|
|
"docs.InternalMintAssetRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"properties": {
|
|
"type": "object",
|
|
"additionalProperties": {}
|
|
},
|
|
"templateId": {
|
|
"type": "string",
|
|
"example": "sword_template"
|
|
},
|
|
"username": {
|
|
"type": "string",
|
|
"example": "player1"
|
|
}
|
|
}
|
|
},
|
|
"docs.InternalRequestEntryResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"bossId": {
|
|
"type": "integer",
|
|
"example": 1
|
|
},
|
|
"players": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"roomId": {
|
|
"type": "integer",
|
|
"example": 1
|
|
},
|
|
"sessionName": {
|
|
"type": "string",
|
|
"example": "Dedi1_Room0"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"example": "waiting"
|
|
},
|
|
"tokens": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"docs.LaunchTicketResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"ticket": {
|
|
"type": "string",
|
|
"example": "ticket_abc123"
|
|
}
|
|
}
|
|
},
|
|
"docs.ListOnMarketRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"assetId": {
|
|
"type": "string",
|
|
"example": "asset_001"
|
|
},
|
|
"price": {
|
|
"type": "integer",
|
|
"example": 500
|
|
}
|
|
}
|
|
},
|
|
"docs.LoginRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"password": {
|
|
"type": "string",
|
|
"example": "mypassword"
|
|
},
|
|
"username": {
|
|
"type": "string",
|
|
"example": "player1"
|
|
}
|
|
}
|
|
},
|
|
"docs.LoginResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"role": {
|
|
"type": "string",
|
|
"example": "user"
|
|
},
|
|
"token": {
|
|
"type": "string",
|
|
"example": "eyJhbGciOiJIUzI1NiIs..."
|
|
},
|
|
"username": {
|
|
"type": "string",
|
|
"example": "player1"
|
|
}
|
|
}
|
|
},
|
|
"docs.MessageResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": {
|
|
"type": "string",
|
|
"example": "성공"
|
|
}
|
|
}
|
|
},
|
|
"docs.MintAssetPayload": {
|
|
"type": "object",
|
|
"properties": {
|
|
"owner": {
|
|
"type": "string",
|
|
"example": "abcdef012345..."
|
|
},
|
|
"properties": {
|
|
"type": "object",
|
|
"additionalProperties": {}
|
|
},
|
|
"template_id": {
|
|
"type": "string",
|
|
"example": "sword_template"
|
|
}
|
|
}
|
|
},
|
|
"docs.MintAssetRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"ownerPubKey": {
|
|
"type": "string",
|
|
"example": "abcdef012345..."
|
|
},
|
|
"properties": {
|
|
"type": "object",
|
|
"additionalProperties": {}
|
|
},
|
|
"templateId": {
|
|
"type": "string",
|
|
"example": "sword_template"
|
|
}
|
|
}
|
|
},
|
|
"docs.MyEntryTokenResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"entryToken": {
|
|
"type": "string",
|
|
"example": "token_abc"
|
|
},
|
|
"sessionName": {
|
|
"type": "string",
|
|
"example": "Dedi1_Room0"
|
|
}
|
|
}
|
|
},
|
|
"docs.PlayerProfileResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"attackPower": {
|
|
"type": "number",
|
|
"example": 25
|
|
},
|
|
"attackRange": {
|
|
"type": "number",
|
|
"example": 3
|
|
},
|
|
"createdAt": {
|
|
"type": "string"
|
|
},
|
|
"experience": {
|
|
"type": "integer",
|
|
"example": 1200
|
|
},
|
|
"id": {
|
|
"type": "integer",
|
|
"example": 1
|
|
},
|
|
"lastPosX": {
|
|
"type": "number",
|
|
"example": 10.5
|
|
},
|
|
"lastPosY": {
|
|
"type": "number",
|
|
"example": 0
|
|
},
|
|
"lastPosZ": {
|
|
"type": "number",
|
|
"example": 20.3
|
|
},
|
|
"lastRotY": {
|
|
"type": "number",
|
|
"example": 90
|
|
},
|
|
"level": {
|
|
"type": "integer",
|
|
"example": 5
|
|
},
|
|
"maxHp": {
|
|
"type": "number",
|
|
"example": 150
|
|
},
|
|
"maxMp": {
|
|
"type": "number",
|
|
"example": 75
|
|
},
|
|
"nextExp": {
|
|
"type": "integer",
|
|
"example": 2000
|
|
},
|
|
"nickname": {
|
|
"type": "string",
|
|
"example": "용사"
|
|
},
|
|
"sprintMultiplier": {
|
|
"type": "number",
|
|
"example": 1.8
|
|
},
|
|
"totalPlayTime": {
|
|
"type": "integer",
|
|
"example": 3600
|
|
},
|
|
"updatedAt": {
|
|
"type": "string"
|
|
},
|
|
"userId": {
|
|
"type": "integer",
|
|
"example": 1
|
|
}
|
|
}
|
|
},
|
|
"docs.PlayerReward": {
|
|
"type": "object",
|
|
"properties": {
|
|
"assets": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/docs.MintAssetPayload"
|
|
}
|
|
},
|
|
"experience": {
|
|
"type": "integer",
|
|
"example": 500
|
|
},
|
|
"tokenAmount": {
|
|
"type": "integer",
|
|
"example": 100
|
|
},
|
|
"username": {
|
|
"type": "string",
|
|
"example": "player1"
|
|
}
|
|
}
|
|
},
|
|
"docs.RedeemTicketRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"ticket": {
|
|
"type": "string",
|
|
"example": "ticket_abc123"
|
|
}
|
|
}
|
|
},
|
|
"docs.RedeemTicketResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"token": {
|
|
"type": "string",
|
|
"example": "eyJhbGciOiJIUzI1NiIs..."
|
|
}
|
|
}
|
|
},
|
|
"docs.RefreshRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"refreshToken": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"docs.RefreshResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"token": {
|
|
"type": "string",
|
|
"example": "eyJhbGciOiJIUzI1NiIs..."
|
|
}
|
|
}
|
|
},
|
|
"docs.RegisterRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"password": {
|
|
"type": "string",
|
|
"example": "mypassword"
|
|
},
|
|
"username": {
|
|
"type": "string",
|
|
"example": "player1"
|
|
}
|
|
}
|
|
},
|
|
"docs.RegisterServerRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"instanceId": {
|
|
"type": "string",
|
|
"example": "container_abc"
|
|
},
|
|
"maxRooms": {
|
|
"type": "integer",
|
|
"example": 10
|
|
},
|
|
"serverName": {
|
|
"type": "string",
|
|
"example": "Dedi1"
|
|
}
|
|
}
|
|
},
|
|
"docs.RegisterServerResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"instanceId": {
|
|
"type": "string",
|
|
"example": "container_abc"
|
|
},
|
|
"sessionName": {
|
|
"type": "string",
|
|
"example": "Dedi1_Room0"
|
|
}
|
|
}
|
|
},
|
|
"docs.RegisterTemplateRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"example": "sword_template"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"example": "Sword"
|
|
},
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {}
|
|
},
|
|
"tradeable": {
|
|
"type": "boolean",
|
|
"example": true
|
|
}
|
|
}
|
|
},
|
|
"docs.RequestEntryAuthRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"bossId": {
|
|
"type": "integer",
|
|
"example": 1
|
|
},
|
|
"usernames": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"docs.RequestEntryRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"bossId": {
|
|
"type": "integer",
|
|
"example": 1
|
|
},
|
|
"usernames": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"example": [
|
|
"player1",
|
|
"player2"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"docs.RequestEntryResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"bossId": {
|
|
"type": "integer",
|
|
"example": 1
|
|
},
|
|
"entryToken": {
|
|
"type": "string",
|
|
"example": "token_abc"
|
|
},
|
|
"players": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"roomId": {
|
|
"type": "integer",
|
|
"example": 1
|
|
},
|
|
"sessionName": {
|
|
"type": "string",
|
|
"example": "Dedi1_Room0"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"example": "waiting"
|
|
}
|
|
}
|
|
},
|
|
"docs.ResetRoomRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"sessionName": {
|
|
"type": "string",
|
|
"example": "Dedi1_Room0"
|
|
}
|
|
}
|
|
},
|
|
"docs.ResetRoomResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"sessionName": {
|
|
"type": "string",
|
|
"example": "Dedi1_Room0"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"example": "ok"
|
|
}
|
|
}
|
|
},
|
|
"docs.RewardResult": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {
|
|
"type": "string"
|
|
},
|
|
"success": {
|
|
"type": "boolean",
|
|
"example": true
|
|
},
|
|
"username": {
|
|
"type": "string",
|
|
"example": "player1"
|
|
}
|
|
}
|
|
},
|
|
"docs.RoomStatusResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"roomId": {
|
|
"type": "integer",
|
|
"example": 1
|
|
},
|
|
"sessionName": {
|
|
"type": "string",
|
|
"example": "Dedi1_Room0"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"example": "in_progress"
|
|
}
|
|
}
|
|
},
|
|
"docs.SSAFYCallbackRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"code": {
|
|
"type": "string",
|
|
"example": "auth_code_123"
|
|
},
|
|
"state": {
|
|
"type": "string",
|
|
"example": "random_state_string"
|
|
}
|
|
}
|
|
},
|
|
"docs.SSAFYLoginURLResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"url": {
|
|
"type": "string",
|
|
"example": "https://edu.ssafy.com/oauth/authorize?..."
|
|
}
|
|
}
|
|
},
|
|
"docs.SessionNameRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"sessionName": {
|
|
"type": "string",
|
|
"example": "Dedi1_Room0"
|
|
}
|
|
}
|
|
},
|
|
"docs.StatusResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"example": "ok"
|
|
}
|
|
}
|
|
},
|
|
"docs.TransferAssetRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"assetId": {
|
|
"type": "string",
|
|
"example": "asset_001"
|
|
},
|
|
"to": {
|
|
"type": "string",
|
|
"example": "1a2b3c4d5e6f..."
|
|
}
|
|
}
|
|
},
|
|
"docs.TransferRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"amount": {
|
|
"type": "integer",
|
|
"example": 100
|
|
},
|
|
"to": {
|
|
"type": "string",
|
|
"example": "1a2b3c4d5e6f..."
|
|
}
|
|
}
|
|
},
|
|
"docs.UnequipItemRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"assetId": {
|
|
"type": "string",
|
|
"example": "asset_001"
|
|
}
|
|
}
|
|
},
|
|
"docs.UpdateAnnouncementRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"content": {
|
|
"type": "string",
|
|
"example": "수정된 내용"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"example": "수정된 제목"
|
|
}
|
|
}
|
|
},
|
|
"docs.UpdateProfileRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"nickname": {
|
|
"type": "string",
|
|
"example": "용사"
|
|
}
|
|
}
|
|
},
|
|
"docs.UpdateRoleRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"role": {
|
|
"type": "string",
|
|
"example": "admin"
|
|
}
|
|
}
|
|
},
|
|
"docs.UserResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"createdAt": {
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"type": "integer",
|
|
"example": 1
|
|
},
|
|
"role": {
|
|
"type": "string",
|
|
"example": "user"
|
|
},
|
|
"ssafyId": {
|
|
"type": "string",
|
|
"example": "ssafy_123"
|
|
},
|
|
"updatedAt": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string",
|
|
"example": "player1"
|
|
}
|
|
}
|
|
},
|
|
"docs.ValidateEntryTokenRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"entryToken": {
|
|
"type": "string",
|
|
"example": "token_abc"
|
|
}
|
|
}
|
|
},
|
|
"docs.ValidateEntryTokenResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"sessionName": {
|
|
"type": "string",
|
|
"example": "Dedi1_Room0"
|
|
},
|
|
"username": {
|
|
"type": "string",
|
|
"example": "player1"
|
|
},
|
|
"valid": {
|
|
"type": "boolean",
|
|
"example": true
|
|
}
|
|
}
|
|
},
|
|
"docs.VerifyTokenRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"token": {
|
|
"type": "string",
|
|
"example": "eyJhbGciOiJIUzI1NiIs..."
|
|
}
|
|
}
|
|
},
|
|
"docs.VerifyTokenResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"username": {
|
|
"type": "string",
|
|
"example": "player1"
|
|
}
|
|
}
|
|
},
|
|
"docs.WalletInfoResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string",
|
|
"example": "1a2b3c4d5e6f..."
|
|
},
|
|
"pubKeyHex": {
|
|
"type": "string",
|
|
"example": "abcdef012345..."
|
|
}
|
|
}
|
|
},
|
|
"player.PlayerProfile": {
|
|
"type": "object",
|
|
"properties": {
|
|
"attackPower": {
|
|
"type": "number"
|
|
},
|
|
"attackRange": {
|
|
"type": "number"
|
|
},
|
|
"createdAt": {
|
|
"type": "string"
|
|
},
|
|
"experience": {
|
|
"type": "integer"
|
|
},
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"lastPosX": {
|
|
"description": "마지막 위치",
|
|
"type": "number"
|
|
},
|
|
"lastPosY": {
|
|
"type": "number"
|
|
},
|
|
"lastPosZ": {
|
|
"type": "number"
|
|
},
|
|
"lastRotY": {
|
|
"type": "number"
|
|
},
|
|
"level": {
|
|
"description": "레벨 \u0026 경험치",
|
|
"type": "integer"
|
|
},
|
|
"maxHp": {
|
|
"description": "전투 스탯",
|
|
"type": "number"
|
|
},
|
|
"maxMp": {
|
|
"type": "number"
|
|
},
|
|
"nickname": {
|
|
"type": "string"
|
|
},
|
|
"sprintMultiplier": {
|
|
"type": "number"
|
|
},
|
|
"totalPlayTime": {
|
|
"description": "플레이 시간 (초 단위)",
|
|
"type": "integer"
|
|
},
|
|
"updatedAt": {
|
|
"type": "string"
|
|
},
|
|
"userId": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"securityDefinitions": {
|
|
"ApiKeyAuth": {
|
|
"description": "내부 API 키 (게임 서버 ↔ API 서버 통신용)",
|
|
"type": "apiKey",
|
|
"name": "X-API-Key",
|
|
"in": "header"
|
|
},
|
|
"BearerAuth": {
|
|
"description": "JWT Bearer 토큰 (예: Bearer eyJhbGci...)",
|
|
"type": "apiKey",
|
|
"name": "Authorization",
|
|
"in": "header"
|
|
}
|
|
}
|
|
} |