{"openapi":"3.0.1","info":{"title":"밸런스 게임 API","description":"밸런스 게임 API 문서","version":"v0.1"},"servers":[{"url":"https://api.zznpk.com","description":"Default Server url"},{"url":"http://localhost:8888","description":"Local Server url"}],"tags":[{"name":"Game Report Controller","description":"Game Report's API"},{"name":"Game Comment Likes Controller","description":"Game Comment Like's API"},{"name":"Main Page Controller","description":"Main Page's API"},{"name":"User Management Controller","description":"유저 관리 API"},{"name":"Image Controller","description":"Image CRUD API"},{"name":"Media Link Controller","description":"Link CRUD API"},{"name":"Game Results Controller","description":"Game Results CRUD API"},{"name":"Follow Controller","description":"팔로우 기능 관리 API"},{"name":"User Profile Controller","description":"유저 프로필 관리 API"},{"name":"Presigned Url Controller","description":"Media Upload & Update API"},{"name":"Game Result Comments Controller","description":"Game Result Comments CRUD API"},{"name":"Game Resource Controller","description":"Game Resource CRUD API"},{"name":"Game Play Controller","description":"Game Play CRUD API"},{"name":"OAuth Controller","description":"OAuth API"},{"name":"Game Room Controller","description":"Game Room CRUD API"},{"name":"Game Resource Comments Controller","description":"Game Resource Comments CRUD API"}],"paths":{"/api/v1/users/profile":{"get":{"tags":["User Profile Controller"],"summary":"프로필 정보 출력 API","description":"프로필 정보를 출력합니다.","operationId":"getProfile","responses":{"200":{"description":"출력 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"bearerAuth":[]}]},"put":{"tags":["User Profile Controller"],"summary":"프로필 정보 수정 API","description":"프로필 정보를 수정합니다.","operationId":"updateProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRequest"}}},"required":true},"responses":{"200":{"description":"수정 성공","content":{"*/*":{"schema":{"type":"string"}}}},"400":{"description":"유효성 검사 실패, 조건에 맞지 않는 값이 발견됨","content":{"*/*":{"schema":{"type":"string"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}":{"get":{"tags":["Main Page Controller"],"summary":"게임방 정보 확인 API","description":"특정 게임방의 정보를 확인함.","operationId":"getGameStatus","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"게임방의 정보 확인 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GameDetailResponse"}}}}}},"put":{"tags":["Game Room Controller"],"summary":"게임방 설정 업데이트 API","description":"게임방의 설정들을 변경 가능.","operationId":"updateGameStatus","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameRequest"}}},"required":true},"responses":{"400":{"description":"필수값이 비어 있습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"401":{"description":"게임 주인이 아닙니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"게임방 수정 완료","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Game Room Controller"],"summary":"게임방 삭제 API","description":"게임방을 삭제 가능.","operationId":"deleteGame","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"게임 주인이 아닙니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"게임방 삭제 완료","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/results/comments/{commentId}":{"put":{"tags":["Game Result Comments Controller"],"summary":"게임 결과 댓글 수정 API","description":"해당 댓글을 수정할 수 있다.","operationId":"updateResultComment","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"commentId","in":"path","description":"댓글의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameResultCommentRequest"}}},"required":true},"responses":{"404":{"description":"해당 댓글은 존재하지 않습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"401":{"description":"작성자가 아닙니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"400":{"description":"댓글 내용은 필수입니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"댓글 수정 완료","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Game Result Comments Controller"],"summary":"게임 결과 댓글 삭제 API","description":"해당 댓글을 삭제할 수 있다.","operationId":"deleteResultComment","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"commentId","in":"path","description":"댓글의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"댓글 삭제 완료","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"해당 댓글은 존재하지 않습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"401":{"description":"작성자가 아닙니다.","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/resources/{resourceId}":{"get":{"tags":["Game Resource Controller"],"summary":"특정 게임 리소스 데이터 발급 API","description":"해당 리소스의 데이터를 제공한다.","operationId":"getResource","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"resourceId","in":"path","description":"리소스 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"발급 완료","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GameResourceResponse"}}}}}},"put":{"tags":["Game Resource Controller"],"summary":"게임 리소스 수정 API","description":"리소스의 제목이나 URL 등을 수정할 수 있다.","operationId":"updateResource","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"resourceId","in":"path","description":"리소스의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameResourceRequest"}}},"required":true},"responses":{"404":{"description":"해당 리소스는 없습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"400":{"description":"resource & room ID 값은 필수입니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"401":{"description":"게임룸 호스트가 아닙니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"리소스 정보 수정 완료","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Game Resource Controller"],"summary":"게임 리소스 삭제 API","description":"등록된 리소스를 삭제할 수 있다.","operationId":"deleteResource","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"resourceId","in":"path","description":"리소스의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"404":{"description":"해당 리소스는 없습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"400":{"description":"resource & room ID 값은 필수입니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"401":{"description":"게임룸 호스트가 아닙니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"리소스 삭제 완료","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/resources/{resourceId}/comments/{commentId}":{"put":{"tags":["Game Resource Comments Controller"],"summary":"게임 리소스 댓글 수정 API","description":"해당 댓글을 수정할 수 있다.","operationId":"updateResourceComment","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"resourceId","in":"path","description":"리소스의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"commentId","in":"path","description":"댓글의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameResourceCommentUpdateRequest"}}},"required":true},"responses":{"404":{"description":"해당 댓글은 존재하지 않습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"401":{"description":"작성자가 아닙니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"400":{"description":"댓글 내용은 필수입니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"댓글 수정 완료","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Game Resource Comments Controller"],"summary":"게임 리소스 댓글 삭제 API","description":"해당 댓글을 삭제할 수 있다.","operationId":"deleteResourceComment","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"resourceId","in":"path","description":"리소스의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"commentId","in":"path","description":"댓글의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"댓글 삭제 완료","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"해당 댓글은 존재하지 않습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"401":{"description":"작성자가 아닙니다.","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/play/{playId}":{"get":{"tags":["Game Play Controller"],"summary":"게임 이어 하기","description":"진행했던 게임을 다시 이어 할 수 있다.","operationId":"continuePlayRoom","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"playId","in":"path","description":"플레이룸의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"inviteCode","in":"query","description":"초대 코드","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"게임 데이터 출력 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GamePlayResponse"}}}}},"security":[{"bearerAuth":[]}]},"put":{"tags":["Game Play Controller"],"summary":"플레이룸 결과 반영 API","description":"선택한 리소스를 업데이트하고 다음 페어를 반환.","operationId":"updatePlayRoom","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"playId","in":"path","description":"플레이룸의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GamePlayRequest"}}},"required":true},"responses":{"200":{"description":"플레이룸 업데이트 완료","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GamePlayResponse"}}}},"400":{"description":"이미 선택한 리소스입니다.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GamePlayResponse"}}}},"404":{"description":"일치하는 리소스 ID가 없습니다.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GamePlayResponse"}}}}}}},"/api/v1/users/test/login":{"post":{"tags":["OAuth Controller"],"summary":"테스트 전용 로그인 API","description":"토큰을 발급합니다.","operationId":"testLogin","responses":{"200":{"description":"로그인 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"401":{"description":"401_2 : 회원 탈퇴한 유저","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"유효성 검사 실패, 조건에 맞지 않는 값이 발견됨","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}}}}},"/api/v1/users/signup":{"post":{"tags":["User Management Controller"],"summary":"회원 가입 API","description":"유저의 정보를 입력받아 회원 가입을 처리합니다.","operationId":"signUp","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignUpRequest"}}},"required":true},"responses":{"401":{"description":"401 : 소셜 로그인 측 토큰 불량","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"201":{"description":"회원 가입 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"유효성 검사 실패, 조건에 맞지 않는 값이 발견됨","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}}}}},"/api/v1/users/resign":{"post":{"tags":["User Management Controller"],"summary":"회원 탈퇴 API","description":"회원 탈퇴 요청을 처리합니다.","operationId":"resign","responses":{"200":{"description":"회원 탈퇴 대기 전환","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/report":{"post":{"tags":["User Profile Controller"],"summary":"유저 신고 API","description":"정책에 맞지 않는 유저를 신고함.","operationId":"submitUserReport","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserReportRequest"}}},"required":true},"responses":{"401":{"description":"로그인이 필요합니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"신고 완료","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"해당 유저는 존재하지 않음.","content":{"*/*":{"schema":{"type":"boolean"}}}},"400":{"description":"필수 정보값이 누락됨.","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/refresh":{"post":{"tags":["OAuth Controller"],"summary":"토큰 재발급 API","description":"RefreshToken 으로 AccessToken 을 재발급합니다.","operationId":"refresh","responses":{"200":{"description":"재발급 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/logout":{"post":{"tags":["OAuth Controller"],"summary":"로그 아웃 API","description":"사용자를 로그 아웃 시킵니다.","operationId":"logout","responses":{"200":{"description":"로그 아웃 성공","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/login":{"post":{"tags":["OAuth Controller"],"summary":"로그인(Next-Auth) API","description":"사용자의 로그인 정보를 받아 토큰을 발급합니다.","operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"로그인 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"401":{"description":"401_2 : 회원 탈퇴한 유저","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"유효성 검사 실패, 조건에 맞지 않는 값이 발견됨","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}}}}},"/api/v1/users/login/kakao":{"post":{"tags":["OAuth Controller"],"summary":"카카오 로그인(서버 처리) API","description":"사용자의 로그인 정보를 받아 토큰을 발급합니다.","operationId":"kakaoLogin","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KakaoRequest"}}},"required":true},"responses":{"200":{"description":"로그인 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"유효성 검사 실패, 조건에 맞지 않는 값이 발견됨","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"401":{"description":"401_3 : 다른 소셜 플랫폼 기반 가입자","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}}}}},"/api/v1/users/games/{gameId}/resource/{resourceId}":{"post":{"tags":["User Profile Controller"],"summary":"최근 플레이 등록 API","description":"최근 플레이한 게임을 기록함.","operationId":"saveRecentPlays","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"resourceId","in":"path","description":"최종 우승한 리소스 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"201":{"description":"플레이한 게임 기록 완료","content":{"*/*":{"schema":{"type":"integer","format":"int64"}}}},"401":{"description":"해당 게임방을 찾을 수 없습니다.","content":{"*/*":{"schema":{"type":"integer","format":"int64"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/exists":{"post":{"tags":["User Management Controller"],"summary":"중복 이름 확인 API","description":"이름이 중복되었다면 True, 아니면 False 를 반환합니다.","operationId":"existsByNickname","parameters":[{"name":"nickname","in":"query","description":"유저 닉네임","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"확인 성공","content":{"*/*":{"schema":{"type":"boolean"}}}}}}},"/api/v1/media/single":{"post":{"tags":["Presigned Url Controller"],"summary":"단일 업로드 API (User Profile)","description":"AWS S3 저장소에 업로드할 수 있는 단일 URL 발급","operationId":"getPreSignedUrlForUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresignedUrlRequest"}}},"required":true},"responses":{"400":{"description":"prefix 값이 확인되지 않음.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PresignedUrlResponse"}}}},"200":{"description":"URL 발급 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PresignedUrlResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/media/multiple":{"post":{"tags":["Presigned Url Controller"],"summary":"다중 업로드 API","description":"AWS S3 저장소에 업로드할 수 있는 다중 URL 발급","operationId":"getPreSignedUrl","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresignedUrlsRequest"}}},"required":true},"responses":{"400":{"description":"prefix 값이 확인되지 않음.","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PresignedUrlResponse"}}}}},"401":{"description":"인증 실패","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PresignedUrlResponse"}}}}},"200":{"description":"URL 발급 성공","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PresignedUrlResponse"}}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games":{"post":{"tags":["Game Room Controller"],"summary":"게임방 생성 API","description":"게임방의 기본적인 설정들을 받아 생성함.","operationId":"saveGame","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameRequest"}}},"required":true},"responses":{"201":{"description":"게임방 생성 완료","content":{"*/*":{"schema":{"type":"integer","format":"int64"}}}},"400":{"description":"초대 코드가 null 입니다.","content":{"*/*":{"schema":{"type":"integer","format":"int64"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/results/comments":{"get":{"tags":["Game Result Comments Controller"],"summary":"게임 결과 댓글 리스트 발급 API","description":"게임 결과 댓글 리스트 목록을 제공한다.","operationId":"getCommentsByGameResult","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"cursorId","in":"query","description":"커서 ID (페이징 처리용)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":10}},{"name":"content","in":"query","description":"검색할 댓글 내용","required":false,"schema":{"type":"string"}},{"name":"sortType","in":"query","description":"정렬 방식","required":false,"schema":{"type":"string","enum":["LIKE_ASC","LIKE_DESC","OLD","RECENT"]}}],"responses":{"200":{"description":"발급 완료","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplGameResultCommentResponse"}}}}}},"post":{"tags":["Game Result Comments Controller"],"summary":"게임 결과 댓글 등록 API","description":"해당 게임 결과에 댓글을 등록할 수 있다.","operationId":"addResultComment","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameResultCommentRequest"}}},"required":true},"responses":{"200":{"description":"댓글 등록 완료","content":{"*/*":{"schema":{"type":"boolean"}}}},"400":{"description":"댓글 내용은 필수입니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"401":{"description":"로그인한 유저가 아닙니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"해당 리소스는 존재하지 않습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/resources/{resourceId}/report":{"post":{"tags":["Game Report Controller"],"summary":"리소스 신고 API","description":"정책에 맞지 않는 리소스를 신고함.","operationId":"submitGameResourcesReport","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"resourceId","in":"path","description":"리소스 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameReportRequest"}}},"required":true},"responses":{"401":{"description":"로그인이 필요합니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"신고 완료","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"해당 리소스는 존재하지 않음.","content":{"*/*":{"schema":{"type":"boolean"}}}},"400":{"description":"필수 정보값이 누락됨.","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/resources/{resourceId}/comments":{"get":{"tags":["Game Resource Comments Controller"],"summary":"게임 리소스 부모 댓글 리스트 발급 API","description":"게임 리소스 부모 댓글 리스트 목록을 제공한다.","operationId":"getParentCommentsByGameResource","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"resourceId","in":"path","description":"게임 리소스의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"cursorId","in":"query","description":"커서 ID (페이징 처리용)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":10}},{"name":"content","in":"query","description":"검색할 댓글 내용","required":false,"schema":{"type":"string"}},{"name":"sortType","in":"query","description":"정렬 방식","required":false,"schema":{"type":"string","enum":["LIKE_ASC","LIKE_DESC","OLD","RECENT"]}}],"responses":{"200":{"description":"발급 완료","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplGameResourceParentCommentResponse"}}}}}},"post":{"tags":["Game Resource Comments Controller"],"summary":"게임 리소스 댓글 등록 API","description":"해당 리소스에 댓글을 등록할 수 있다.","operationId":"addResourceComment","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"resourceId","in":"path","description":"리소스의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameResourceCommentRequest"}}},"required":true},"responses":{"200":{"description":"댓글 등록 완료","content":{"*/*":{"schema":{"type":"boolean"}}}},"400":{"description":"댓글 내용은 필수입니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"401":{"description":"로그인한 유저가 아닙니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"해당 리소스는 존재하지 않습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/report":{"post":{"tags":["Game Report Controller"],"summary":"게임방 신고 API","description":"정책에 맞지 않는 게임방을 신고함.","operationId":"submitGamesReport","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameReportRequest"}}},"required":true},"responses":{"401":{"description":"로그인이 필요합니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"신고 완료","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"해당 게임방은 존재하지 않음.","content":{"*/*":{"schema":{"type":"boolean"}}}},"400":{"description":"필수 정보값이 누락됨.","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/play":{"get":{"tags":["Game Play Controller"],"summary":"게임의 전반적인 명세 데이터 출력","description":"게임의 전반적인 명세 데이터 출력한다.","operationId":"getGameDetails","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"게임 명세 출력 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GameInfoResponse"}}}}}},"post":{"tags":["Game Play Controller"],"summary":"플레이룸 생성 및 게임 시작 API","description":"n강만큼 데이터가 준비되고 첫 2개의 데이터를 반환.","operationId":"createPlayRoom","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GamePlayRoundRequest"}}},"required":true},"responses":{"201":{"description":"플레이룸 생성 완료","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GamePlayResponse"}}}},"400":{"description":"초대 코드가 null 입니다.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GamePlayResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/media/links":{"post":{"tags":["Media Link Controller"],"summary":"유튜브 링크 저장 API","description":"유튜브 URL과 시작, 끝 초를 저장함.","operationId":"saveLink","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkRequest"}}},"required":true},"responses":{"201":{"description":"저장 성공","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/media/links/auto":{"post":{"tags":["Media Link Controller"],"summary":"유튜브 링크 자동 저장 API","description":"자동으로 유튜브 URL과 시작, 끝 초를 저장함.","operationId":"autoSaveLink","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AutoLinkRequest"}}}},"required":true},"responses":{"201":{"description":"저장 성공","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/media/images":{"post":{"tags":["Image Controller"],"summary":"게임 리소스 사진 저장 API","description":"S3에 업로드한 URL을 차례대로 저장함.","operationId":"saveImageForGame","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageRequest"}}},"required":true},"responses":{"201":{"description":"저장 성공","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/comments/{commentId}/likes":{"post":{"tags":["Game Comment Likes Controller"],"summary":"댓글 좋아요 처리 API","description":"해당 댓글의 좋아요를 올리거나 취소한다.","operationId":"toggleLike","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"commentId","in":"path","description":"댓글 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameCommentLikeRequest"}}},"required":true},"responses":{"200":{"description":"처리 완료","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"일치하는 데이터가 없습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/comments/report":{"post":{"tags":["Game Report Controller"],"summary":"댓글 신고 API","description":"정책에 맞지 않는 댓글을 신고함.","operationId":"submitGameCommentsReport","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameCommentReportRequest"}}},"required":true},"responses":{"401":{"description":"로그인이 필요합니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"신고 완료","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"해당 댓글은 존재하지 않음.","content":{"*/*":{"schema":{"type":"boolean"}}}},"400":{"description":"필수 정보값이 누락됨.","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/follows":{"post":{"tags":["Follow Controller"],"summary":"팔로워 등록 API","description":"특정 사용자를 팔로우합니다.","operationId":"addFollow","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FollowRequest"}}},"required":true},"responses":{"401":{"description":"로그인이 필요합니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"400":{"description":"유효성 검사 실패 또는 이미 팔로우 중","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"해당 사용자는 존재하지 않습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"201":{"description":"팔로우 등록 성공","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/profile/user":{"get":{"tags":["User Profile Controller"],"summary":"다른 사용자 프로필 조회 API","description":"이메일로 다른 사용자의 프로필 정보를 조회합니다.","operationId":"getProfileByEmail","parameters":[{"name":"email","in":"query","description":"조회할 사용자 이메일","required":true,"schema":{"type":"string"}}],"responses":{"404":{"description":"사용자를 찾을 수 없음","content":{"*/*":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"200":{"description":"조회 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}}}},"/api/v1/users/games":{"get":{"tags":["User Profile Controller"],"summary":"내가 만든 게임 리스트 확인 API","description":"내가 만든 게임들을 무한 스크롤 형식으로 확인 가능.","operationId":"getMyGameList","parameters":[{"name":"cursorId","in":"query","description":"커서 ID","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":10}},{"name":"search","in":"query","description":"검색어","required":false,"schema":{"type":"string"}},{"name":"searchType","in":"query","description":"검색 타입 (TITLE: 제목, NICKNAME: 닉네임)","required":false,"schema":{"type":"string","enum":["TITLE","NICKNAME"]}},{"name":"category","in":"query","description":"카테고리","required":false,"schema":{"type":"string","enum":["FUN","DAILY","FOOD","LOVE","DRAMA","SONG","CELEBRITY","ANIMAL","ANIMATION","HORROR","MOVIE","ETC","FOLLOWING"]}},{"name":"sortType","in":"query","description":"정렬 방식","required":false,"schema":{"type":"string","enum":["OLD","RECENT","PLAY_DESC","WEEK","MONTH"]}}],"responses":{"200":{"description":"내가 만든 게임 리스트 발급 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplGameListResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/games/{gameId}":{"get":{"tags":["User Profile Controller"],"summary":"내가 만든 게임방 정보 확인 API","description":"내 게임방의 설정을 확인함.","operationId":"getMyGameStatus","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"게임 주인이 아닙니다.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GameResponse"}}}},"200":{"description":"게임방 설정 내역 발급 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GameResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/games/user":{"get":{"tags":["User Profile Controller"],"summary":"특정 사용자가 만든 게임 리스트 확인 API","description":"이메일로 특정 사용자가 만든 게임들을 무한 스크롤 형식으로 확인 가능.","operationId":"getUserGameListByEmail","parameters":[{"name":"email","in":"query","description":"조회할 사용자 이메일","required":true,"schema":{"type":"string"}},{"name":"cursorId","in":"query","description":"커서 ID","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":10}},{"name":"search","in":"query","description":"검색어","required":false,"schema":{"type":"string"}},{"name":"searchType","in":"query","description":"검색 타입 (TITLE: 제목, NICKNAME: 닉네임)","required":false,"schema":{"type":"string","enum":["TITLE","NICKNAME"]}},{"name":"category","in":"query","description":"카테고리","required":false,"schema":{"type":"string","enum":["FUN","DAILY","FOOD","LOVE","DRAMA","SONG","CELEBRITY","ANIMAL","ANIMATION","HORROR","MOVIE","ETC","FOLLOWING"]}},{"name":"sortType","in":"query","description":"정렬 방식","required":false,"schema":{"type":"string","enum":["OLD","RECENT","PLAY_DESC","WEEK","MONTH"]}}],"responses":{"200":{"description":"사용자 게임 리스트 발급 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplGameListResponse"}}}},"404":{"description":"사용자를 찾을 수 없음","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplGameListResponse"}}}}}}},"/api/v1/users/games/recent":{"get":{"tags":["User Profile Controller"],"summary":"최근 플레이 목록 확인 API","description":"내가 플레이한 게임 목록을 출력함.","operationId":"getRecentPlays","parameters":[{"name":"cursorId","in":"query","description":"커서 ID","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":10}}],"responses":{"200":{"description":"최근 플레이 목록 발급 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplRecentPlayListResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/results":{"get":{"tags":["Game Results Controller"],"summary":"각 리소스 별 승률 목록 출력 API","description":"해당 게임방의 리소스 별 승률 목록을 출력함.","operationId":"getResultRanking","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"cursorId","in":"query","description":"커서 ID","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":10}},{"name":"title","in":"query","description":"검색할 리소스 제목","required":false,"schema":{"type":"string"}},{"name":"sortType","in":"query","description":"정렬 방식","required":false,"schema":{"type":"string","enum":["WIN_RATE_ASC","WIN_RATE_DESC","OLD","RESENT"]}}],"responses":{"200":{"description":"각 리소스 별 승률 목록 출력 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplGameResultResponse"}}}}}}},"/api/v1/games/{gameId}/results/page":{"get":{"tags":["Game Results Controller"],"summary":"각 리소스 별 승률 목록 출력 API (page 기반)","description":"해당 게임방의 리소스 별 승률 목록을 출력함.","operationId":"getResultRankingUsingPage","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"페이지 번호","required":false,"schema":{"minimum":1,"type":"integer","format":"int32","default":1}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":10}},{"name":"title","in":"query","description":"검색할 리소스 제목","required":false,"schema":{"type":"string"}},{"name":"sortType","in":"query","description":"정렬 방식","required":false,"schema":{"type":"string","enum":["WIN_RATE_ASC","WIN_RATE_DESC","OLD","RESENT"]}}],"responses":{"200":{"description":"각 리소스 별 승률 목록 출력 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomBasedPageImplGameResultResponse"}}}}}}},"/api/v1/games/{gameId}/resources":{"get":{"tags":["Game Resource Controller"],"summary":"게임 리소스 리스트 발급 API (CursorId)","description":"해당 게임방의 리소스 목록을 제공한다.","operationId":"getResourcesUsingCursorId","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"cursorId","in":"query","description":"커서 ID (페이징 처리용)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":10}},{"name":"title","in":"query","description":"검색할 리소스 제목","required":false,"schema":{"type":"string"}},{"name":"sortType","in":"query","description":"정렬 방식","required":false,"schema":{"type":"string","enum":["WIN_RATE_ASC","WIN_RATE_DESC","OLD","RESENT"]}}],"responses":{"200":{"description":"발급 완료","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplGameResourceResponse"}}}},"401":{"description":"게임룸 호스트가 아닙니다.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplGameResourceResponse"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Game Resource Controller"],"summary":"게임 리소스 선택 삭제 API","description":"등록된 리소스를 선택 삭제할 수 있다.","operationId":"deleteSelectResources","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameResourceDeleteRequest"}}},"required":true},"responses":{"404":{"description":"해당 리소스는 없습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"400":{"description":"resource & room ID 값은 필수입니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"401":{"description":"게임룸 호스트가 아닙니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"리소스 삭제 완료","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/resources/{resourceId}/comments/{parentId}":{"get":{"tags":["Game Resource Comments Controller"],"summary":"게임 리소스 대댓글 리스트 발급 API","description":"게임 리소스 대댓글 리스트 목록을 제공한다.","operationId":"getChildrenCommentsByGameResource","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"resourceId","in":"path","description":"게임 리소스의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"parentId","in":"path","description":"부모 댓글의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"cursorId","in":"query","description":"커서 ID (페이징 처리용)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":10}},{"name":"content","in":"query","description":"검색할 댓글 내용","required":false,"schema":{"type":"string"}},{"name":"sortType","in":"query","description":"정렬 방식","required":false,"schema":{"type":"string","enum":["LIKE_ASC","LIKE_DESC","OLD","RECENT"]}}],"responses":{"200":{"description":"발급 완료","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplGameResourceChildrenCommentResponse"}}}}}}},"/api/v1/games/{gameId}/resources/page":{"get":{"tags":["Game Resource Controller"],"summary":"게임 리소스 리스트 발급 API (Page)","description":"해당 게임방의 리소스 목록을 제공한다.","operationId":"getResourcesUsingPage","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"페이지 넘버","required":false,"schema":{"minimum":1,"type":"integer","format":"int32","default":1}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":10}},{"name":"title","in":"query","description":"검색할 리소스 제목","required":false,"schema":{"type":"string"}},{"name":"sortType","in":"query","description":"정렬 방식","required":false,"schema":{"type":"string","enum":["WIN_RATE_ASC","WIN_RATE_DESC","OLD","RESENT"]}}],"responses":{"200":{"description":"발급 완료","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomBasedPageImplGameResourceResponse"}}}},"401":{"description":"게임룸 호스트가 아닙니다.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomBasedPageImplGameResourceResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/{gameId}/resources/count":{"get":{"tags":["Game Resource Controller"],"summary":"게임방 내 리소스 총 갯수 반환 API","description":"해당 게임방의 리소스 총 갯수를 반환함.","operationId":"getCountResourcesInGames","parameters":[{"name":"gameId","in":"path","description":"게임방의 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"리소스 총 갯수 반환 성공","content":{"*/*":{"schema":{"type":"integer","format":"int32"}}}}}}},"/api/v1/games/random/play":{"get":{"tags":["Game Play Controller"],"summary":"플레이룸 랜덤 ID 반환 API","description":"랜덤 ID 를 반환.","operationId":"getRandomPlayRoomId","responses":{"200":{"description":"랜덤 ID 발급 완료","content":{"*/*":{"schema":{"type":"integer","format":"int64"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/games/list":{"get":{"tags":["Main Page Controller"],"summary":"메인 페이지 리스트 발급 API","description":"메인 페이지 리스트 목록을 제공한다.","operationId":"getMainGameList","parameters":[{"name":"cursorId","in":"query","description":"커서 ID (페이징 처리용)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":10}},{"name":"search","in":"query","description":"검색어","required":false,"schema":{"type":"string"}},{"name":"searchType","in":"query","description":"검색 타입 (TITLE: 제목, NICKNAME: 닉네임)","required":false,"schema":{"type":"string","enum":["TITLE","NICKNAME"]}},{"name":"category","in":"query","description":"카테고리","required":false,"schema":{"type":"string","enum":["FUN","DAILY","FOOD","LOVE","DRAMA","SONG","CELEBRITY","ANIMAL","ANIMATION","HORROR","MOVIE","ETC","FOLLOWING"]}},{"name":"sortType","in":"query","description":"정렬 방식","required":false,"schema":{"type":"string","enum":["OLD","RECENT","PLAY_DESC","WEEK","MONTH"]}},{"name":"followingOnly","in":"query","description":"팔로잉한 유저의 게임만 조회 (true: 팔로잉 게임만, false/null: 전체)","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"발급 완료","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplGameListResponse"}}}}}}},"/api/v1/games/categories":{"get":{"tags":["Main Page Controller"],"summary":"각 카테고리 별 게임 갯수 출력 API","description":"각 카테고리 별 게임 갯수를 출력한다.","operationId":"getCategoryNums","parameters":[{"name":"search","in":"query","description":"검색어","required":false,"schema":{"type":"string"}},{"name":"searchType","in":"query","description":"검색 타입 (TITLE: 제목, NICKNAME: 닉네임)","required":false,"schema":{"type":"string","enum":["TITLE","NICKNAME"]}}],"responses":{"200":{"description":"발급 완료","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GameCategoryNumsResponse"}}}}}}},"/api/v1/follows/recommended":{"get":{"tags":["Follow Controller"],"summary":"추천 프로필 목록 조회 API","description":"랜덤으로 팔로우하지 않은 6명의 사용자를 추천합니다.","operationId":"getRecommendedProfiles","responses":{"200":{"description":"추천 프로필 목록 조회 성공","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FollowUserResponse"}}}}}}}},"/api/v1/follows/followings":{"get":{"tags":["Follow Controller"],"summary":"팔로잉 목록 조회 API","description":"특정 사용자의 팔로잉 목록을 조회합니다. (무한스크롤 지원)","operationId":"getFollowings","parameters":[{"name":"email","in":"query","description":"사용자 이메일","required":true,"schema":{"type":"string"}},{"name":"cursorId","in":"query","description":"커서 ID","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":20}}],"responses":{"404":{"description":"해당 사용자는 존재하지 않습니다.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplFollowUserResponse"}}}},"200":{"description":"팔로잉 목록 조회 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplFollowUserResponse"}}}}}}},"/api/v1/follows/followers":{"get":{"tags":["Follow Controller"],"summary":"팔로워 목록 조회 API","description":"특정 사용자의 팔로워 목록을 조회합니다. (무한스크롤 지원)","operationId":"getFollowers","parameters":[{"name":"email","in":"query","description":"사용자 이메일","required":true,"schema":{"type":"string"}},{"name":"cursorId","in":"query","description":"커서 ID (페이징 처리용)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"한 페이지 당 출력 개수","required":false,"schema":{"type":"integer","format":"int32","default":20}}],"responses":{"404":{"description":"해당 사용자는 존재하지 않습니다.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplFollowUserResponse"}}}},"200":{"description":"팔로워 목록 조회 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CustomPageImplFollowUserResponse"}}}}}}},"/api/v1/follows/counts":{"get":{"tags":["Follow Controller"],"summary":"팔로워/팔로잉 수 조회 API","description":"특정 사용자의 팔로워 수와 팔로잉 수를 조회합니다.","operationId":"getFollowCounts","parameters":[{"name":"email","in":"query","description":"사용자 이메일","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"팔로워/팔로잉 수 조회 성공","content":{"*/*":{"schema":{"$ref":"#/components/schemas/FollowCountResponse"}}}},"404":{"description":"해당 사용자는 존재하지 않습니다.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/FollowCountResponse"}}}}}}},"/api/v1/follows/check":{"get":{"tags":["Follow Controller"],"summary":"팔로우 여부 확인 API","description":"특정 사용자를 팔로우 중인지 확인합니다.","operationId":"isFollowing","parameters":[{"name":"followingEmail","in":"query","description":"확인할 사용자의 이메일","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"팔로우 여부 조회 성공","content":{"*/*":{"schema":{"type":"boolean"}}}},"401":{"description":"로그인이 필요합니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"해당 사용자는 존재하지 않습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/games/recent/{roomId}":{"delete":{"tags":["User Profile Controller"],"summary":"최근 플레이 목록 삭제 API","description":"최근 플레이 목록을 삭제함.","operationId":"deleteRecentPlay","parameters":[{"name":"roomId","in":"path","description":"게임방 ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"최근 플레이 목록 삭제 성공","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/follows/followings/{followingEmail}":{"delete":{"tags":["Follow Controller"],"summary":"팔로잉 취소 API","description":"특정 사용자에 대한 팔로우를 취소합니다.","operationId":"removeFollowing","parameters":[{"name":"followingEmail","in":"path","description":"언팔로우할 사용자의 이메일","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"로그인이 필요합니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"팔로우 관계가 없습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"팔로잉 취소 성공","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/follows/followers/{followerEmail}":{"delete":{"tags":["Follow Controller"],"summary":"팔로워 취소 API","description":"특정 팔로워를 제거합니다.","operationId":"removeFollower","parameters":[{"name":"followerEmail","in":"path","description":"제거할 팔로워의 이메일","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"로그인이 필요합니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"404":{"description":"팔로우 관계가 없습니다.","content":{"*/*":{"schema":{"type":"boolean"}}}},"200":{"description":"팔로워 취소 성공","content":{"*/*":{"schema":{"type":"boolean"}}}}},"security":[{"bearerAuth":[]}]}}},"components":{"schemas":{"UserRequest":{"required":["nickname"],"type":"object","properties":{"nickname":{"pattern":"^[a-zA-Z0-9가-힣]+$","type":"string","description":"닉네임"},"url":{"type":"string","description":"프로필 사진 URL"}}},"GameRequest":{"required":["accessType","description","existsBlind","existsNamePrivate","title"],"type":"object","properties":{"title":{"type":"string","description":"방 제목"},"description":{"type":"string","description":"방 설명"},"existsNamePrivate":{"type":"boolean","description":"익명 여부"},"existsBlind":{"type":"boolean","description":"썸네일 블라인드 여부"},"accessType":{"type":"string","description":"접근 레벨 설정","enum":["PUBLIC","PRIVATE","PROTECTED"]},"inviteCode":{"type":"string","description":"초대 코드"},"categories":{"maxItems":2147483647,"minItems":1,"type":"array","description":"카테고리 설정","items":{"type":"string","description":"카테고리 설정","enum":["FUN","DAILY","FOOD","LOVE","DRAMA","SONG","CELEBRITY","ANIMAL","ANIMATION","HORROR","MOVIE","ETC","FOLLOWING"]}}}},"GameResultCommentRequest":{"required":["comment"],"type":"object","properties":{"comment":{"maxLength":500,"minLength":0,"type":"string","description":"댓글"}}},"GameResourceRequest":{"type":"object","properties":{"title":{"type":"string","description":"리소스 제목"},"type":{"type":"string","description":"미디어 타입","enum":["IMAGE","LINK"]},"content":{"type":"string","description":"이미지 / 유튜브 링크 URL"},"startSec":{"type":"integer","description":"유튜브 URL 시작 초 설정","format":"int32"},"endSec":{"type":"integer","description":"유튜브 URL 끝 초 설정","format":"int32"}}},"GameResourceCommentUpdateRequest":{"required":["comment"],"type":"object","properties":{"comment":{"maxLength":500,"minLength":0,"type":"string","description":"댓글"}}},"GamePlayRequest":{"required":["loseResourceId","winResourceId"],"type":"object","properties":{"winResourceId":{"type":"integer","description":"선택한 리소스 ID","format":"int64"},"loseResourceId":{"type":"integer","description":"선택받지 못한 리소스 ID","format":"int64"}}},"GamePlayResourceResponse":{"type":"object","properties":{"resourceId":{"type":"integer","description":"리소스 ID","format":"int64"},"title":{"type":"string","description":"리소스 제목"},"type":{"type":"string","description":"미디어 타입","enum":["IMAGE","LINK"]},"content":{"type":"string","description":"이미지 / 유튜브 링크 URL"},"startSec":{"type":"integer","description":"유튜브 URL 시작 초","format":"int32"},"endSec":{"type":"integer","description":"유튜브 URL 끝 초","format":"int32"}},"description":"오른쪽 리소스 정보"},"GamePlayResponse":{"type":"object","properties":{"playId":{"type":"integer","description":"게임방 id","format":"int64"},"totalRoundNums":{"type":"integer","description":"선택한 n강","format":"int32"},"currentRoundNums":{"type":"integer","description":"현재 진행 중인 라운드","format":"int32"},"leftResource":{"$ref":"#/components/schemas/GamePlayResourceResponse"},"rightResource":{"$ref":"#/components/schemas/GamePlayResourceResponse"}}},"LoginResponse":{"type":"object","properties":{"nickname":{"type":"string","description":"닉네임"},"email":{"type":"string","description":"이메일"},"fileUrl":{"type":"string","description":"프로필 사진 URL"},"accessToken":{"type":"string","description":"액세스 토큰"},"refreshToken":{"type":"string","description":"리프레쉬 토큰"},"accessTokenExpiresAt":{"type":"integer","description":"액세스 토큰 만료 시간","format":"int64"},"refreshTokenExpiresAt":{"type":"integer","description":"리프레쉬 토큰 만료 시간","format":"int64"}}},"SignUpRequest":{"required":["accessToken","email","loginType","nickname"],"type":"object","properties":{"nickname":{"pattern":"^[a-zA-Z0-9가-힣]+$","type":"string","description":"닉네임"},"email":{"type":"string","description":"이메일"},"loginType":{"type":"string","description":"로그인 타입","enum":["KAKAO","GOOGLE"]},"accessToken":{"type":"string","description":"소셜 로그인 측 서버에서 발급받은 토큰"},"image":{"type":"string","description":"사진 URL"}}},"UserReportRequest":{"required":["nickname","targetType"],"type":"object","properties":{"nickname":{"type":"string","description":"신고 유저 닉네임"},"targetType":{"type":"string","description":"신고 유형","enum":["USER","GAME","RESOURCE","RESULT_COMMENT","RESOURCE_COMMENT"]},"reasons":{"maxItems":2147483647,"minItems":1,"type":"array","description":"신고 사유 리스트","items":{"type":"string","description":"신고 사유 리스트"}},"etcReason":{"type":"string","description":"기타 상세 내용"}}},"TokenResponse":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"accessTokenExpiresAt":{"type":"integer","format":"int64"},"refreshTokenExpiresAt":{"type":"integer","format":"int64"}}},"LoginRequest":{"required":["accessToken","email","loginType"],"type":"object","properties":{"email":{"type":"string","description":"이메일"},"loginType":{"type":"string","description":"로그인 종류","enum":["KAKAO","GOOGLE"]},"accessToken":{"type":"string","description":"인증 토큰"}}},"KakaoRequest":{"required":["authorizeCode"],"type":"object","properties":{"authorizeCode":{"type":"string","description":"인증 코드"}}},"PresignedUrlRequest":{"type":"object","properties":{"prefix":{"type":"string","description":"prefix"}}},"PresignedUrlResponse":{"type":"object","properties":{"uploadUrl":{"type":"string","description":"S3 업로드용 Presigned URL (PUT 전용, 10분 유효)"},"fileUrl":{"type":"string","description":"DB 저장용 클린 S3 URL (만료 없음)"}}},"PresignedUrlsRequest":{"type":"object","properties":{"prefix":{"type":"string","description":"prefix"},"length":{"type":"integer","description":"업로드 개수","format":"int32"}}},"GameReportRequest":{"required":["targetType"],"type":"object","properties":{"targetType":{"type":"string","description":"신고 유형","enum":["USER","GAME","RESOURCE","RESULT_COMMENT","RESOURCE_COMMENT"]},"reasons":{"maxItems":2147483647,"minItems":1,"type":"array","description":"신고 사유 리스트","items":{"type":"string","description":"신고 사유 리스트"}},"etcReason":{"type":"string","description":"기타 상세 내용"}}},"GameResourceCommentRequest":{"required":["comment"],"type":"object","properties":{"parentId":{"type":"integer","description":"부모 댓글 Id","format":"int64"},"comment":{"maxLength":500,"minLength":0,"type":"string","description":"댓글"}}},"GamePlayRoundRequest":{"required":["roundNumber"],"type":"object","properties":{"roundNumber":{"type":"integer","description":"n강","format":"int32"},"inviteCode":{"type":"string","description":"초대 코드"}}},"LinkRequest":{"required":["url"],"type":"object","properties":{"url":{"type":"string","description":"유튜브 URL"},"startSec":{"type":"integer","description":"시작 초","format":"int32"},"endSec":{"type":"integer","description":"끝 초","format":"int32"}}},"AutoLinkRequest":{"required":["title","url"],"type":"object","properties":{"url":{"type":"string","description":"유튜브 URL"},"title":{"type":"string","description":"유튜브 URL 타이틀"},"startSec":{"type":"integer","description":"시작 초","format":"int32"},"endSec":{"type":"integer","description":"끝 초","format":"int32"}}},"ImageRequest":{"type":"object","properties":{"urls":{"maxItems":2147483647,"minItems":1,"type":"array","description":"S3에 저장된 이미지 URL","items":{"type":"string","description":"S3에 저장된 이미지 URL"}}}},"GameCommentLikeRequest":{"required":["existsLiked","sortType"],"type":"object","properties":{"existsLiked":{"type":"boolean","description":"좋아요 신청/취소"},"sortType":{"type":"string","description":"댓글 종류","enum":["RESOURCE","RESULT"]}}},"GameCommentReportRequest":{"required":["targetId","targetType"],"type":"object","properties":{"targetId":{"type":"integer","description":"신고 타겟 ID","format":"int64"},"targetType":{"type":"string","description":"신고 유형","enum":["USER","GAME","RESOURCE","RESULT_COMMENT","RESOURCE_COMMENT"]},"reasons":{"maxItems":2147483647,"minItems":1,"type":"array","description":"신고 사유 리스트","items":{"type":"string","description":"신고 사유 리스트"}},"etcReason":{"type":"string","description":"기타 상세 내용"}}},"FollowRequest":{"required":["followingEmail"],"type":"object","properties":{"followingEmail":{"type":"string","description":"팔로잉할 이메일"}}},"UserResponse":{"type":"object","properties":{"nickname":{"type":"string","description":"닉네임"},"email":{"type":"string","description":"이메일"},"fileUrl":{"type":"string","description":"프로필 사진 URL"},"isFollowing":{"type":"boolean","description":"팔로우 여부"}}},"CustomPageImplGameListResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/GameListResponse"}},"pageable":{"$ref":"#/components/schemas/PageableObject"},"hasPrev":{"type":"boolean"},"hasNext":{"type":"boolean"},"totalElements":{"type":"integer","format":"int64"},"last":{"type":"boolean"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"size":{"type":"integer","format":"int32"},"number":{"type":"integer","format":"int32"},"sort":{"$ref":"#/components/schemas/SortObject"},"numberOfElements":{"type":"integer","format":"int32"},"empty":{"type":"boolean"}}},"GameListResponse":{"type":"object","properties":{"roomId":{"type":"integer","description":"게임방 ID","format":"int64"},"title":{"type":"string","description":"게임 타이틀"},"description":{"type":"string","description":"설명"},"existsBlind":{"type":"boolean","description":"썸네일 블라인드 여부"},"existsMine":{"type":"boolean","description":"내 글 여부"},"categories":{"type":"array","description":"카테고리","items":{"type":"string","description":"카테고리","enum":["FUN","DAILY","FOOD","LOVE","DRAMA","SONG","CELEBRITY","ANIMAL","ANIMATION","HORROR","MOVIE","ETC","FOLLOWING"]}},"totalPlayNums":{"type":"integer","description":"총 플레이 횟수","format":"int32"},"weekPlayNums":{"type":"integer","description":"HOT 태그를 위한 플레이 횟수","format":"int32"},"monthPlayNums":{"type":"integer","description":"월간 플레이 횟수","format":"int32"},"createdAt":{"type":"string","description":"제작일","format":"date-time"},"userResponse":{"$ref":"#/components/schemas/UserMainResponse"},"leftSelection":{"$ref":"#/components/schemas/GameListSelectionResponse"},"rightSelection":{"$ref":"#/components/schemas/GameListSelectionResponse"}}},"GameListSelectionResponse":{"type":"object","properties":{"id":{"type":"integer","description":"리소스 ID","format":"int64"},"title":{"type":"string","description":"선택지 타이틀"},"type":{"type":"string","description":"미디어 타입","enum":["IMAGE","LINK"]},"content":{"type":"string","description":"이미지 / 유튜브 링크 URL"},"startSec":{"type":"integer","description":"유튜브 URL 시작 초","format":"int32"},"endSec":{"type":"integer","description":"유튜브 URL 끝 초","format":"int32"}},"description":"오른쪽 선택지"},"PageableObject":{"type":"object","properties":{"paged":{"type":"boolean"},"pageNumber":{"type":"integer","format":"int32"},"pageSize":{"type":"integer","format":"int32"},"offset":{"type":"integer","format":"int64"},"sort":{"$ref":"#/components/schemas/SortObject"},"unpaged":{"type":"boolean"}}},"SortObject":{"type":"object","properties":{"sorted":{"type":"boolean"},"empty":{"type":"boolean"},"unsorted":{"type":"boolean"}}},"UserMainResponse":{"type":"object","properties":{"nickname":{"type":"string","description":"제작자 닉네임"},"email":{"type":"string","description":"제작자 이메일"},"profileImageUrl":{"type":"string","description":"프로필 사진 URL"},"isFollowing":{"type":"boolean","description":"팔로우 여부"}},"description":"유저 정보"},"GameResponse":{"type":"object","properties":{"roomId":{"type":"integer","description":"게임방 ID","format":"int64"},"title":{"type":"string","description":"게임 타이틀"},"description":{"type":"string","description":"설명"},"existsNamePrivate":{"type":"boolean","description":"익명 여부"},"existsBlind":{"type":"boolean","description":"썸네일 블라인드 여부"},"accessType":{"type":"string","description":"접근 권한","enum":["PUBLIC","PRIVATE","PROTECTED"]},"inviteCode":{"type":"string","description":"초대 코드"},"categories":{"type":"array","description":"카테고리 설정","items":{"type":"string","description":"카테고리 설정","enum":["FUN","DAILY","FOOD","LOVE","DRAMA","SONG","CELEBRITY","ANIMAL","ANIMATION","HORROR","MOVIE","ETC","FOLLOWING"]}}}},"CustomPageImplRecentPlayListResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/RecentPlayListResponse"}},"pageable":{"$ref":"#/components/schemas/PageableObject"},"hasPrev":{"type":"boolean"},"hasNext":{"type":"boolean"},"totalElements":{"type":"integer","format":"int64"},"last":{"type":"boolean"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"size":{"type":"integer","format":"int32"},"number":{"type":"integer","format":"int32"},"sort":{"$ref":"#/components/schemas/SortObject"},"numberOfElements":{"type":"integer","format":"int32"},"empty":{"type":"boolean"}}},"RecentPlayListResponse":{"type":"object","properties":{"roomId":{"type":"integer","description":"게임방 ID","format":"int64"},"title":{"type":"string","description":"게임 타이틀"},"resourceId":{"type":"integer","description":"내가 선택한 리소스 ID","format":"int64"},"resourceTitle":{"type":"string","description":"내가 선택한 리소스 타이틀"},"existsBlind":{"type":"boolean","description":"썸네일 블라인드 여부"},"description":{"type":"string","description":"설명"},"categories":{"type":"array","description":"카테고리","items":{"type":"string","description":"카테고리","enum":["FUN","DAILY","FOOD","LOVE","DRAMA","SONG","CELEBRITY","ANIMAL","ANIMATION","HORROR","MOVIE","ETC","FOLLOWING"]}},"thumbnailImageUrl":{"type":"string","description":"썸네일 이미지 URL"},"thumbnailLinkUrl":{"type":"string","description":"썸네일 유튜브 URL"},"thumbnailType":{"type":"string","description":"썸네일 타입 (IMAGE, LINK)","enum":["IMAGE","LINK"]}}},"GameDetailResponse":{"type":"object","properties":{"title":{"type":"string","description":"게임 타이틀"},"description":{"type":"string","description":"설명"},"existsBlind":{"type":"boolean","description":"썸네일 블라인드 여부"},"existsMine":{"type":"boolean","description":"게임 제작자 본인 확인"},"categories":{"type":"array","description":"카테고리","items":{"type":"string","description":"카테고리","enum":["FUN","DAILY","FOOD","LOVE","DRAMA","SONG","CELEBRITY","ANIMAL","ANIMATION","HORROR","MOVIE","ETC","FOLLOWING"]}},"totalPlayNums":{"type":"integer","description":"총 플레이 횟수","format":"int32"},"totalResourceNums":{"type":"integer","description":"총 리소스 갯수","format":"int32"},"createdAt":{"type":"string","description":"제작일","format":"date-time"},"updatedAt":{"type":"string","description":"수정일","format":"date-time"},"userResponse":{"$ref":"#/components/schemas/UserMainResponse"},"leftSelection":{"$ref":"#/components/schemas/GameListSelectionResponse"},"rightSelection":{"$ref":"#/components/schemas/GameListSelectionResponse"}}},"CustomPageImplGameResultResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/GameResultResponse"}},"pageable":{"$ref":"#/components/schemas/PageableObject"},"hasPrev":{"type":"boolean"},"hasNext":{"type":"boolean"},"totalElements":{"type":"integer","format":"int64"},"last":{"type":"boolean"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"size":{"type":"integer","format":"int32"},"number":{"type":"integer","format":"int32"},"sort":{"$ref":"#/components/schemas/SortObject"},"numberOfElements":{"type":"integer","format":"int32"},"empty":{"type":"boolean"}}},"GameResultResponse":{"type":"object","properties":{"resourceId":{"type":"integer","description":"리소스 ID","format":"int64"},"title":{"type":"string","description":"리소스 제목"},"type":{"type":"string","description":"Image 인지 Youtube Link 인지 구분하는 Enum","enum":["IMAGE","LINK"]},"content":{"type":"string","description":"Image / Youtube Link"},"startSec":{"type":"integer","description":"Youtube Link 시작 시간","format":"int32"},"endSec":{"type":"integer","description":"Youtube Link 끝 시간","format":"int32"},"winningNums":{"type":"integer","description":"우승 횟수","format":"int32"},"totalPlayNums":{"type":"integer","description":"게임 진행 횟수","format":"int32"}}},"CustomBasedPageImplGameResultResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/GameResultResponse"}},"pageable":{"$ref":"#/components/schemas/PageableObject"},"hasPrev":{"type":"boolean"},"hasNext":{"type":"boolean"},"last":{"type":"boolean"},"totalPages":{"type":"integer","format":"int32"},"totalElements":{"type":"integer","format":"int64"},"first":{"type":"boolean"},"size":{"type":"integer","format":"int32"},"number":{"type":"integer","format":"int32"},"sort":{"$ref":"#/components/schemas/SortObject"},"numberOfElements":{"type":"integer","format":"int32"},"empty":{"type":"boolean"}}},"CustomPageImplGameResultCommentResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/GameResultCommentResponse"}},"pageable":{"$ref":"#/components/schemas/PageableObject"},"hasPrev":{"type":"boolean"},"hasNext":{"type":"boolean"},"totalElements":{"type":"integer","format":"int64"},"last":{"type":"boolean"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"size":{"type":"integer","format":"int32"},"number":{"type":"integer","format":"int32"},"sort":{"$ref":"#/components/schemas/SortObject"},"numberOfElements":{"type":"integer","format":"int32"},"empty":{"type":"boolean"}}},"GameResultCommentResponse":{"type":"object","properties":{"commentId":{"type":"integer","description":"댓글 ID","format":"int64"},"comment":{"type":"string","description":"댓글 내용"},"nickname":{"type":"string","description":"작성자 닉네임"},"profileImageUrl":{"type":"string","description":"작성자 프로필 사진"},"createdDateTime":{"type":"string","description":"작성 시간","format":"date-time"},"updatedDateTime":{"type":"string","description":"수정 시간","format":"date-time"},"like":{"type":"integer","description":"좋아요 총합","format":"int32"},"existsLiked":{"type":"boolean","description":"좋아요 클릭 유무"},"existsWriter":{"type":"boolean","description":"작성자 본인 확인"},"existsMine":{"type":"boolean","description":"댓글 작성자 본인 확인"}}},"CustomPageImplGameResourceResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/GameResourceResponse"}},"pageable":{"$ref":"#/components/schemas/PageableObject"},"hasPrev":{"type":"boolean"},"hasNext":{"type":"boolean"},"totalElements":{"type":"integer","format":"int64"},"last":{"type":"boolean"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"size":{"type":"integer","format":"int32"},"number":{"type":"integer","format":"int32"},"sort":{"$ref":"#/components/schemas/SortObject"},"numberOfElements":{"type":"integer","format":"int32"},"empty":{"type":"boolean"}}},"GameResourceResponse":{"type":"object","properties":{"resourceId":{"type":"integer","description":"리소스 ID","format":"int64"},"title":{"type":"string","description":"리소스 제목"},"type":{"type":"string","description":"미디어 타입","enum":["IMAGE","LINK"]},"content":{"type":"string","description":"사진 / 유튜브 URL"},"startSec":{"type":"integer","description":"유튜브 URL 시작 초","format":"int32"},"endSec":{"type":"integer","description":"유튜브 URL 끝 초","format":"int32"},"winningNums":{"type":"integer","description":"우승 횟수","format":"int32"},"totalPlayNums":{"type":"integer","description":"게임 진행 횟수","format":"int32"}}},"CustomPageImplGameResourceParentCommentResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/GameResourceParentCommentResponse"}},"pageable":{"$ref":"#/components/schemas/PageableObject"},"hasPrev":{"type":"boolean"},"hasNext":{"type":"boolean"},"totalElements":{"type":"integer","format":"int64"},"last":{"type":"boolean"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"size":{"type":"integer","format":"int32"},"number":{"type":"integer","format":"int32"},"sort":{"$ref":"#/components/schemas/SortObject"},"numberOfElements":{"type":"integer","format":"int32"},"empty":{"type":"boolean"}}},"GameResourceParentCommentResponse":{"type":"object","properties":{"commentId":{"type":"integer","description":"댓글 ID","format":"int64"},"comment":{"type":"string","description":"댓글 내용"},"nickname":{"type":"string","description":"작성자 닉네임"},"profileImageUrl":{"type":"string","description":"작성자 프로필 사진"},"children":{"type":"integer","description":"대댓글 개수","format":"int32"},"createdDateTime":{"type":"string","description":"작성 시간","format":"date-time"},"updatedDateTime":{"type":"string","description":"수정 시간","format":"date-time"},"like":{"type":"integer","description":"좋아요 총합","format":"int32"},"existsLiked":{"type":"boolean","description":"좋아요 클릭 유무"},"existsWriter":{"type":"boolean","description":"작성자 본인 확인"},"existsMine":{"type":"boolean","description":"댓글 작성자 본인 확인"},"deleted":{"type":"boolean"}}},"CustomPageImplGameResourceChildrenCommentResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/GameResourceChildrenCommentResponse"}},"pageable":{"$ref":"#/components/schemas/PageableObject"},"hasPrev":{"type":"boolean"},"hasNext":{"type":"boolean"},"totalElements":{"type":"integer","format":"int64"},"last":{"type":"boolean"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"size":{"type":"integer","format":"int32"},"number":{"type":"integer","format":"int32"},"sort":{"$ref":"#/components/schemas/SortObject"},"numberOfElements":{"type":"integer","format":"int32"},"empty":{"type":"boolean"}}},"GameResourceChildrenCommentResponse":{"type":"object","properties":{"commentId":{"type":"integer","description":"댓글 ID","format":"int64"},"comment":{"type":"string","description":"댓글 내용"},"nickname":{"type":"string","description":"작성자 닉네임"},"profileImageUrl":{"type":"string","description":"작성자 프로필 사진"},"createdDateTime":{"type":"string","description":"작성 시간","format":"date-time"},"updatedDateTime":{"type":"string","description":"수정 시간","format":"date-time"},"like":{"type":"integer","description":"좋아요 총합","format":"int32"},"existsLiked":{"type":"boolean","description":"좋아요 클릭 유무"},"existsWriter":{"type":"boolean","description":"작성자 본인 확인"},"existsMine":{"type":"boolean","description":"댓글 작성자 본인 확인"}}},"CustomBasedPageImplGameResourceResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/GameResourceResponse"}},"pageable":{"$ref":"#/components/schemas/PageableObject"},"hasPrev":{"type":"boolean"},"hasNext":{"type":"boolean"},"last":{"type":"boolean"},"totalPages":{"type":"integer","format":"int32"},"totalElements":{"type":"integer","format":"int64"},"first":{"type":"boolean"},"size":{"type":"integer","format":"int32"},"number":{"type":"integer","format":"int32"},"sort":{"$ref":"#/components/schemas/SortObject"},"numberOfElements":{"type":"integer","format":"int32"},"empty":{"type":"boolean"}}},"GameInfoResponse":{"type":"object","properties":{"title":{"type":"string","description":"게임 제목"},"description":{"type":"string","description":"설명"},"totalResourceNums":{"type":"integer","description":"총 리소스 갯수","format":"int32"},"accessType":{"type":"string","description":"접근 권한","enum":["PUBLIC","PRIVATE","PROTECTED"]}}},"GameCategoryNumsResponse":{"type":"object","properties":{"totalNums":{"type":"integer","description":"전체 게임 수","format":"int32"},"categoryNums":{"type":"object","additionalProperties":{"type":"integer","description":"각 카테고리에 포함된 게임 수","format":"int64"},"description":"각 카테고리에 포함된 게임 수"}}},"FollowUserResponse":{"type":"object","properties":{"followId":{"type":"integer","description":"팔로우 관계 ID (커서 페이징용)","format":"int64"},"nickname":{"type":"string","description":"닉네임"},"email":{"type":"string","description":"이메일"},"fileUrl":{"type":"string","description":"프로필 사진 URL"},"isFollowing":{"type":"boolean","description":"팔로우 여부"},"showFollowButton":{"type":"boolean","description":"팔로우 버튼 표시 여부"}}},"CustomPageImplFollowUserResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/FollowUserResponse"}},"pageable":{"$ref":"#/components/schemas/PageableObject"},"hasPrev":{"type":"boolean"},"hasNext":{"type":"boolean"},"totalElements":{"type":"integer","format":"int64"},"last":{"type":"boolean"},"totalPages":{"type":"integer","format":"int32"},"first":{"type":"boolean"},"size":{"type":"integer","format":"int32"},"number":{"type":"integer","format":"int32"},"sort":{"$ref":"#/components/schemas/SortObject"},"numberOfElements":{"type":"integer","format":"int32"},"empty":{"type":"boolean"}}},"FollowCountResponse":{"type":"object","properties":{"followerCount":{"type":"integer","description":"팔로워 수","format":"int64","example":150},"followingCount":{"type":"integer","description":"팔로잉 수","format":"int64","example":200}}},"GameResourceDeleteRequest":{"type":"object","properties":{"list":{"type":"array","description":"삭제 리스트","items":{"type":"integer","description":"삭제 리스트","format":"int64"}}}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}}}