{"openapi":"3.0.1","info":{"title":"OpenAPI definition","version":"v0"},"servers":[{"url":"http://gamzatech.site","description":"Generated server url"}],"tags":[{"name":"프로필 이미지 기능","description":"프로필 사진 업로드·조회·수정·삭제 API"}],"paths":{"/api/v1/users/me/update/profile":{"put":{"tags":["유저 기능"],"summary":"정보 업데이트(마이페이지용)","operationId":"updateProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoUserProfileResponse"}}}}}}},"/api/v1/projects/update/{projectId}":{"put":{"tags":["프로젝트 기능"],"summary":"프로젝트 수정","operationId":"updateProject","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"required":["request"],"type":"object","properties":{"request":{"$ref":"#/components/schemas/ProjectRequest"},"thumbnail":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoProjectListResponse"}}}}}}},"/api/v1/profile-images":{"get":{"tags":["프로필 이미지 기능"],"summary":"프로필 사진 확인","operationId":"getProfileImage","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDtoProfileImageResponse"}}}}}},"put":{"tags":["프로필 이미지 기능"],"summary":"프로필 사진 업로드/수정","operationId":"updateProfileImage","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProfileImageRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDtoProfileImageResponse"}}}}}},"delete":{"tags":["프로필 이미지 기능"],"summary":"프로필 사진 삭제","operationId":"deleteProfileImage","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDtoVoid"}}}}}}},"/api/v1/posts/{id}":{"put":{"tags":["게시물 기능"],"summary":"게시물 수정","operationId":"revisePost","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoPostResponse"}}}}}},"delete":{"tags":["게시물 기능"],"summary":"게시물 삭제","operationId":"removePost","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoVoid"}}}}}}},"/api/admissions/admin/{admissionId}":{"put":{"tags":["관리자 기능"],"summary":"합격/불합격 결과 수정 (ADMIN)","operationId":"update","parameters":[{"name":"admissionId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAdmissionResultRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoLong"}}}}}},"delete":{"tags":["관리자 기능"],"summary":"합격/불합격 결과 삭제 (ADMIN)","operationId":"delete","parameters":[{"name":"admissionId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoVoid"}}}}}}},"/api/admin/users/{id}/approve":{"put":{"tags":["관리자 기능"],"summary":"특정 사용자 승인 (PENDING → USER)","operationId":"approveUserProfile","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoVoid"}}}}}}},"/api/v1/users/me/complete":{"post":{"tags":["유저 기능"],"summary":"추가 정보 입력(회원가입용)","operationId":"completeProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoUserProfileResponse"}}}}}}},"/api/v1/projects/create":{"post":{"tags":["프로젝트 기능"],"summary":"프로젝트 생성","operationId":"createProject","requestBody":{"content":{"multipart/form-data":{"schema":{"required":["request","thumbnail"],"type":"object","properties":{"request":{"$ref":"#/components/schemas/ProjectRequest"},"thumbnail":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoProjectListResponse"}}}}}}},"/api/v1/posts":{"get":{"tags":["게시물 조회 기능"],"summary":"최신순 게시물 목록 조회","operationId":"getPosts","parameters":[{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"minimum":0,"type":"integer","default":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"minimum":1,"type":"integer","default":10}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":["createdAt,DESC"]}},{"name":"tags","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoPagedResponsePostListResponse"}}}}}},"post":{"tags":["게시물 기능"],"summary":"게시물 작성","operationId":"publishPost","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoPostResponse"}}}}}}},"/api/v1/posts/images":{"post":{"tags":["게시글 이미지 기능"],"summary":"게시글 이미지 업로드","operationId":"uploadImage","requestBody":{"content":{"multipart/form-data":{"schema":{"required":["file"],"type":"object","properties":{"file":{"type":"string","description":"업로드할 이미지 파일","format":"binary"}}}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoString"}}}}}}},"/api/v1/likes/{postId}":{"post":{"tags":["좋아요 기능"],"summary":"게시글 좋아요","operationId":"likePost","parameters":[{"name":"postId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoString"}}}}}},"delete":{"tags":["좋아요 기능"],"summary":"좋아요 취소","operationId":"unlikePost","parameters":[{"name":"postId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoString"}}}}}}},"/api/v1/intros":{"get":{"tags":["텃밭인사"],"summary":"자기소개 목록 조회","operationId":"getIntroList","parameters":[{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"minimum":0,"type":"integer","default":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"minimum":1,"type":"integer","default":10}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":["createdAt,DESC"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoPagedResponseIntroResponse"}}}}}},"post":{"tags":["텃밭인사"],"summary":"자기소개 작성","operationId":"createIntro","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntroCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoIntroResponse"}}}}}}},"/api/v1/comment/{postId}/comments":{"get":{"tags":["댓글 기능"],"summary":"게시물의 댓글 목록 조회","operationId":"getComments","parameters":[{"name":"postId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoListCommentResponse"}}}}}},"post":{"tags":["댓글 기능"],"summary":"게시물에 댓글 등록","operationId":"addComment","parameters":[{"name":"postId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoCommentResponse"}}}}}}},"/api/v1/ai/chat":{"post":{"tags":["챗봇 기능"],"summary":"챗봇","operationId":"chat","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessageRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ChatMessageResponse"}}}}}}},"/api/auth/reissue":{"post":{"tags":["인증,인가"],"summary":"토큰 재발급","operationId":"reissue","parameters":[{"name":"refreshToken","in":"cookie","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoAccessTokenResponse"}}}}}}},"/api/auth/me/logout":{"post":{"tags":["인증,인가"],"summary":"로그아웃","operationId":"logout","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoString"}}}}}}},"/api/admissions/lookup":{"post":{"tags":["합격/불합격"],"summary":"합격/불합격 조회 (공개 POST)","operationId":"lookup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoLookupResponse"}}}}}}},"/api/admissions/admin":{"get":{"tags":["관리자 기능"],"summary":"합격/불합격 전체 목록 조회 (ADMIN)","operationId":"getAll","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoListAdmissionResultResponse"}}}}}},"post":{"tags":["관리자 기능"],"summary":"합격/불합격 결과 생성 (ADMIN)","operationId":"create","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAdmissionResultRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoLong"}}}}}}},"/api/v1/users/public/profile/{nickname}":{"get":{"tags":["유저 기능"],"summary":"상대방 공개 프로필 조회","operationId":"getPublicProfileByNickname","parameters":[{"name":"nickname","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"minimum":0,"type":"integer","default":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"minimum":1,"type":"integer","default":20}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoUserPublicProfileResponse"}}}}}}},"/api/v1/users/me/role":{"get":{"tags":["유저 기능"],"summary":"역할 조회","operationId":"getCurrentUserRole","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoString"}}}}}}},"/api/v1/users/me/get/profile":{"get":{"tags":["유저 기능"],"summary":"정보 조회","operationId":"getCurrentUserProfile","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoUserProfileResponse"}}}}}}},"/api/v1/users/me/activity":{"get":{"tags":["유저 기능"],"summary":"유저 활동(내가 쓴 글/댓글/좋아요 개수) 조회","operationId":"getActivitySummary","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoUserActivityResponse"}}}}}}},"/api/v1/tags":{"get":{"tags":["태그 기능"],"summary":"전체 태그 조회","description":"태그 목록 조회 성공","operationId":"getAllTags","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoListString"}}}}}}},"/api/v1/projects":{"get":{"tags":["프로젝트 기능"],"summary":"전체 프로젝트 목록 조회","operationId":"getAllProjects","parameters":[{"name":"pageable","in":"query","required":true,"schema":{"$ref":"#/components/schemas/Pageable"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoListProjectListResponse"}}}}}}},"/api/v1/posts/{postId}":{"get":{"tags":["게시물 조회 기능"],"summary":"단일 게시물 상세 조회","operationId":"getPostDetail","parameters":[{"name":"postId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoPostDetailResponse"}}}}}}},"/api/v1/posts/tags/{tagName}":{"get":{"tags":["게시물 조회 기능"],"summary":"태그별 게시물 조회","operationId":"getPostsByTag","parameters":[{"name":"tagName","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"minimum":0,"type":"integer","default":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"minimum":1,"type":"integer","default":10}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":["createdAt,DESC"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoPagedResponsePostListResponse"}}}}}}},"/api/v1/posts/search":{"get":{"tags":["게시물 조회 기능"],"summary":"게시물 검색","operationId":"searchPosts","parameters":[{"name":"pageable","in":"query","required":true,"schema":{"$ref":"#/components/schemas/Pageable"}},{"name":"keyword","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoPagedResponsePostListResponse"}}}}}}},"/api/v1/posts/popular":{"get":{"tags":["게시물 조회 기능"],"summary":"주간 인기 게시물 조회","operationId":"getWeeklyPopularPosts","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoListPostPopularResponse"}}}}}}},"/api/v1/posts/me":{"get":{"tags":["게시물 조회 기능"],"summary":"내가 쓴 게시물 목록 조회","operationId":"getMyPosts","parameters":[{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"minimum":0,"type":"integer","default":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"minimum":1,"type":"integer","default":10}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":["createdAt,DESC"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoPagedResponsePostListResponse"}}}}}}},"/api/v1/posts/feed":{"get":{"tags":["게시물 조회 기능"],"summary":"홈 피드 조회","operationId":"getHomeFeed","parameters":[{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"minimum":0,"type":"integer","default":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"minimum":1,"type":"integer","default":10}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":["createdAt,DESC"]}},{"name":"tags","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoHomeFeedResponse"}}}}}}},"/api/v1/posts/commits/{postId}":{"get":{"tags":["커밋 조회 기능"],"summary":"게시물 커밋 내역","operationId":"getCommitHistories","parameters":[{"name":"postId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoListCommitHistoryResponse"}}}}}}},"/api/v1/likes/{postId}/liked":{"get":{"tags":["좋아요 기능"],"summary":"내가 해당 게시글에 좋아요 눌렀는지 여부 조회","operationId":"isPostLiked","parameters":[{"name":"postId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoBoolean"}}}}}}},"/api/v1/likes/me":{"get":{"tags":["좋아요 기능"],"summary":"내가 누른 좋아요 목록 조회","operationId":"getMyLikes","parameters":[{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"minimum":0,"type":"integer","default":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"minimum":1,"type":"integer","default":10}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":["createdAt,DESC"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoPagedResponseLikeResponse"}}}}}}},"/api/v1/comment/me/comments":{"get":{"tags":["댓글 기능"],"summary":"내가 단 댓글 목록 조회","operationId":"getMyComments","parameters":[{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"minimum":0,"type":"integer","default":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"minimum":1,"type":"integer","default":10}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":["createdAt,DESC"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoPagedResponseCommentListResponse"}}}}}}},"/api/admin/users/pending":{"get":{"tags":["관리자 기능"],"summary":"대기 중인(PENDING) 사용자 전체 조회","operationId":"getPendingUsers","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoListPendingUserResponse"}}}}}}},"/api/v1/users/me/withdraw":{"delete":{"tags":["유저 기능"],"summary":"계정 삭제","operationId":"withdraw","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoString"}}}}}}},"/api/v1/projects/delete/{projectId}":{"delete":{"tags":["프로젝트 기능"],"summary":"프로젝트 삭제","operationId":"deleteProject","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoString"}}}}}}},"/api/v1/intros/{introId}":{"delete":{"tags":["텃밭인사"],"summary":"자기소개 삭제","operationId":"deleteIntro","parameters":[{"name":"introId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoVoid"}}}}}}},"/api/v1/comment/{commentId}":{"delete":{"tags":["댓글 기능"],"summary":"댓글 삭제","operationId":"deleteComment","parameters":[{"name":"commentId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseDtoString"}}}}}}}},"components":{"schemas":{"UpdateProfileRequest":{"required":["email","gamjaBatch","position","studentNumber"],"type":"object","properties":{"email":{"type":"string","description":"이메일","example":"jihun@example.com"},"studentNumber":{"type":"string","description":"학번","example":"20231234"},"gamjaBatch":{"type":"integer","description":"감자 동아리 기수","format":"int32","example":9},"position":{"type":"string","description":"포지션/직책","example":"BACKEND","enum":["BACKEND","FRONTEND","DESIGNER","APP_DEVELOPER"]}}},"ResponseDtoUserProfileResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/UserProfileResponse"},"timestamp":{"type":"integer","format":"int64"}}},"UserProfileResponse":{"type":"object","properties":{"githubId":{"type":"string","description":"Github 아이디","example":"parkjihun"},"nickname":{"type":"string","description":"닉네임","example":"지훈"},"name":{"type":"string","description":"이름","example":"박지훈"},"email":{"type":"string","description":"이메일","example":"jihun@example.com"},"profileImageUrl":{"type":"string","description":"프로필 이미지 URL","example":"https://example-bucket.s3.amazonaws.com/profile.jpg"},"position":{"type":"string","description":"직책/포지션","example":"BACKEND"},"role":{"type":"string","description":"유저 역할","example":"USER"},"studentNumber":{"type":"string","description":"학번","example":"20231234"},"gamjaBatch":{"type":"integer","description":"감자 동아리 기수","format":"int32","example":9},"createdAt":{"type":"string","description":"생성 일시","example":"2025-08-04T15:30:00"},"updatedAt":{"type":"string","description":"수정 일시","example":"2025-08-05T10:20:30"}}},"ProjectRequest":{"type":"object","properties":{"title":{"type":"string","description":"프로젝트 제목","example":"Gamza Tech Blog 리뉴얼"},"description":{"type":"string","description":"프로젝트 설명","example":"Gradle, Docker, Jenkins 를 활용한 블로그 플랫폼 개발"}},"description":"프로젝트 생성/수정 요청 DTO"},"ProjectListResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"snippet":{"type":"string"},"thumbnailUrl":{"type":"string"}}},"ResponseDtoProjectListResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/ProjectListResponse"},"timestamp":{"type":"integer","format":"int64"}}},"ProfileImageRequest":{"required":["imageFile"],"type":"object","properties":{"imageFile":{"type":"string","format":"binary"}}},"ProfileImageResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"imageUrl":{"type":"string"}}},"ResponseDtoProfileImageResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/ProfileImageResponse"},"timestamp":{"type":"integer","format":"int64"}}},"PostRequest":{"required":["content","tags","title"],"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"commitMessage":{"type":"string"}}},"PostResponse":{"type":"object","properties":{"postId":{"type":"integer","format":"int64"},"authorGithubId":{"type":"string"},"repositoryName":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"commitMessage":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"ResponseDtoPostResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/PostResponse"},"timestamp":{"type":"integer","format":"int64"}}},"UpdateAdmissionResultRequest":{"type":"object","properties":{"name":{"maxLength":100,"minLength":0,"type":"string"},"phone":{"maxLength":20,"minLength":0,"pattern":"^[0-9\\s+\\-()]*$","type":"string"},"status":{"type":"string","enum":["PASS","FAIL"]}}},"ResponseDtoLong":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"integer","format":"int64"},"timestamp":{"type":"integer","format":"int64"}}},"ResponseDtoVoid":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"object"},"timestamp":{"type":"integer","format":"int64"}}},"UserProfileRequest":{"required":["gamjaBatch","position","studentNumber"],"type":"object","properties":{"email":{"type":"string","description":"이메일","example":"jihun@example.com"},"studentNumber":{"type":"string","description":"학번","example":"20231234"},"gamjaBatch":{"type":"integer","description":"감자 동아리 기수","format":"int32","example":9},"position":{"type":"string","description":"포지션/직책","example":"BACKEND","enum":["BACKEND","FRONTEND","DESIGNER","APP_DEVELOPER"]}}},"ResponseDtoString":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"string"},"timestamp":{"type":"integer","format":"int64"}}},"IntroCreateRequest":{"required":["content"],"type":"object","properties":{"content":{"maxLength":1000,"minLength":2,"type":"string"}}},"IntroResponse":{"type":"object","properties":{"introId":{"type":"integer","format":"int64"},"userId":{"type":"integer","format":"int64"},"nickname":{"type":"string"},"profileImageUrl":{"type":"string"},"content":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"ResponseDtoIntroResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/IntroResponse"},"timestamp":{"type":"integer","format":"int64"}}},"CommentRequest":{"required":["content"],"type":"object","properties":{"content":{"maxLength":1000,"minLength":0,"type":"string","description":"댓글 내용","example":"글 감사합니다."},"parentCommentId":{"type":"integer","format":"int64"}}},"CommentResponse":{"type":"object","properties":{"commentId":{"type":"integer","format":"int64"},"writer":{"type":"string"},"writerProfileImageUrl":{"type":"string"},"content":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"replies":{"type":"array","items":{"$ref":"#/components/schemas/CommentResponse"}}}},"ResponseDtoCommentResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/CommentResponse"},"timestamp":{"type":"integer","format":"int64"}}},"ChatMessageRequest":{"required":["message"],"type":"object","properties":{"message":{"maxLength":2000,"minLength":0,"type":"string"}}},"ChatMessageResponse":{"type":"object","properties":{"content":{"type":"string"}}},"AccessTokenResponse":{"type":"object","properties":{"authorization":{"type":"string"}}},"ResponseDtoAccessTokenResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/AccessTokenResponse"},"timestamp":{"type":"integer","format":"int64"}}},"LookupRequest":{"required":["name","phone"],"type":"object","properties":{"name":{"type":"string"},"phone":{"pattern":"^01[016789]\\d{7,8}$","type":"string"}}},"LookupResponse":{"type":"object","properties":{"status":{"type":"string","enum":["PASS","FAIL"]}}},"ResponseDtoLookupResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/LookupResponse"},"timestamp":{"type":"integer","format":"int64"}}},"CreateAdmissionResultRequest":{"required":["name","phone","status"],"type":"object","properties":{"name":{"type":"string"},"phone":{"pattern":"^01[016789]\\d{7,8}$","type":"string"},"status":{"type":"string","enum":["PASS","FAIL"]}}},"PagedResponsePostListResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/PostListResponse"}},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer","format":"int32"}}},"PostListResponse":{"type":"object","properties":{"postId":{"type":"integer","format":"int64"},"title":{"type":"string"},"contentSnippet":{"type":"string"},"writer":{"type":"string"},"writerProfileImageUrl":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"tags":{"type":"array","items":{"type":"string"}},"thumbnailImageUrl":{"type":"string"}}},"ResponseDtoUserPublicProfileResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/UserPublicProfileResponse"},"timestamp":{"type":"integer","format":"int64"}}},"UserActivityResponse":{"type":"object","properties":{"likedPostCount":{"type":"integer","description":"좋아요 한 게시물 수","format":"int32","example":5},"writtenPostCount":{"type":"integer","description":"작성한 게시물 수","format":"int32","example":10},"writtenCommentCount":{"type":"integer","description":"작성한 댓글 수","format":"int32","example":20}}},"UserMiniProfileResponse":{"type":"object","properties":{"profileImageUrl":{"type":"string"},"nickname":{"type":"string"},"gamjaBatch":{"type":"integer","format":"int32"}}},"UserPublicProfileResponse":{"type":"object","properties":{"profile":{"$ref":"#/components/schemas/UserMiniProfileResponse"},"activity":{"$ref":"#/components/schemas/UserActivityResponse"},"posts":{"$ref":"#/components/schemas/PagedResponsePostListResponse"}}},"ResponseDtoUserActivityResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/UserActivityResponse"},"timestamp":{"type":"integer","format":"int64"}}},"ResponseDtoListString":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"type":"string"}},"timestamp":{"type":"integer","format":"int64"}}},"Pageable":{"type":"object","properties":{"page":{"minimum":0,"type":"integer","format":"int32"},"size":{"minimum":1,"type":"integer","format":"int32"},"sort":{"type":"array","items":{"type":"string"}}}},"ResponseDtoListProjectListResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectListResponse"}},"timestamp":{"type":"integer","format":"int64"}}},"ResponseDtoPagedResponsePostListResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/PagedResponsePostListResponse"},"timestamp":{"type":"integer","format":"int64"}}},"PostDetailResponse":{"type":"object","properties":{"postId":{"type":"integer","format":"int64"},"title":{"type":"string"},"content":{"type":"string"},"writer":{"type":"string"},"writerProfileImageUrl":{"type":"string"},"likesCount":{"type":"integer","format":"int32"},"githubId":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"tags":{"type":"array","items":{"type":"string"}},"comments":{"type":"array","items":{"$ref":"#/components/schemas/CommentResponse"}}}},"ResponseDtoPostDetailResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/PostDetailResponse"},"timestamp":{"type":"integer","format":"int64"}}},"PostPopularResponse":{"type":"object","properties":{"postId":{"type":"integer","format":"int64"},"title":{"type":"string"},"writer":{"type":"string"},"writerProfileImageUrl":{"type":"string"}}},"ResponseDtoListPostPopularResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/PostPopularResponse"}},"timestamp":{"type":"integer","format":"int64"}}},"HomeFeedResponse":{"type":"object","properties":{"weeklyPopular":{"type":"array","items":{"$ref":"#/components/schemas/PostPopularResponse"}},"latest":{"$ref":"#/components/schemas/PagedResponsePostListResponse"},"allTags":{"type":"array","items":{"type":"string"}}}},"ResponseDtoHomeFeedResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/HomeFeedResponse"},"timestamp":{"type":"integer","format":"int64"}}},"CommitHistoryResponse":{"type":"object","properties":{"sha":{"type":"string"},"message":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"ResponseDtoListCommitHistoryResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/CommitHistoryResponse"}},"timestamp":{"type":"integer","format":"int64"}}},"ResponseDtoBoolean":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"boolean"},"timestamp":{"type":"integer","format":"int64"}}},"LikeResponse":{"type":"object","properties":{"likeId":{"type":"integer","format":"int64"},"postId":{"type":"integer","format":"int64"},"title":{"type":"string"},"contentSnippet":{"type":"string"},"writer":{"type":"string"},"writerProfileImageUrl":{"type":"string"},"thumbnailImageUrl":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"tags":{"type":"array","items":{"type":"string"}}}},"PagedResponseLikeResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/LikeResponse"}},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer","format":"int32"}}},"ResponseDtoPagedResponseLikeResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/PagedResponseLikeResponse"},"timestamp":{"type":"integer","format":"int64"}}},"PagedResponseIntroResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/IntroResponse"}},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer","format":"int32"}}},"ResponseDtoPagedResponseIntroResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/PagedResponseIntroResponse"},"timestamp":{"type":"integer","format":"int64"}}},"ResponseDtoListCommentResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/CommentResponse"}},"timestamp":{"type":"integer","format":"int64"}}},"CommentListResponse":{"type":"object","properties":{"commentId":{"type":"integer","format":"int64"},"content":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"postId":{"type":"integer","format":"int64"},"postTitle":{"type":"string"}}},"PagedResponseCommentListResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/CommentListResponse"}},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer","format":"int32"}}},"ResponseDtoPagedResponseCommentListResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/PagedResponseCommentListResponse"},"timestamp":{"type":"integer","format":"int64"}}},"AdmissionResultResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"phoneDigits":{"type":"string"},"status":{"type":"string","enum":["PASS","FAIL"]}}},"ResponseDtoListAdmissionResultResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdmissionResultResponse"}},"timestamp":{"type":"integer","format":"int64"}}},"PendingUserResponse":{"type":"object","properties":{"userId":{"type":"integer","description":"유저 ID","format":"int64","example":12},"gamjaBatch":{"type":"integer","description":"감자기수","format":"int32","example":9},"name":{"type":"string","description":"이름","example":"박지훈"},"position":{"type":"string","description":"포지션/직책","example":"BACKEND"}}},"ResponseDtoListPendingUserResponse":{"type":"object","properties":{"status":{"type":"integer","format":"int32"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/PendingUserResponse"}},"timestamp":{"type":"integer","format":"int64"}}}}}}