{ "openapi": "3.1.0", "info": { "title": "AI 캐릭터 관리자 API", "version": "2.0.0", "description": "클라이언트 개발용 정식 계약. 신규 관리자 endpoint와 path target을 사용하되 JSON 필드명, 타입, optional/nullable, 기본값과 성공 data 형태는 레거시 API를 유지한다. path로 이동한 ID만 body에서 제거한다." }, "servers": [{"url": "/", "description": "현재 호스트"}], "security": [{"bearerAuth": []}], "tags": [ {"name": "Character", "description": "AI 캐릭터 조회·생성·수정"}, {"name": "AudioContent", "description": "오디오 콘텐츠 테마·조회·생성·수정"}, {"name": "Series", "description": "시리즈와 연결 콘텐츠 관리"}, {"name": "Community", "description": "커뮤니티 게시글 관리"}, {"name": "FanTalk", "description": "FanTalk 관리자 목록과 creator reply"} ], "paths": { "/api/v2/admin/ai-characters": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}], "get": { "tags": ["Character"], "summary": "AI 캐릭터 목록/검색", "operationId": "listAiCharacters", "x-implementation-status": "implemented-contract-alignment-required", "x-legacy-sources": ["AdminChatCharacterController.getCharacterList", "AdminChatCharacterController.searchCharacters", "ChatCharacterListPageResponse", "ChatCharacterSearchListPageResponse"], "parameters": [ {"name": "searchTerm", "in": "query", "required": false, "description": "생략하면 활성 목록, 지정하면 레거시 검색을 수행한다.", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/Page"}, {"$ref": "#/components/parameters/Size"} ], "responses": { "200": {"$ref": "#/components/responses/CharacterListSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "500": {"$ref": "#/components/responses/InternalServerError"} } }, "post": { "tags": ["Character"], "summary": "AI 캐릭터 생성", "operationId": "createAiCharacter", "x-implementation-status": "implemented-contract-alignment-required", "x-legacy-sources": ["AdminChatCharacterController.registerCharacter", "ChatCharacterRegisterRequest"], "requestBody": {"$ref": "#/components/requestBodies/CharacterCreateMultipart"}, "responses": { "200": {"$ref": "#/components/responses/NullSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "415": {"$ref": "#/components/responses/UnsupportedMediaType"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}], "get": { "tags": ["Character"], "summary": "AI 캐릭터 상세", "operationId": "getAiCharacter", "x-implementation-status": "implemented-contract-alignment-required", "x-legacy-sources": ["AdminChatCharacterController.getCharacterDetail", "ChatCharacterDetailResponse"], "responses": { "200": {"$ref": "#/components/responses/CharacterDetailSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "500": {"$ref": "#/components/responses/InternalServerError"} } }, "put": { "tags": ["Character"], "summary": "AI 캐릭터 수정/soft delete", "description": "레거시 ChatCharacterUpdateRequest의 id만 path characterId로 이동한다.", "operationId": "updateAiCharacter", "x-implementation-status": "implemented-contract-alignment-required", "x-legacy-sources": ["AdminChatCharacterController.updateCharacter", "ChatCharacterUpdateRequest"], "requestBody": {"$ref": "#/components/requestBodies/CharacterUpdateMultipart"}, "responses": { "200": {"$ref": "#/components/responses/NullSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "415": {"$ref": "#/components/responses/UnsupportedMediaType"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/audio-content-themes": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}], "get": { "tags": ["AudioContent"], "summary": "활성 오디오 콘텐츠 테마 목록", "operationId": "listAiCharacterAudioContentThemes", "x-implementation-status": "implemented-contract-alignment-required", "x-legacy-sources": ["GetAudioContentThemeResponse"], "responses": { "200": {"$ref": "#/components/responses/AudioThemeListSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}/audio-contents": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}], "get": { "tags": ["AudioContent"], "summary": "오디오 콘텐츠 목록/검색", "operationId": "listAiCharacterAudioContents", "x-implementation-status": "implemented-contract-alignment-required", "x-legacy-sources": ["CreatorAdminContentController.getAudioContentList", "CreatorAdminContentController.searchAudioContent", "GetCreatorAdminContentListResponse"], "parameters": [ {"name": "search_word", "in": "query", "required": false, "description": "지정하면 레거시 검색을 수행하며 2자 이상이어야 한다.", "schema": {"type": "string"}}, {"$ref": "#/components/parameters/Page"}, {"$ref": "#/components/parameters/Size"} ], "responses": { "200": {"$ref": "#/components/responses/AudioContentListSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "500": {"$ref": "#/components/responses/InternalServerError"} } }, "post": { "tags": ["AudioContent"], "summary": "오디오 콘텐츠 생성", "operationId": "createAiCharacterAudioContent", "x-implementation-status": "implemented-contract-alignment-required", "x-legacy-sources": ["AudioContentController.createAudioContent", "CreateAudioContentRequest", "CreateAudioContentResponse"], "requestBody": {"$ref": "#/components/requestBodies/AudioContentCreateMultipart"}, "responses": { "200": {"$ref": "#/components/responses/AudioContentCreateSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "415": {"$ref": "#/components/responses/UnsupportedMediaType"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}/audio-contents/{contentId}": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}, {"$ref": "#/components/parameters/ContentId"}], "get": { "tags": ["AudioContent"], "summary": "오디오 콘텐츠 상세", "operationId": "getAiCharacterAudioContent", "x-implementation-status": "implemented-contract-alignment-required", "x-legacy-sources": ["AudioContentController.getDetail", "GetAudioContentDetailResponse"], "parameters": [{"$ref": "#/components/parameters/Timezone"}], "responses": { "200": {"$ref": "#/components/responses/AudioContentDetailSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "500": {"$ref": "#/components/responses/InternalServerError"} } }, "put": { "tags": ["AudioContent"], "summary": "오디오 콘텐츠 수정/soft delete", "description": "레거시 UpdateCreatorAdminContentRequest의 id만 path contentId로 이동한다.", "operationId": "updateAiCharacterAudioContent", "x-implementation-status": "implemented-contract-alignment-required", "x-legacy-sources": ["CreatorAdminContentController.modifyAudioContent", "UpdateCreatorAdminContentRequest"], "requestBody": {"$ref": "#/components/requestBodies/AudioContentUpdateMultipart"}, "responses": { "200": {"$ref": "#/components/responses/NullSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "415": {"$ref": "#/components/responses/UnsupportedMediaType"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}/series": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}], "get": { "tags": ["Series"], "summary": "시리즈 목록", "operationId": "listAiCharacterSeries", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorAdminContentSeriesController.getSeriesList", "GetCreatorAdminContentSeriesListResponse"], "parameters": [{"$ref": "#/components/parameters/Page"}, {"$ref": "#/components/parameters/Size"}], "responses": { "200": {"$ref": "#/components/responses/SeriesListSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "500": {"$ref": "#/components/responses/InternalServerError"} } }, "post": { "tags": ["Series"], "summary": "시리즈 생성", "operationId": "createAiCharacterSeries", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorAdminContentSeriesController.createSeries", "CreateSeriesRequest"], "requestBody": {"$ref": "#/components/requestBodies/SeriesCreateMultipart"}, "responses": { "200": {"$ref": "#/components/responses/NullSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "415": {"$ref": "#/components/responses/UnsupportedMediaType"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}/series/orders": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}], "put": { "tags": ["Series"], "summary": "시리즈 순서 변경", "operationId": "reorderAiCharacterSeries", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorAdminContentSeriesController.updateSeriesOrders", "UpdateOrdersRequest"], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SeriesOrderUpdateRequest"}}}}, "responses": { "200": {"$ref": "#/components/responses/NullSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "415": {"$ref": "#/components/responses/UnsupportedMediaType"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}/series/{seriesId}": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}, {"$ref": "#/components/parameters/SeriesId"}], "get": { "tags": ["Series"], "summary": "시리즈 상세", "operationId": "getAiCharacterSeries", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorAdminContentSeriesController.getDetail", "GetCreatorAdminContentSeriesDetailResponse"], "responses": { "200": {"$ref": "#/components/responses/SeriesDetailSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "500": {"$ref": "#/components/responses/InternalServerError"} } }, "put": { "tags": ["Series"], "summary": "시리즈 수정/soft delete", "description": "레거시 ModifySeriesRequest의 seriesId만 path로 이동한다.", "operationId": "updateAiCharacterSeries", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorAdminContentSeriesController.modifySeries", "ModifySeriesRequest"], "requestBody": {"$ref": "#/components/requestBodies/SeriesUpdateMultipart"}, "responses": { "200": {"$ref": "#/components/responses/NullSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "415": {"$ref": "#/components/responses/UnsupportedMediaType"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}/series/{seriesId}/contents": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}, {"$ref": "#/components/parameters/SeriesId"}], "get": { "tags": ["Series"], "summary": "시리즈 연결 콘텐츠 목록", "operationId": "listAiCharacterSeriesContents", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorAdminContentSeriesController.getSeriesContent", "GetCreatorAdminContentSeriesContentResponse"], "parameters": [{"$ref": "#/components/parameters/Page"}, {"$ref": "#/components/parameters/Size"}], "responses": { "200": {"$ref": "#/components/responses/SeriesContentListSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "500": {"$ref": "#/components/responses/InternalServerError"} } }, "post": { "tags": ["Series"], "summary": "시리즈 콘텐츠 연결", "description": "레거시 AddingContentToTheSeriesRequest의 seriesId만 path로 이동한다.", "operationId": "addAiCharacterSeriesContents", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorAdminContentSeriesController.addingContentToTheSeries", "AddingContentToTheSeriesRequest"], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SeriesContentAddRequest"}}}}, "responses": { "200": {"$ref": "#/components/responses/NullSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "415": {"$ref": "#/components/responses/UnsupportedMediaType"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}/series/{seriesId}/contents/search": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}, {"$ref": "#/components/parameters/SeriesId"}], "get": { "tags": ["Series"], "summary": "시리즈 미연결 콘텐츠 검색", "operationId": "searchAiCharacterContentsNotInSeries", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorAdminContentSeriesController.searchContentNotInSeries", "SearchContentNotInSeriesResponse"], "parameters": [{"name": "search_word", "in": "query", "required": true, "schema": {"type": "string"}}], "responses": { "200": {"$ref": "#/components/responses/SeriesContentSearchSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}/series/{seriesId}/contents/{contentId}": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}, {"$ref": "#/components/parameters/SeriesId"}, {"$ref": "#/components/parameters/ContentId"}], "delete": { "tags": ["Series"], "summary": "시리즈 콘텐츠 연결 해제", "description": "레거시 RemoveContentToTheSeriesRequest의 seriesId와 contentId를 path로 이동해 body가 없다.", "operationId": "removeAiCharacterSeriesContent", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorAdminContentSeriesController.removeContentInTheSeries", "RemoveContentToTheSeriesRequest"], "responses": { "200": {"$ref": "#/components/responses/NullSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}/community-posts": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}], "get": { "tags": ["Community"], "summary": "커뮤니티 게시글 목록", "operationId": "listAiCharacterCommunityPosts", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorCommunityController.getCommunityPostList", "GetCommunityPostListResponse"], "parameters": [{"$ref": "#/components/parameters/Timezone"}, {"$ref": "#/components/parameters/Page"}, {"$ref": "#/components/parameters/Size"}], "responses": { "200": {"$ref": "#/components/responses/CommunityPostListSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "500": {"$ref": "#/components/responses/InternalServerError"} } }, "post": { "tags": ["Community"], "summary": "커뮤니티 게시글 등록", "operationId": "createAiCharacterCommunityPost", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorCommunityController.createCommunityPost", "CreateCommunityPostRequest"], "requestBody": {"$ref": "#/components/requestBodies/CommunityPostCreateMultipart"}, "responses": { "200": {"$ref": "#/components/responses/NullSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "415": {"$ref": "#/components/responses/UnsupportedMediaType"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}/community-posts/{postId}": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}, {"$ref": "#/components/parameters/PostId"}], "put": { "tags": ["Community"], "summary": "커뮤니티 게시글 수정/고정/soft delete", "description": "ModifyCommunityPostRequest의 creatorCommunityId와 UpdateCommunityPostFixedRequest의 postId를 path로 이동하고 나머지 레거시 필드를 하나의 request에 합친다.", "operationId": "updateAiCharacterCommunityPost", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorCommunityController.modifyCommunityPost", "CreatorCommunityController.updateCommunityPostFixed", "ModifyCommunityPostRequest", "UpdateCommunityPostFixedRequest"], "requestBody": {"$ref": "#/components/requestBodies/CommunityPostUpdateMultipart"}, "responses": { "200": {"$ref": "#/components/responses/NullSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "415": {"$ref": "#/components/responses/UnsupportedMediaType"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}/fan-talks": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}], "get": { "tags": ["FanTalk"], "summary": "FanTalk 관리자 목록", "description": "공개 v2 응답 필드 형태를 유지하되 관리자 target/ownership 정책을 사용하고 viewer/block 필터를 적용하지 않는다.", "operationId": "listAiCharacterFanTalks", "x-implementation-status": "planned", "x-legacy-sources": ["CreatorChannelFanTalkController.getFanTalkTab", "CreatorChannelFanTalkTabResponse"], "parameters": [{"$ref": "#/components/parameters/FanTalkPage"}, {"$ref": "#/components/parameters/FanTalkSize"}], "responses": { "200": {"$ref": "#/components/responses/FanTalkListSuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } }, "/api/v2/admin/ai-characters/{characterId}/fan-talks/{fanTalkId}/replies": { "parameters": [{"$ref": "#/components/parameters/AcceptLanguage"}, {"$ref": "#/components/parameters/CharacterId"}, {"$ref": "#/components/parameters/FanTalkId"}], "post": { "tags": ["FanTalk"], "summary": "FanTalk 답변 작성", "description": "사용자가 승인한 예외로 신규 관리자 축약 응답을 반환한다.", "operationId": "createAiCharacterFanTalkReply", "x-implementation-status": "planned", "x-legacy-sources": ["ExplorerController.writeCheers", "PostWriteCheersRequest", "CreatorChannelFanTalkReplyResponse"], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FanTalkReplyCreateRequest"}}}}, "responses": { "200": {"$ref": "#/components/responses/FanTalkReplySuccess"}, "400": {"$ref": "#/components/responses/BadRequest"}, "401": {"$ref": "#/components/responses/Unauthorized"}, "403": {"$ref": "#/components/responses/Forbidden"}, "404": {"$ref": "#/components/responses/NotFound"}, "405": {"$ref": "#/components/responses/MethodNotAllowed"}, "406": {"$ref": "#/components/responses/NotAcceptable"}, "415": {"$ref": "#/components/responses/UnsupportedMediaType"}, "500": {"$ref": "#/components/responses/InternalServerError"} } } } }, "components": { "securitySchemes": { "bearerAuth": {"type": "http", "scheme": "bearer", "bearerFormat": "JWT"} }, "parameters": { "AcceptLanguage": { "name": "Accept-Language", "in": "header", "required": false, "description": "ko, en, ja는 해당 언어를 사용한다. header가 없거나 그 밖의 문자열이면 KO로 fallback한다.", "schema": {"type": "string", "default": "ko", "examples": ["ko", "en", "ja"]} }, "CharacterId": {"name": "characterId", "in": "path", "required": true, "schema": {"type": "integer", "format": "int64"}}, "ContentId": {"name": "contentId", "in": "path", "required": true, "schema": {"type": "integer", "format": "int64"}}, "SeriesId": {"name": "seriesId", "in": "path", "required": true, "schema": {"type": "integer", "format": "int64"}}, "PostId": {"name": "postId", "in": "path", "required": true, "schema": {"type": "integer", "format": "int64"}}, "FanTalkId": {"name": "fanTalkId", "in": "path", "required": true, "schema": {"type": "integer", "format": "int64"}}, "Page": {"name": "page", "in": "query", "required": false, "schema": {"type": "integer", "format": "int32", "default": 0, "minimum": 0}}, "Size": {"name": "size", "in": "query", "required": false, "schema": {"type": "integer", "format": "int32", "default": 20, "minimum": 1}}, "FanTalkPage": {"name": "page", "in": "query", "required": false, "description": "공개 v2 정책에서 0 이상으로 보정한다.", "schema": {"type": "integer", "format": "int32", "default": 0}}, "FanTalkSize": {"name": "size", "in": "query", "required": false, "description": "공개 v2 정책에서 20..50으로 보정한다.", "schema": {"type": "integer", "format": "int32", "default": 20}}, "Timezone": {"name": "timezone", "in": "query", "required": true, "example": "Asia/Seoul", "schema": {"type": "string"}} }, "requestBodies": { "CharacterCreateMultipart": { "required": true, "content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/CharacterCreateMultipart"}, "encoding": {"request": {"contentType": "application/json"}}}} }, "CharacterUpdateMultipart": { "required": true, "content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/CharacterUpdateMultipart"}, "encoding": {"request": {"contentType": "application/json"}}}} }, "AudioContentCreateMultipart": { "required": true, "content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/AudioContentCreateMultipart"}, "encoding": {"request": {"contentType": "application/json"}}}} }, "AudioContentUpdateMultipart": { "required": true, "content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/AudioContentUpdateMultipart"}, "encoding": {"request": {"contentType": "application/json"}}}} }, "SeriesCreateMultipart": { "required": true, "content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/SeriesCreateMultipart"}, "encoding": {"request": {"contentType": "application/json"}}}} }, "SeriesUpdateMultipart": { "required": true, "content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/SeriesUpdateMultipart"}, "encoding": {"request": {"contentType": "application/json"}}}} }, "CommunityPostCreateMultipart": { "required": true, "content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/CommunityPostCreateMultipart"}, "encoding": {"request": {"contentType": "application/json"}}}} }, "CommunityPostUpdateMultipart": { "required": true, "content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/CommunityPostUpdateMultipart"}, "encoding": {"request": {"contentType": "application/json"}}}} } }, "responses": { "CharacterListSuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CharacterListApiResponse"}}}}, "CharacterDetailSuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CharacterDetailApiResponse"}}}}, "AudioThemeListSuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AudioThemeListApiResponse"}}}}, "AudioContentListSuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AudioContentListApiResponse"}}}}, "AudioContentCreateSuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AudioContentCreateApiResponse"}}}}, "AudioContentDetailSuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AudioContentDetailApiResponse"}}}}, "SeriesListSuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SeriesListApiResponse"}}}}, "SeriesDetailSuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SeriesDetailApiResponse"}}}}, "SeriesContentListSuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SeriesContentListApiResponse"}}}}, "SeriesContentSearchSuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SeriesContentSearchApiResponse"}}}}, "CommunityPostListSuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CommunityPostListApiResponse"}}}}, "FanTalkListSuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FanTalkListApiResponse"}}}}, "FanTalkReplySuccess": {"description": "성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FanTalkReplyApiResponse"}}}}, "NullSuccess": {"description": "레거시 mutation 성공", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/NullSuccessResponse"}}}}, "BadRequest": {"description": "잘못된 요청/target/domain 오류", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiErrorResponse"}}}}, "Unauthorized": {"description": "인증 실패", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiErrorResponse"}}}}, "Forbidden": {"description": "인가 실패", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiErrorResponse"}}}}, "NotFound": {"description": "미매핑 경로", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiErrorResponse"}}}}, "MethodNotAllowed": {"description": "지원하지 않는 method", "headers": {"Allow": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiErrorResponse"}}}}, "NotAcceptable": {"description": "지원하지 않는 응답 media type", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiErrorResponse"}}}}, "UnsupportedMediaType": {"description": "지원하지 않는 요청 media type", "headers": {"Accept": {"schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiErrorResponse"}}}}, "InternalServerError": {"description": "서버 오류", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiErrorResponse"}}}} }, "schemas": { "NullableString": {"type": ["string", "null"]}, "NullableInt32": {"type": ["integer", "null"], "format": "int32"}, "NullableInt64": {"type": ["integer", "null"], "format": "int64"}, "NullableBoolean": {"type": ["boolean", "null"]}, "BinaryFile": {"type": "string", "format": "binary"}, "PurchaseOption": {"type": "string", "enum": ["BOTH", "BUY_ONLY", "RENT_ONLY"]}, "OrderType": {"type": "string", "enum": ["RENTAL", "KEEP"]}, "CharacterType": {"type": "string", "enum": ["Clone", "Character"]}, "SeriesPublishedDaysOfWeek": {"type": "string", "enum": ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "RANDOM"]}, "SeriesState": {"type": "string", "enum": ["PROCEEDING", "SUSPEND", "COMPLETE"]}, "ApiSuccessBase": { "type": "object", "required": ["success"], "properties": { "success": {"type": "boolean", "const": true} } }, "ApiErrorResponse": { "type": "object", "required": ["success", "message", "data", "errorProperty"], "properties": { "success": {"type": "boolean", "const": false}, "message": {"type": "string"}, "data": {"type": ["object", "null"], "const": null}, "errorProperty": {"type": ["string", "null"]} } }, "NullSuccessResponse": { "allOf": [ {"$ref": "#/components/schemas/ApiSuccessBase"}, { "type": "object", "required": ["message", "data", "errorProperty"], "properties": { "message": {"type": ["string", "null"]}, "data": {"type": ["object", "null"], "const": null}, "errorProperty": {"type": ["string", "null"], "const": null} } } ] }, "CharacterRelationship": { "type": "object", "additionalProperties": false, "required": ["personName", "relationshipName", "description", "importance", "relationshipType", "currentStatus"], "properties": { "personName": {"type": "string"}, "relationshipName": {"type": "string"}, "description": {"type": "string"}, "importance": {"type": "integer", "format": "int32"}, "relationshipType": {"type": "string"}, "currentStatus": {"type": "string"} } }, "CharacterPersonality": { "type": "object", "additionalProperties": false, "required": ["trait", "description"], "properties": {"trait": {"type": "string"}, "description": {"type": "string"}} }, "CharacterBackground": { "type": "object", "additionalProperties": false, "required": ["topic", "description"], "properties": {"topic": {"type": "string"}, "description": {"type": "string"}} }, "CharacterMemory": { "type": "object", "additionalProperties": false, "required": ["title", "content", "emotion"], "properties": {"title": {"type": "string"}, "content": {"type": "string"}, "emotion": {"type": "string"}} }, "OriginalWorkBrief": { "type": "object", "additionalProperties": false, "required": ["id", "imageUrl", "title"], "properties": { "id": {"type": "integer", "format": "int64"}, "imageUrl": {"$ref": "#/components/schemas/NullableString"}, "title": {"type": "string"} } }, "CharacterCreateRequest": { "type": "object", "additionalProperties": false, "required": ["name", "systemPrompt", "description"], "properties": { "name": {"type": "string"}, "systemPrompt": {"type": "string"}, "description": {"type": "string"}, "age": {"$ref": "#/components/schemas/NullableString"}, "gender": {"$ref": "#/components/schemas/NullableString"}, "mbti": {"$ref": "#/components/schemas/NullableString"}, "speechPattern": {"$ref": "#/components/schemas/NullableString"}, "speechStyle": {"$ref": "#/components/schemas/NullableString"}, "appearance": {"$ref": "#/components/schemas/NullableString"}, "region": {"type": "string", "default": "KR"}, "originalTitle": {"$ref": "#/components/schemas/NullableString"}, "originalLink": {"$ref": "#/components/schemas/NullableString"}, "originalWorkId": {"$ref": "#/components/schemas/NullableInt64"}, "characterType": {"$ref": "#/components/schemas/NullableString"}, "tags": {"type": "array", "items": {"type": "string"}, "default": []}, "hobbies": {"type": "array", "items": {"type": "string"}, "default": []}, "values": {"type": "array", "items": {"type": "string"}, "default": []}, "goals": {"type": "array", "items": {"type": "string"}, "default": []}, "relationships": {"type": "array", "items": {"$ref": "#/components/schemas/CharacterRelationship"}, "default": []}, "personalities": {"type": "array", "items": {"$ref": "#/components/schemas/CharacterPersonality"}, "default": []}, "backgrounds": {"type": "array", "items": {"$ref": "#/components/schemas/CharacterBackground"}, "default": []}, "memories": {"type": "array", "items": {"$ref": "#/components/schemas/CharacterMemory"}, "default": []} } }, "CharacterUpdateRequest": { "type": "object", "additionalProperties": false, "description": "ChatCharacterUpdateRequest에서 path로 이동한 id만 제거한 형태다. isActive=false와 다른 필드를 함께 보내는 것도 레거시 request 계약상 허용되며, 이 경우 레거시 service는 비활성화만 반영하고 나머지 JSON 필드는 적용하지 않는다.", "properties": { "name": {"$ref": "#/components/schemas/NullableString"}, "systemPrompt": {"$ref": "#/components/schemas/NullableString"}, "description": {"$ref": "#/components/schemas/NullableString"}, "age": {"$ref": "#/components/schemas/NullableString"}, "gender": {"$ref": "#/components/schemas/NullableString"}, "mbti": {"$ref": "#/components/schemas/NullableString"}, "speechPattern": {"$ref": "#/components/schemas/NullableString"}, "speechStyle": {"$ref": "#/components/schemas/NullableString"}, "appearance": {"$ref": "#/components/schemas/NullableString"}, "originalTitle": {"$ref": "#/components/schemas/NullableString"}, "originalLink": {"$ref": "#/components/schemas/NullableString"}, "originalWorkId": {"$ref": "#/components/schemas/NullableInt64"}, "characterType": {"$ref": "#/components/schemas/NullableString"}, "isActive": {"$ref": "#/components/schemas/NullableBoolean"}, "tags": {"type": ["array", "null"], "items": {"type": "string"}}, "hobbies": {"type": ["array", "null"], "items": {"type": "string"}}, "values": {"type": ["array", "null"], "items": {"type": "string"}}, "goals": {"type": ["array", "null"], "items": {"type": "string"}}, "relationships": {"type": ["array", "null"], "items": {"$ref": "#/components/schemas/CharacterRelationship"}}, "personalities": {"type": ["array", "null"], "items": {"$ref": "#/components/schemas/CharacterPersonality"}}, "backgrounds": {"type": ["array", "null"], "items": {"$ref": "#/components/schemas/CharacterBackground"}}, "memories": {"type": ["array", "null"], "items": {"$ref": "#/components/schemas/CharacterMemory"}} } }, "CharacterCreateMultipart": { "type": "object", "additionalProperties": false, "required": ["image", "request"], "properties": {"image": {"$ref": "#/components/schemas/BinaryFile"}, "request": {"$ref": "#/components/schemas/CharacterCreateRequest"}} }, "CharacterUpdateMultipart": { "type": "object", "additionalProperties": false, "required": ["request"], "properties": {"image": {"$ref": "#/components/schemas/BinaryFile"}, "request": {"$ref": "#/components/schemas/CharacterUpdateRequest"}} }, "CharacterListItem": { "type": "object", "additionalProperties": false, "required": ["id", "name", "imageUrl", "description", "gender", "age", "mbti", "speechStyle", "speechPattern", "region", "tags", "createdAt", "updatedAt"], "properties": { "id": {"type": "integer", "format": "int64"}, "name": {"type": "string"}, "imageUrl": {"$ref": "#/components/schemas/NullableString"}, "description": {"type": "string"}, "gender": {"$ref": "#/components/schemas/NullableString"}, "age": {"$ref": "#/components/schemas/NullableInt32"}, "mbti": {"$ref": "#/components/schemas/NullableString"}, "speechStyle": {"$ref": "#/components/schemas/NullableString"}, "speechPattern": {"$ref": "#/components/schemas/NullableString"}, "region": {"type": "string"}, "tags": {"type": "array", "items": {"type": "string"}}, "createdAt": {"type": ["string", "null"], "description": "Asia/Seoul yyyy-MM-dd HH:mm:ss"}, "updatedAt": {"type": ["string", "null"], "description": "Asia/Seoul yyyy-MM-dd HH:mm:ss"} } }, "CharacterListResponse": { "type": "object", "additionalProperties": false, "required": ["totalCount", "content"], "properties": { "totalCount": {"type": "integer", "format": "int64"}, "content": {"type": "array", "items": {"$ref": "#/components/schemas/CharacterListItem"}} } }, "CharacterDetailResponse": { "type": "object", "additionalProperties": false, "required": ["id", "characterUUID", "name", "imageUrl", "description", "systemPrompt", "characterType", "age", "gender", "mbti", "speechPattern", "speechStyle", "appearance", "region", "isActive", "tags", "hobbies", "values", "goals", "relationships", "personalities", "backgrounds", "memories", "originalWork"], "properties": { "id": {"type": "integer", "format": "int64"}, "characterUUID": {"type": "string"}, "name": {"type": "string"}, "imageUrl": {"$ref": "#/components/schemas/NullableString"}, "description": {"type": "string"}, "systemPrompt": {"type": "string"}, "characterType": {"$ref": "#/components/schemas/CharacterType"}, "age": {"$ref": "#/components/schemas/NullableInt32"}, "gender": {"$ref": "#/components/schemas/NullableString"}, "mbti": {"$ref": "#/components/schemas/NullableString"}, "speechPattern": {"$ref": "#/components/schemas/NullableString"}, "speechStyle": {"$ref": "#/components/schemas/NullableString"}, "appearance": {"$ref": "#/components/schemas/NullableString"}, "region": {"type": "string"}, "isActive": {"type": "boolean"}, "tags": {"type": "array", "items": {"type": "string"}}, "hobbies": {"type": "array", "items": {"type": "string"}}, "values": {"type": "array", "items": {"type": "string"}}, "goals": {"type": "array", "items": {"type": "string"}}, "relationships": {"type": "array", "items": {"$ref": "#/components/schemas/CharacterRelationship"}}, "personalities": {"type": "array", "items": {"$ref": "#/components/schemas/CharacterPersonality"}}, "backgrounds": {"type": "array", "items": {"$ref": "#/components/schemas/CharacterBackground"}}, "memories": {"type": "array", "items": {"$ref": "#/components/schemas/CharacterMemory"}}, "originalWork": {"oneOf": [{"$ref": "#/components/schemas/OriginalWorkBrief"}, {"type": "null"}]} } }, "CharacterListApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"$ref": "#/components/schemas/CharacterListResponse"}, "errorProperty": {"type": ["string", "null"], "const": null}}}]}, "CharacterDetailApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"$ref": "#/components/schemas/CharacterDetailResponse"}, "errorProperty": {"type": ["string", "null"], "const": null}}}]}, "AudioContentTheme": { "type": "object", "additionalProperties": false, "required": ["id", "theme", "image"], "properties": {"id": {"type": "integer", "format": "int64"}, "theme": {"type": "string"}, "image": {"type": "string"}} }, "AudioThemeListApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"type": "array", "items": {"$ref": "#/components/schemas/AudioContentTheme"}}, "errorProperty": {"type": ["string", "null"], "const": null}}}]}, "AudioContentCreateRequest": { "type": "object", "additionalProperties": false, "required": ["title", "detail", "tags", "price"], "properties": { "title": {"type": "string"}, "detail": {"type": "string"}, "tags": {"type": "string"}, "price": {"type": "integer", "format": "int32"}, "purchaseOption": {"$ref": "#/components/schemas/PurchaseOption", "default": "BOTH"}, "limited": {"$ref": "#/components/schemas/NullableInt32"}, "timezone": {"type": "string", "default": "Asia/Seoul"}, "releaseDate": {"type": ["string", "null"], "description": "yyyy-MM-dd HH:mm"}, "themeId": {"type": "integer", "format": "int64", "default": 0, "description": "0은 binding 기본값이며 domain validation에서 유효하지 않다."}, "isAdult": {"type": "boolean", "default": false}, "isGeneratePreview": {"type": "boolean", "default": false}, "isOnlyRental": {"type": "boolean", "default": false}, "isPointAvailable": {"type": "boolean", "default": false}, "isCommentAvailable": {"type": "boolean", "default": false}, "isFullDetailVisible": {"type": "boolean", "default": true}, "previewStartTime": {"type": ["string", "null"], "description": "HH:mm:ss"}, "previewEndTime": {"type": ["string", "null"], "description": "HH:mm:ss"}, "languageCode": {"$ref": "#/components/schemas/NullableString"} } }, "AudioContentUpdateRequest": { "type": "object", "additionalProperties": false, "properties": { "title": {"$ref": "#/components/schemas/NullableString"}, "detail": {"$ref": "#/components/schemas/NullableString"}, "tags": {"$ref": "#/components/schemas/NullableString"}, "price": {"$ref": "#/components/schemas/NullableInt32"}, "isAdult": {"$ref": "#/components/schemas/NullableBoolean"}, "isActive": {"$ref": "#/components/schemas/NullableBoolean"}, "isPointAvailable": {"$ref": "#/components/schemas/NullableBoolean"}, "isCommentAvailable": {"$ref": "#/components/schemas/NullableBoolean"} } }, "AudioContentCreateMultipart": { "type": "object", "additionalProperties": false, "required": ["contentFile", "coverImage", "request"], "properties": { "contentFile": {"$ref": "#/components/schemas/BinaryFile"}, "coverImage": {"$ref": "#/components/schemas/BinaryFile"}, "request": {"$ref": "#/components/schemas/AudioContentCreateRequest"} } }, "AudioContentUpdateMultipart": { "type": "object", "additionalProperties": false, "required": ["request"], "properties": { "coverImage": {"$ref": "#/components/schemas/BinaryFile"}, "request": {"$ref": "#/components/schemas/AudioContentUpdateRequest"} } }, "AudioContentListItem": { "type": "object", "additionalProperties": false, "required": ["audioContentId", "title", "detail", "coverImageUrl", "creatorNickname", "theme", "price", "totalContentCount", "remainingContentCount", "isAdult", "isPointAvailable", "isCommentAvailable", "remainingTime", "contentUrl", "date", "releaseDate", "tags"], "properties": { "audioContentId": {"type": "integer", "format": "int64"}, "title": {"type": "string"}, "detail": {"type": "string"}, "coverImageUrl": {"type": "string"}, "creatorNickname": {"type": "string"}, "theme": {"type": "string"}, "price": {"type": "integer", "format": "int32"}, "totalContentCount": {"$ref": "#/components/schemas/NullableInt32"}, "remainingContentCount": {"$ref": "#/components/schemas/NullableInt32"}, "isAdult": {"type": "boolean"}, "isPointAvailable": {"type": "boolean"}, "isCommentAvailable": {"type": "boolean"}, "remainingTime": {"type": "string"}, "contentUrl": {"type": "string", "description": "signed URL"}, "date": {"type": "string"}, "releaseDate": {"$ref": "#/components/schemas/NullableString"}, "tags": {"type": "string"} } }, "AudioContentListResponse": { "type": "object", "additionalProperties": false, "required": ["totalCount", "items"], "properties": {"totalCount": {"type": "integer", "format": "int32"}, "items": {"type": "array", "items": {"$ref": "#/components/schemas/AudioContentListItem"}}} }, "AudioContentListApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"$ref": "#/components/schemas/AudioContentListResponse"}, "errorProperty": {"type": ["string", "null"], "const": null}}}]}, "AudioContentCreateResponse": { "type": "object", "additionalProperties": false, "required": ["contentId"], "properties": {"contentId": {"type": "integer", "format": "int64"}} }, "AudioContentCreateApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"$ref": "#/components/schemas/AudioContentCreateResponse"}, "errorProperty": {"type": ["string", "null"], "const": null}}}]}, "OtherContentResponse": { "type": "object", "additionalProperties": false, "required": ["contentId", "title", "coverUrl"], "properties": {"contentId": {"type": "integer", "format": "int64"}, "title": {"type": "string"}, "coverUrl": {"type": "string"}} }, "AudioContentCreator": { "type": "object", "additionalProperties": false, "required": ["creatorId", "nickname", "profileImageUrl", "isFollowing", "isFollow", "isNotify"], "properties": { "creatorId": {"type": "integer", "format": "int64"}, "nickname": {"type": "string"}, "profileImageUrl": {"type": "string"}, "isFollowing": {"type": "boolean"}, "isFollow": {"type": "boolean"}, "isNotify": {"type": "boolean"} } }, "ContentBuyer": { "type": "object", "additionalProperties": false, "required": ["nickname", "profileImageUrl"], "properties": {"nickname": {"type": "string"}, "profileImageUrl": {"type": "string"}} }, "AudioContentComment": { "type": "object", "additionalProperties": false, "required": ["id", "writerId", "nickname", "profileUrl", "comment", "languageCode", "isSecret", "donationCan", "date", "replyCount"], "properties": { "id": {"type": "integer", "format": "int64"}, "writerId": {"type": "integer", "format": "int64"}, "nickname": {"type": "string"}, "profileUrl": {"type": "string"}, "comment": {"type": "string"}, "languageCode": {"$ref": "#/components/schemas/NullableString"}, "isSecret": {"type": "boolean"}, "donationCan": {"type": "integer", "format": "int32"}, "date": {"type": "string"}, "replyCount": {"type": "integer", "format": "int32"} } }, "TranslatedContent": { "type": "object", "additionalProperties": false, "required": ["title", "detail", "tags"], "properties": {"title": {"$ref": "#/components/schemas/NullableString"}, "detail": {"$ref": "#/components/schemas/NullableString"}, "tags": {"$ref": "#/components/schemas/NullableString"}} }, "AudioContentDetailResponse": { "type": "object", "additionalProperties": false, "required": ["contentId", "title", "detail", "languageCode", "coverImageUrl", "contentUrl", "themeStr", "tag", "price", "duration", "releaseDate", "totalContentCount", "remainingContentCount", "orderSequence", "isActivePreview", "isAdult", "isMosaic", "isOnlyRental", "existOrdered", "purchaseOption", "orderType", "remainingTime", "creatorOtherContentList", "sameThemeOtherContentList", "isCommentAvailable", "isLike", "likeCount", "commentList", "commentCount", "isPin", "isAvailablePin", "creator", "previousContent", "nextContent", "buyerList", "isAvailableUsePoint", "translated"], "properties": { "contentId": {"type": "integer", "format": "int64"}, "title": {"type": "string"}, "detail": {"type": "string"}, "languageCode": {"$ref": "#/components/schemas/NullableString"}, "coverImageUrl": {"type": "string"}, "contentUrl": {"type": "string"}, "themeStr": {"type": "string"}, "tag": {"type": "string"}, "price": {"type": "integer", "format": "int32"}, "duration": {"type": "string"}, "releaseDate": {"$ref": "#/components/schemas/NullableString"}, "totalContentCount": {"$ref": "#/components/schemas/NullableInt32"}, "remainingContentCount": {"$ref": "#/components/schemas/NullableInt32"}, "orderSequence": {"$ref": "#/components/schemas/NullableInt32"}, "isActivePreview": {"type": "boolean"}, "isAdult": {"type": "boolean"}, "isMosaic": {"type": "boolean"}, "isOnlyRental": {"type": "boolean"}, "existOrdered": {"type": "boolean"}, "purchaseOption": {"$ref": "#/components/schemas/PurchaseOption"}, "orderType": {"oneOf": [{"$ref": "#/components/schemas/OrderType"}, {"type": "null"}]}, "remainingTime": {"$ref": "#/components/schemas/NullableString"}, "creatorOtherContentList": {"type": "array", "items": {"$ref": "#/components/schemas/OtherContentResponse"}}, "sameThemeOtherContentList": {"type": "array", "items": {"$ref": "#/components/schemas/OtherContentResponse"}}, "isCommentAvailable": {"type": "boolean"}, "isLike": {"type": "boolean"}, "likeCount": {"type": "integer", "format": "int32"}, "commentList": {"type": "array", "items": {"$ref": "#/components/schemas/AudioContentComment"}}, "commentCount": {"type": "integer", "format": "int32"}, "isPin": {"type": "boolean"}, "isAvailablePin": {"type": "boolean"}, "creator": {"$ref": "#/components/schemas/AudioContentCreator"}, "previousContent": {"oneOf": [{"$ref": "#/components/schemas/OtherContentResponse"}, {"type": "null"}]}, "nextContent": {"oneOf": [{"$ref": "#/components/schemas/OtherContentResponse"}, {"type": "null"}]}, "buyerList": {"type": "array", "items": {"$ref": "#/components/schemas/ContentBuyer"}}, "isAvailableUsePoint": {"type": "boolean"}, "translated": {"oneOf": [{"$ref": "#/components/schemas/TranslatedContent"}, {"type": "null"}]} } }, "AudioContentDetailApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"$ref": "#/components/schemas/AudioContentDetailResponse"}, "errorProperty": {"type": ["string", "null"], "const": null}}}]}, "SeriesCreateRequest": { "type": "object", "additionalProperties": false, "required": ["title", "introduction", "publishedDaysOfWeek", "keyword"], "properties": { "title": {"type": "string"}, "introduction": {"type": "string"}, "publishedDaysOfWeek": {"type": "array", "uniqueItems": true, "items": {"$ref": "#/components/schemas/SeriesPublishedDaysOfWeek"}}, "keyword": {"type": "string"}, "genreId": {"type": "integer", "format": "int64", "default": 0, "description": "0은 binding 기본값이며 domain validation에서 유효하지 않다."}, "isAdult": {"type": "boolean", "default": false}, "writer": {"$ref": "#/components/schemas/NullableString"}, "studio": {"$ref": "#/components/schemas/NullableString"} } }, "SeriesUpdateRequest": { "type": "object", "additionalProperties": false, "properties": { "title": {"$ref": "#/components/schemas/NullableString"}, "introduction": {"$ref": "#/components/schemas/NullableString"}, "publishedDaysOfWeek": {"type": ["array", "null"], "uniqueItems": true, "items": {"$ref": "#/components/schemas/SeriesPublishedDaysOfWeek"}}, "genreId": {"$ref": "#/components/schemas/NullableInt64"}, "isAdult": {"$ref": "#/components/schemas/NullableBoolean"}, "state": {"oneOf": [{"$ref": "#/components/schemas/SeriesState"}, {"type": "null"}]}, "isActive": {"$ref": "#/components/schemas/NullableBoolean"}, "writer": {"$ref": "#/components/schemas/NullableString"}, "studio": {"$ref": "#/components/schemas/NullableString"} } }, "SeriesCreateMultipart": { "type": "object", "additionalProperties": false, "required": ["image", "request"], "properties": {"image": {"$ref": "#/components/schemas/BinaryFile"}, "request": {"$ref": "#/components/schemas/SeriesCreateRequest"}} }, "SeriesUpdateMultipart": { "type": "object", "additionalProperties": false, "required": ["request"], "properties": {"image": {"$ref": "#/components/schemas/BinaryFile"}, "request": {"$ref": "#/components/schemas/SeriesUpdateRequest"}} }, "SeriesListItem": { "type": "object", "additionalProperties": false, "required": ["seriesId", "title", "introduction", "coverImageUrl", "publishedDaysOfWeek", "genreId", "isAdult", "state", "isActive", "writer", "studio"], "properties": { "seriesId": {"type": "integer", "format": "int64"}, "title": {"type": "string"}, "introduction": {"type": "string"}, "coverImageUrl": {"type": "string"}, "publishedDaysOfWeek": {"type": "array", "items": {"$ref": "#/components/schemas/SeriesPublishedDaysOfWeek"}}, "genreId": {"type": "integer", "format": "int64"}, "isAdult": {"type": "boolean"}, "state": {"$ref": "#/components/schemas/SeriesState"}, "isActive": {"type": "boolean"}, "writer": {"$ref": "#/components/schemas/NullableString"}, "studio": {"$ref": "#/components/schemas/NullableString"} } }, "SeriesListResponse": { "type": "object", "additionalProperties": false, "required": ["totalCount", "items"], "properties": {"totalCount": {"type": "integer", "format": "int32"}, "items": {"type": "array", "items": {"$ref": "#/components/schemas/SeriesListItem"}}} }, "SeriesDetailResponse": { "type": "object", "additionalProperties": false, "required": ["seriesId", "title", "introduction", "coverImageUrl", "publishedDaysOfWeek", "genre", "keywords", "isAdult", "state", "writer", "studio"], "properties": { "seriesId": {"type": "integer", "format": "int64"}, "title": {"type": "string"}, "introduction": {"type": "string"}, "coverImageUrl": {"type": "string"}, "publishedDaysOfWeek": {"type": "string", "description": "예: 월, 수"}, "genre": {"type": "string"}, "keywords": {"type": "string"}, "isAdult": {"type": "boolean"}, "state": {"type": "string", "description": "레거시 String 필드. 현재 관찰 값: 연재중, 휴재중, 완결"}, "writer": {"$ref": "#/components/schemas/NullableString"}, "studio": {"$ref": "#/components/schemas/NullableString"} } }, "SeriesContentListItem": { "type": "object", "additionalProperties": false, "required": ["contentId", "coverImage", "title", "isAdult"], "properties": {"contentId": {"type": "integer", "format": "int64"}, "coverImage": {"type": "string"}, "title": {"type": "string"}, "isAdult": {"type": "boolean"}} }, "SeriesContentListResponse": { "type": "object", "additionalProperties": false, "required": ["totalCount", "items"], "properties": {"totalCount": {"type": "integer", "format": "int32"}, "items": {"type": "array", "items": {"$ref": "#/components/schemas/SeriesContentListItem"}}} }, "SeriesContentSearchItem": { "type": "object", "additionalProperties": false, "required": ["contentId", "title", "coverImage"], "properties": {"contentId": {"type": "integer", "format": "int64"}, "title": {"type": "string"}, "coverImage": {"type": "string"}} }, "SeriesContentAddRequest": { "type": "object", "additionalProperties": false, "required": ["contentIdList"], "properties": {"contentIdList": {"type": "array", "items": {"type": "integer", "format": "int64"}}} }, "SeriesOrderUpdateRequest": { "type": "object", "additionalProperties": false, "required": ["ids"], "properties": {"ids": {"type": "array", "items": {"type": "integer", "format": "int64"}}} }, "SeriesListApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"$ref": "#/components/schemas/SeriesListResponse"}, "errorProperty": {"type": ["string", "null"], "const": null}}}]}, "SeriesDetailApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"$ref": "#/components/schemas/SeriesDetailResponse"}, "errorProperty": {"type": ["string", "null"], "const": null}}}]}, "SeriesContentListApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"$ref": "#/components/schemas/SeriesContentListResponse"}, "errorProperty": {"type": ["string", "null"], "const": null}}}]}, "SeriesContentSearchApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"type": "array", "items": {"$ref": "#/components/schemas/SeriesContentSearchItem"}}, "errorProperty": {"type": ["string", "null"], "const": null}}}]}, "CommunityPostComment": { "type": "object", "additionalProperties": false, "required": ["id", "writerId", "nickname", "profileUrl", "comment", "isSecret", "date", "replyCount"], "properties": { "id": {"type": "integer", "format": "int64"}, "writerId": {"type": "integer", "format": "int64"}, "nickname": {"type": "string"}, "profileUrl": {"type": "string"}, "comment": {"type": "string"}, "isSecret": {"type": "boolean"}, "date": {"type": "string"}, "replyCount": {"type": "integer", "format": "int32"} } }, "CommunityPostListItem": { "type": "object", "additionalProperties": false, "required": ["postId", "creatorId", "creatorNickname", "creatorProfileUrl", "imageUrl", "audioUrl", "content", "price", "date", "dateUtc", "isCommentAvailable", "isAdult", "isFixed", "isLike", "existOrdered", "likeCount", "commentCount", "firstComment"], "properties": { "postId": {"type": "integer", "format": "int64"}, "creatorId": {"type": "integer", "format": "int64"}, "creatorNickname": {"type": "string"}, "creatorProfileUrl": {"type": "string"}, "imageUrl": {"$ref": "#/components/schemas/NullableString"}, "audioUrl": {"$ref": "#/components/schemas/NullableString"}, "content": {"type": "string"}, "price": {"type": "integer", "format": "int32"}, "date": {"type": "string"}, "dateUtc": {"type": "string"}, "isCommentAvailable": {"type": "boolean"}, "isAdult": {"type": "boolean"}, "isFixed": {"type": "boolean"}, "isLike": {"type": "boolean"}, "existOrdered": {"type": "boolean"}, "likeCount": {"type": "integer", "format": "int32"}, "commentCount": {"type": "integer", "format": "int32"}, "firstComment": {"oneOf": [{"$ref": "#/components/schemas/CommunityPostComment"}, {"type": "null"}]} } }, "CommunityPostCreateRequest": { "type": "object", "additionalProperties": false, "required": ["content", "isCommentAvailable", "isAdult"], "properties": { "content": {"type": "string"}, "isCommentAvailable": {"type": "boolean"}, "isAdult": {"type": "boolean"}, "price": {"type": "integer", "format": "int32", "default": 0} } }, "CommunityPostUpdateRequest": { "type": "object", "additionalProperties": false, "properties": { "content": {"$ref": "#/components/schemas/NullableString"}, "isCommentAvailable": {"$ref": "#/components/schemas/NullableBoolean"}, "isAdult": {"$ref": "#/components/schemas/NullableBoolean"}, "isActive": {"$ref": "#/components/schemas/NullableBoolean"}, "isFixed": {"type": "boolean", "description": "레거시 UpdateCommunityPostFixedRequest에서 ID만 path로 이동한 필드"} } }, "CommunityPostCreateMultipart": { "type": "object", "additionalProperties": false, "required": ["request"], "properties": { "audioFile": {"$ref": "#/components/schemas/BinaryFile"}, "postImage": {"$ref": "#/components/schemas/BinaryFile"}, "request": {"$ref": "#/components/schemas/CommunityPostCreateRequest"} } }, "CommunityPostUpdateMultipart": { "type": "object", "additionalProperties": false, "required": ["request"], "properties": { "postImage": {"$ref": "#/components/schemas/BinaryFile"}, "request": {"$ref": "#/components/schemas/CommunityPostUpdateRequest"} } }, "CommunityPostListApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"type": "array", "items": {"$ref": "#/components/schemas/CommunityPostListItem"}}, "errorProperty": {"type": ["string", "null"], "const": null}}}]}, "FanTalkCreatorReply": { "type": "object", "additionalProperties": false, "required": ["fanTalkId", "writerId", "writerNickname", "writerProfileImageUrl", "content", "createdAtUtc"], "properties": { "fanTalkId": {"type": "integer", "format": "int64"}, "writerId": {"type": "integer", "format": "int64"}, "writerNickname": {"type": "string"}, "writerProfileImageUrl": {"type": "string"}, "content": {"type": "string"}, "createdAtUtc": {"type": "string", "format": "date-time"} } }, "FanTalkListItem": { "type": "object", "additionalProperties": false, "required": ["fanTalkId", "writerId", "writerNickname", "writerProfileImageUrl", "content", "createdAtUtc", "creatorReplies"], "properties": { "fanTalkId": {"type": "integer", "format": "int64"}, "writerId": {"type": "integer", "format": "int64"}, "writerNickname": {"type": "string"}, "writerProfileImageUrl": {"type": "string"}, "content": {"type": "string"}, "createdAtUtc": {"type": "string", "format": "date-time"}, "creatorReplies": {"type": "array", "items": {"$ref": "#/components/schemas/FanTalkCreatorReply"}} } }, "FanTalkListResponse": { "type": "object", "additionalProperties": false, "required": ["fanTalkCount", "fanTalks", "page", "size", "hasNext"], "properties": { "fanTalkCount": {"type": "integer", "format": "int32"}, "fanTalks": {"type": "array", "items": {"$ref": "#/components/schemas/FanTalkListItem"}}, "page": {"type": "integer", "format": "int32"}, "size": {"type": "integer", "format": "int32"}, "hasNext": {"type": "boolean"} } }, "FanTalkReplyCreateRequest": { "type": "object", "additionalProperties": false, "required": ["content"], "properties": {"content": {"type": "string"}} }, "FanTalkReplyResponse": { "type": "object", "additionalProperties": false, "required": ["fanTalkId", "replyId", "creatorMemberId", "content", "createdAtUtc"], "properties": { "fanTalkId": {"type": "integer", "format": "int64"}, "replyId": {"type": "integer", "format": "int64"}, "creatorMemberId": {"type": "integer", "format": "int64"}, "content": {"type": "string"}, "createdAtUtc": {"type": "string", "format": "date-time"} } }, "FanTalkListApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"$ref": "#/components/schemas/FanTalkListResponse"}, "errorProperty": {"type": ["string", "null"], "const": null}}}]}, "FanTalkReplyApiResponse": {"allOf": [{"$ref": "#/components/schemas/ApiSuccessBase"}, {"type": "object", "required": ["message", "data", "errorProperty"], "properties": {"message": {"type": ["string", "null"]}, "data": {"$ref": "#/components/schemas/FanTalkReplyResponse"}, "errorProperty": {"type": ["string", "null"], "const": null}}}]} } } }