Files
a301_server/docs/swagger.yaml
tolelom befea9dd68
Some checks failed
Server CI/CD / lint-and-build (push) Failing after 12m3s
Server CI/CD / deploy (push) Has been cancelled
feat: Swagger API 문서 추가 + 보스레이드/플레이어 레벨 시스템
- swaggo/swag 기반 전체 API 엔드포인트 Swagger 어노테이션 (59개)
- /swagger/ 경로에 Swagger UI 제공
- 보스레이드 데디서버 관리 (등록, 하트비트, 슬롯 리셋)
- 플레이어 레벨/경험치 시스템 및 스탯 성장

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 17:51:37 +09:00

2687 lines
67 KiB
YAML

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