diff --git a/apps/web/src/apis/.bruno-cache/hashes.json b/apps/web/src/apis/.bruno-cache/hashes.json new file mode 100644 index 00000000..77597a2a --- /dev/null +++ b/apps/web/src/apis/.bruno-cache/hashes.json @@ -0,0 +1,749 @@ +{ + "version": "1.0", + "hashes": { + "/tmp/bruno/Solid Connection/1) 인증 [Auth]/folder.bru": { + "hash": "8e91265cf125a3cf72adbb5f1d5da9060a4d91e482d7f2deb494c8e49b5edee5", + "lastGenerated": "2026-02-02T16:31:48.670Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/1) 인증 [Auth]/로그아웃 [sign-out].bru": { + "hash": "25517b361f9c899eb841e477f7490a86f14dca603bcb5ebe3ae0a672cdf2a261", + "lastGenerated": "2026-02-02T16:31:48.670Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/1) 인증 [Auth]/애플 인증 [apple-auth].bru": { + "hash": "0c465126248a544c43d2e31aa2bcb6509b76404dc19d05f63762b8b98e46658e", + "lastGenerated": "2026-02-02T16:31:48.670Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/1) 인증 [Auth]/엑세스 토큰 재발급 [refresh-token].bru": { + "hash": "fa5f5b0551470c64fa4c46973d9a0e142ee83fea519ec402c2241075f7b926ac", + "lastGenerated": "2026-02-02T16:31:48.671Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/1) 인증 [Auth]/이메일 로그인 [email-login].bru": { + "hash": "14841bd2bb8fe0ea0df09bb3f78b46f1cc27b0afcc73d78e0a94dea7ddd6dd1a", + "lastGenerated": "2026-02-02T16:31:48.671Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/1) 인증 [Auth]/이메일 인증 [email-verification].bru": { + "hash": "eb2bf7b06ad35c038fb0bcb8c50260c567ba437eb5f426706dc10a7d82c79def", + "lastGenerated": "2026-02-02T16:31:48.671Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/1) 인증 [Auth]/카카오 인증 [kakao-auth].bru": { + "hash": "10f82cf1ecb3d77a697c63b5532be860f29d00adb960678eafed7c66ec91ee15", + "lastGenerated": "2026-02-02T16:31:48.671Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/1) 인증 [Auth]/회원 탈퇴 [account].bru": { + "hash": "131b2d3c540f7ce07a82d2691920c0da11431f8f4dc7bd4401b6a8d7c402230b", + "lastGenerated": "2026-02-02T16:31:48.671Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/1) 인증 [Auth]/회원가입 [sign-up].bru": { + "hash": "5e62a63352a4ee87784d767c63a51134fd5c3986a8af9c0cb1204db313a3ae55", + "lastGenerated": "2026-02-02T16:31:48.671Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Auth/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/10) 소식지 [news]/folder.bru": { + "hash": "77d250ab9a6916aa139953f7ecf63ead0fe28f4ca59c6adf6a2578c03f0a97ae", + "lastGenerated": "2026-02-02T16:31:48.671Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/10) 소식지 [news]/소식지 목록 [news-list].bru": { + "hash": "94aa9bcbac824d0a939ab6ea2599b4ae0eab3c80b7befd4cd2da0e9e9f99e080", + "lastGenerated": "2026-02-02T16:31:48.672Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/news/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/news/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/10) 소식지 [news]/소식지 삭제 [news].bru": { + "hash": "8f20e5a662c4f08fb4d870c304f54fd3996f7a37cac7d5854a3d32a6edf88c6a", + "lastGenerated": "2026-02-02T16:31:48.672Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/news/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/news/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/10) 소식지 [news]/소식지 수정 [update-news].bru": { + "hash": "9f3f4b0266d0f24938f828f1edd56f65b0720adfbae4b7bc25c26da7f2593b45", + "lastGenerated": "2026-02-02T16:31:48.672Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/news/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/news/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/10) 소식지 [news]/소식지 좋아요 [like-news].bru": { + "hash": "e68b301ce17e142128b8be86fcc6fde3ce160bfea415e41941a5a6e29c2c25be", + "lastGenerated": "2026-02-02T16:31:48.672Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/news/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/news/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/10) 소식지 [news]/소식지 좋아요 취소 [like-news].bru": { + "hash": "da6a6301da82e9fa986f6452a47007e9f4c4fd11b4aad21512f1fab5bbcd6fa9", + "lastGenerated": "2026-02-02T16:31:48.672Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/news/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/news/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/10) 소식지 [news]/소식지 추가 [create-news].bru": { + "hash": "a7cd6c83cefeb515bceaa886db980975b8ba39453348b8939e667b025a827638", + "lastGenerated": "2026-02-02T16:31:48.672Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/news/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/news/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/11) 신고 [reports]/folder.bru": { + "hash": "e74c3068cfeb9a71ea1175258c3ae0030b5dbd10a0e34aa89f92d23e65c3df2d", + "lastGenerated": "2026-02-02T16:31:48.672Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/11) 신고 [reports]/신고하기 [report].bru": { + "hash": "75e57efa5746b4593d00f47bf99e39f27b286ee40175b37f18aefbf35fa13461", + "lastGenerated": "2026-02-02T16:31:48.672Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/reports/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/reports/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/11) 채팅 [chat]/folder.bru": { + "hash": "0dff2d5c0f3e2990704653e992ef17f8d7396bc5b67b1777c183fd5b41dcda73", + "lastGenerated": "2026-02-02T16:31:48.672Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/11) 채팅 [chat]/채팅 내역 [chat-messages].bru": { + "hash": "55ddf51cbcf809898d575c9b912678ce62a3bf04f241aa223c550652bcf16628", + "lastGenerated": "2026-02-02T16:31:48.673Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/chat/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/chat/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/11) 채팅 [chat]/채팅방 목록 [chat-rooms].bru": { + "hash": "042d1632b86576a277c1369a91bb04231d568c3dacfab932fa9b4d3ea42aabe0", + "lastGenerated": "2026-02-02T16:31:48.673Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/chat/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/chat/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/11) 채팅 [chat]/채팅방 읽음 [read-chat-room].bru": { + "hash": "8539a5a9c62e2ef8a9cc515f23f77c2dd9257df00d403fc8bf300553a0343ec6", + "lastGenerated": "2026-02-02T16:31:48.673Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/chat/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/chat/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/11) 채팅 [chat]/채팅방 파트너 [chat-partner].bru": { + "hash": "6fb7336c127afd330a806d3deb03b3ecadcb341185f9c9e0f4c2afc036d772ad", + "lastGenerated": "2026-02-02T16:31:48.673Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/chat/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/chat/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/2) 대학교 [universities]/folder.bru": { + "hash": "b2ecc044eba5b951c1e0bf3d204f45996bed91ddcf86cf55efd717aae98590ff", + "lastGenerated": "2026-02-02T16:31:48.673Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/2) 대학교 [universities]/univ-apply-infos/folder.bru": { + "hash": "419e88968bddd7d83ae2bf4e43d5ba08ba586f855219d7adfd9b438e1e6055ff", + "lastGenerated": "2026-02-02T16:31:48.673Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/2) 대학교 [universities]/univ-apply-infos/맞춤 대학 추천 [recommended-universities].bru": { + "hash": "5e655440fe597146c451bf42b712a78b00653437854bc794e0f6dfd175d7de8e", + "lastGenerated": "2026-02-02T16:31:48.673Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/2) 대학교 [universities]/univ-apply-infos/위시 학교 목록 [wish-list].bru": { + "hash": "1974840ffbfbe742fcdbe4ca74ed928986848a20acb22e6a04b4e9ffff03bfed", + "lastGenerated": "2026-02-02T16:31:48.673Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/2) 대학교 [universities]/univ-apply-infos/위시 학교 삭제 [wish].bru": { + "hash": "85e1414b164549bebdb4998de2c3e99c544891bb7c0afd89f5f8d924c2ff7925", + "lastGenerated": "2026-02-02T16:31:48.673Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/2) 대학교 [universities]/univ-apply-infos/위시 학교 추가 [add-wish].bru": { + "hash": "764146688e833c0cdc4fc735972c97ed88d4872e243eea88a507495f82ac1163", + "lastGenerated": "2026-02-02T16:31:48.674Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/2) 대학교 [universities]/univ-apply-infos/위시 학교 확인 [is-wish].bru": { + "hash": "a9791d3d2ee69ec8e2e99ce7885450e24e668df29800e5c013c1468eda87a8d1", + "lastGenerated": "2026-02-02T16:31:48.674Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/2) 대학교 [universities]/univ-apply-infos/학교 상세 정보 [university-detail].bru": { + "hash": "c642309fe0143efefb56f309fb11c4f4df0003e8101c639d484ada49ae2a48d5", + "lastGenerated": "2026-02-02T16:31:48.674Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/2) 대학교 [universities]/univ-apply-infos/학교 텍스트 검색 [search-text].bru": { + "hash": "e5af69943f47fab044c04b0ffeafa12aa5704badb650407ffa8f4d28be7513b2", + "lastGenerated": "2026-02-02T16:31:48.674Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/2) 대학교 [universities]/univ-apply-infos/학교 필터 검색 [search-filter].bru": { + "hash": "43e54e4fc780977cccd92f0993e2845aa9905a87b3056648560b3a5c302b9683", + "lastGenerated": "2026-02-02T16:31:48.674Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/2) 대학교 [universities]/universities/folder.bru": { + "hash": "df66fcd336e7d2961d8177eda63e497d085a07056bce3f45711532046b00190f", + "lastGenerated": "2026-02-02T16:31:48.674Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/2) 대학교 [universities]/universities/권역-국가별 대학 [by-region-country].bru": { + "hash": "9a960d71ef2c7fd6d5d4e8fb0379c5aeb32501e957f08bcd3c129b2483704b24", + "lastGenerated": "2026-02-02T16:31:48.674Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/universities/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/3) 마이페이지 [MyPage]/folder.bru": { + "hash": "ee40d5ac24c6faf84a2948a74ea3ea21015cf35e39b2a3d94bf03c1e40bd726d", + "lastGenerated": "2026-02-02T16:31:48.674Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/3) 마이페이지 [MyPage]/관심 권역-국가 변경 [interested-region-country].bru": { + "hash": "dfd1b884df32c684ce5f0612bff912ac4cdc41df9150868c3c8f79374fdcd7f1", + "lastGenerated": "2026-02-02T16:31:48.674Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/MyPage/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/MyPage/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/3) 마이페이지 [MyPage]/내 정보 수정 [profile].bru": { + "hash": "eeb584788dccf6b28089051563033edd57c5e955963ab0e4bb03d15b242e3e82", + "lastGenerated": "2026-02-02T16:31:48.674Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/MyPage/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/MyPage/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/3) 마이페이지 [MyPage]/내 정보 조회 [profile].bru": { + "hash": "766091a19773fd570abcae89ecffe7e6195bf1c44032736e35a1f2888954f774", + "lastGenerated": "2026-02-02T16:31:48.675Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/MyPage/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/MyPage/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/3) 마이페이지 [MyPage]/비밀번호 변경 [password].bru": { + "hash": "fe0ecc49311616c8abddbb6abe6dad05f6b36ad069c2fcba42e50ba007b0ffa0", + "lastGenerated": "2026-02-02T16:31:48.675Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/MyPage/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/MyPage/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/4) 지원정보 [applications]/folder.bru": { + "hash": "0c6da4142e7d342d09544c4e3d5e11e8942c099256ed844baccdce08e472f08b", + "lastGenerated": "2026-02-02T16:31:48.675Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/4) 지원정보 [applications]/경쟁자 현황 [competitors].bru": { + "hash": "04b9c5905d7efe479a42a4dda65dc4606a9a95566cea674f388b36a4615d17ed", + "lastGenerated": "2026-02-02T16:31:48.675Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/applications/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/applications/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/4) 지원정보 [applications]/지원서 제출 [submit-application].bru": { + "hash": "b2d23f77f434c6b461db69923826e798aa17bc1e0e47b9717f6bef21c48e2bd1", + "lastGenerated": "2026-02-02T16:31:48.675Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/applications/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/applications/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/4) 지원정보 [applications]/지원자 현황 [applicants].bru": { + "hash": "36a2c14b7a5b985de9854c1c3ba7e2d1ca453e3428defa158f7d12e5afec3279", + "lastGenerated": "2026-02-02T16:31:48.675Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/applications/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/applications/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/boards/folder.bru": { + "hash": "a6b155502eef19cb047e473f8de89a30279aa539ad87f5639ffe5e993d1c3dc4", + "lastGenerated": "2026-02-02T16:31:48.675Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/boards/게시판 목록 [board-list].bru": { + "hash": "394d5d4736e5e47c74cdb0a26d2b51af7391012d724fb6e14534365c017ce471", + "lastGenerated": "2026-02-02T16:31:48.675Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/boards/게시판 조회 [board].bru": { + "hash": "07a90ceb0610dd4d59f202f94a13b3257e8d441e8eb390ed1c91320ca69f9e82", + "lastGenerated": "2026-02-02T16:31:48.675Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/comments/folder.bru": { + "hash": "ba47363fc0ca5bf12c050c78cd9730fc630cc2fd88ba51dba22a1fa1e39413b8", + "lastGenerated": "2026-02-02T16:31:48.676Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/comments/댓글 삭제 [comment].bru": { + "hash": "cc52f32359e90a5628c989572bcfd0c12733eba0ffbe808196592f2643750c7e", + "lastGenerated": "2026-02-02T16:31:48.676Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/comments/댓글 수정 [update-comment].bru": { + "hash": "51091a654511add0b4e2e272d107d265fe6a9f9bf272fd14582aa8d57a3276d1", + "lastGenerated": "2026-02-02T16:31:48.676Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/comments/댓글 작성 [create-comment].bru": { + "hash": "610d59af217778cf3ccf941ffbce53f88743a5e4d3ec6ff63e9ad60bb5ab7ca3", + "lastGenerated": "2026-02-02T16:31:48.676Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/folder.bru": { + "hash": "0a5ff57df866db18f569df2b1c433653249752d3088cd10eced762f39009ea4a", + "lastGenerated": "2026-02-02T16:31:48.676Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/posts/folder.bru": { + "hash": "12ad1ad8f64c94eb8503b32864ca8603787f6fba742c826cb42902f2d2611618", + "lastGenerated": "2026-02-02T16:31:48.676Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/posts/게시글 삭제 [post].bru": { + "hash": "b08c636fb60c50c90ef92ceaa3859cf90d08f62665feff3716487c36988c69c3", + "lastGenerated": "2026-02-02T16:31:48.676Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/posts/게시글 수정 [update-post].bru": { + "hash": "c8a74d3734252099a9b3c1469b3e69778350f0036458297c199cd4a555f4daa7", + "lastGenerated": "2026-02-02T16:31:48.676Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/posts/게시글 작성 [create-post].bru": { + "hash": "677ea297c854b23f0a81e5e462dff6b3c76e36e16f01a2436ad2b749ffc010b6", + "lastGenerated": "2026-02-02T16:31:48.676Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/posts/게시글 조회 [post-detail].bru": { + "hash": "716a48fb6a7da3d65c847e0ed69eaa009412deb3dfdbcd1743cd7ce01a35074e", + "lastGenerated": "2026-02-02T16:31:48.677Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/posts/게시글 좋아요 [like-post].bru": { + "hash": "225951fdd4400a052b6448cc213499bd17f496cae39cf004558ee480342b465f", + "lastGenerated": "2026-02-02T16:31:48.677Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/5) 커뮤니티 [community]/posts/게시글 좋아요 취소 [like-post].bru": { + "hash": "89a4567c80d225badd7f2279d55fc83b2ef88c2420c2c02474fbdb0b023c04c5", + "lastGenerated": "2026-02-02T16:31:48.677Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/community/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/6) 성적 [Scores]/folder.bru": { + "hash": "f0f1e22e55cbf59434a31261c5e6a7bc31e5756190354e67f18dac224f1386d6", + "lastGenerated": "2026-02-02T16:31:48.677Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/6) 성적 [Scores]/어학 성적 등록 [create-language-test].bru": { + "hash": "0ba4e708ae523dacf5923652107b417ea7dd48126241a4a9d0efa7e104dd1f60", + "lastGenerated": "2026-02-02T16:31:48.677Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Scores/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Scores/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/6) 성적 [Scores]/어학 성적 조회 [language-test-list].bru": { + "hash": "a4920b60fd5d7b32100f521ce9674d6c90d95f8d599377d0f2b1e5b19dc0a35a", + "lastGenerated": "2026-02-02T16:31:48.677Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Scores/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Scores/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/6) 성적 [Scores]/학점 등록 [create-gpa].bru": { + "hash": "2cda7a34a3fbac0fd1d6a17249c7c7599da720ac931aceab90dd258001a9707a", + "lastGenerated": "2026-02-02T16:31:48.677Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Scores/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Scores/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/6) 성적 [Scores]/학점 조회 [gpa-list].bru": { + "hash": "e51910e94eb0332399c59ea1bfe467c006832097f58cf300b183a398106257b6", + "lastGenerated": "2026-02-02T16:31:48.678Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Scores/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Scores/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/7) 어드민 [Admin]/folder.bru": { + "hash": "c12f1c3d068a98a389f58739bb2248ad7ca46bee451767fe8cb3604ab2086db4", + "lastGenerated": "2026-02-02T16:31:48.678Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/7) 어드민 [Admin]/어학 검증 및 수정 [verify-language-test].bru": { + "hash": "90c81b09eb92bdd54ea29dc7d09b68989f3b78695030b01c469b45a21c259c9b", + "lastGenerated": "2026-02-02T16:31:48.678Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Admin/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Admin/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/7) 어드민 [Admin]/어학 조회 [language-test-list].bru": { + "hash": "805896643a8bd6ebebdc344bfba80e60e593f535355b06955a41b1c3b040ef53", + "lastGenerated": "2026-02-02T16:31:48.678Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Admin/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Admin/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/7) 어드민 [Admin]/학점 검증 및 수정 [verify-gpa].bru": { + "hash": "b20528ee4bd55f451806e88b49036e43625a0e24039081005c14b0bb3431c04a", + "lastGenerated": "2026-02-02T16:31:48.678Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Admin/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Admin/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/7) 어드민 [Admin]/학점 조회 [gpa-list].bru": { + "hash": "2eac63409036a461b8cc3eca5694949ce3f9724b4356165bfcdc015b182ca589", + "lastGenerated": "2026-02-02T16:31:48.678Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Admin/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/Admin/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/8) 사용자 [users]/folder.bru": { + "hash": "6e63f3ece2b1f9780a444178433aad1216ef07a2f420f2e4c93eee99fc5d697e", + "lastGenerated": "2026-02-02T16:31:48.678Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/8) 사용자 [users]/닉네임 중복 검증 [nickname-exists].bru": { + "hash": "95558c2dd0a7049f4b24ff7dcf58346ea80519f2d8d70d6428c6daefb35fd8ed", + "lastGenerated": "2026-02-02T16:31:48.678Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/users/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/users/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/8) 사용자 [users]/유저 차단 [block-user].bru": { + "hash": "fa0aca42761f35fc4fc9ce1bd57ea100076e450ab7874f88f9cc7e27e1375a5a", + "lastGenerated": "2026-02-02T16:31:48.679Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/users/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/users/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/8) 사용자 [users]/유저 차단 취소 [unblock-user].bru": { + "hash": "faea682b3e75c55710ec4b92c30112aa8e811f4e50aa5d05925fcfc30b228e58", + "lastGenerated": "2026-02-02T16:31:48.679Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/users/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/users/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/8) 사용자 [users]/차단한 유저 목록 [blocked-users].bru": { + "hash": "b71235470d88d230dc0f78be82fe88f83b5d27be5374c722423994d96e86223c", + "lastGenerated": "2026-02-02T16:31:48.679Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/users/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/users/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/folder.bru": { + "hash": "0991756e4421a2e651828883b9bd3d77ee1a0122557ee7d86b99f4f7fc8fbb02", + "lastGenerated": "2026-02-02T16:31:48.679Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentee-only/folder.bru": { + "hash": "3763a8a195748562e91d4cb01b9bea9b50a378572f6ede24e6e6a4f3051e0108", + "lastGenerated": "2026-02-02T16:31:48.679Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentee-only/매칭된 멘토 목록 [matched-mentors].bru": { + "hash": "0af0fdc81eb2cafff9bf91f634a6caab39ec8674a3e5961e5b422aa90ac447a1", + "lastGenerated": "2026-02-02T16:31:48.679Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentee-only/멘토링 신청 [apply-mentoring].bru": { + "hash": "f01db17b66f4860bea554e711f8adf45d2f6aaf0224e916fe3ad30d15b1b2b38", + "lastGenerated": "2026-02-02T16:31:48.679Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentee-only/멘토링 확인 [confirm-mentoring].bru": { + "hash": "1cae59951d931b2817e779087d71a3f082622681b9a9a5467aa656eceae620bc", + "lastGenerated": "2026-02-02T16:31:48.679Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentee-only/신청한 멘토링 목록 [applied-mentorings].bru": { + "hash": "58ffa494789c972151bee9d3d1fd5f1d59dccd47b9ecb55f626a3fba870fea24", + "lastGenerated": "2026-02-02T16:31:48.679Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentor/folder.bru": { + "hash": "0309228eefe216ce5d99274be87b1672f7f60dafbf64560ba6f82326029a53f6", + "lastGenerated": "2026-02-02T16:31:48.679Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentor/멘토 목록 [mentor-list].bru": { + "hash": "817be70c53925e39d7503d737c1cc3bdb99e5a4fb043f4e266493befa4576cd6", + "lastGenerated": "2026-02-02T16:31:48.679Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentor/멘토 상세 [mentor-detail].bru": { + "hash": "830a8a800e3aade7678b40cd5ddcdfb45e58b5e9393afbf030baa1aa8b014ea0", + "lastGenerated": "2026-02-02T16:31:48.680Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentor-only/folder.bru": { + "hash": "3176b71042e68048761678dc33e46ea34a24b11cbaa4fb3373662c287ecf8140", + "lastGenerated": "2026-02-02T16:31:48.680Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentor-only/나의 멘토 페이지 [my-mentor-page].bru": { + "hash": "af32af4f06e745b9328b761b112ecd44f9dbfb9918a131a7abd9c72488a508fe", + "lastGenerated": "2026-02-02T16:31:48.680Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentor-only/나의 멘토 페이지 수정 [update-my-mentor-page].bru": { + "hash": "26ed6a8dc111253f4b34a93cd3df4d6f730f758a2b8a77c6af50af018395560d", + "lastGenerated": "2026-02-02T16:31:48.680Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentor-only/멘토링 수락-거절 [mentoring-status].bru": { + "hash": "9869b8f41bd4337e47b941a47887d55c465f94d530a7a688f742ba29859bfcc5", + "lastGenerated": "2026-02-02T16:31:48.680Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentor-only/멘토링 확인 [confirm-mentoring].bru": { + "hash": "4d6dd27804baa1abfbf2c830f4a4909479c8b66bbb8d375e81b94686f66d9360", + "lastGenerated": "2026-02-02T16:31:48.680Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentor-only/신청받은 멘토링 목록 [received-mentorings].bru": { + "hash": "f193dd8236f296c9f7a1a019a2373f37f9c1ae11ed811f62ad4ba7bc85b2c642", + "lastGenerated": "2026-02-02T16:31:48.680Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/9) 멘토 [mentor]/mentor-only/확인하지 않은 멘토링 수 [unconfirmed-mentoring-count].bru": { + "hash": "3015bf13815f41cf207cce046ab98a6a5e08e8fa2071af5e3aaf3f4e48253a84", + "lastGenerated": "2026-02-02T16:31:48.680Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/mentor/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/99) 카카오 API [kakao-api]/folder.bru": { + "hash": "beda2c003d02394e0afa2775dd617e700412635638dd0f67009cebe4fb45c289", + "lastGenerated": "2026-02-02T16:31:48.680Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/99) 카카오 API [kakao-api]/카카오 사용자 ID 목록 [kakao-user-ids].bru": { + "hash": "43efbd034ff7451fbb0e26d885d5439ee7d70c4fe5df6321d9d0712f137b7ae1", + "lastGenerated": "2026-02-02T16:31:48.680Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/kakao-api/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/kakao-api/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/99) 카카오 API [kakao-api]/카카오 연결 끊기 [kakao-unlink].bru": { + "hash": "d0c47c341f87a46e15799ee8ed244a8cf5e2371693379101a57701ba4c86dd46", + "lastGenerated": "2026-02-02T16:31:48.681Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/kakao-api/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/kakao-api/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/99) 카카오 API [kakao-api]/카카오 정보 조회 [kakao-info].bru": { + "hash": "8ed6efdb7133151694d33c3378dc0b8691d8f7e865616c8fff16182078430c24", + "lastGenerated": "2026-02-02T16:31:48.681Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/kakao-api/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/kakao-api/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/environments/dev.bru": { + "hash": "859dbdba0f24522be318a5e07a706330527ae5adfd036eba073ff1f12e5a4bc0", + "lastGenerated": "2026-02-02T16:31:48.681Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/environments/local.bru": { + "hash": "608fe37e11d05512f91884e62b55b0c23d3075d0cde747d61e990577d1f22114", + "lastGenerated": "2026-02-02T16:31:48.681Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/이미지 업로드 [image-upload]/folder.bru": { + "hash": "f294e3f7b8f7b16fdc0d091949fcb0b0654db6c53195e7def953c1d1a2ca80e6", + "lastGenerated": "2026-02-02T16:31:48.681Z", + "outputFiles": [] + }, + "/tmp/bruno/Solid Connection/이미지 업로드 [image-upload]/슬랙 알림 [slack-notification].bru": { + "hash": "c8ad069d7a05fc8e15783e0f4d2d08f8f84f6af5edc3ae3f1ebffe94435eec34", + "lastGenerated": "2026-02-02T16:31:48.681Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/image-upload/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/image-upload/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/이미지 업로드 [image-upload]/어학 성적표 업로드 [upload-language-test-report].bru": { + "hash": "0a1b2191be71cef5b605bd645df0d43f084db5da1db44bf465c3a40754fd0f4f", + "lastGenerated": "2026-02-02T16:31:48.681Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/image-upload/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/image-upload/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/이미지 업로드 [image-upload]/프로필 사진 업로드 [upload-profile-image].bru": { + "hash": "37a4dac04578a030de4fc83574b52c0c0c5968fb7ca00fdfcdf40ae243d28ff8", + "lastGenerated": "2026-02-02T16:31:48.681Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/image-upload/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/image-upload/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/이미지 업로드 [image-upload]/프로필 사진 업로드 가입전 [upload-profile-image-before-signup].bru": { + "hash": "134ab99c4221821407a41d1471b5a73ce04b7c3c1055bb6168ea269fbce66e0b", + "lastGenerated": "2026-02-02T16:31:48.681Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/image-upload/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/image-upload/apiDefinitions.ts" + ] + }, + "/tmp/bruno/Solid Connection/이미지 업로드 [image-upload]/학적 성적표 업로드 [upload-gpa-report].bru": { + "hash": "a65ca1a81af6b2cf74ba6594589928581b0a816368adaeee25c0da5c6eb088da", + "lastGenerated": "2026-02-02T16:31:48.681Z", + "outputFiles": [ + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/image-upload/api.ts", + "/home/runner/work/solid-connect-web/solid-connect-web/apps/web/src/apis/image-upload/apiDefinitions.ts" + ] + } + } +} \ No newline at end of file diff --git a/apps/web/src/apis/Admin/api.ts b/apps/web/src/apis/Admin/api.ts index 74b67368..7bd23362 100644 --- a/apps/web/src/apis/Admin/api.ts +++ b/apps/web/src/apis/Admin/api.ts @@ -143,34 +143,32 @@ export interface GpaListResponse { } export const adminApi = { - putVerifyLanguageTest: async (params: { - languageTestScoreId: string | number; - data?: VerifyLanguageTestRequest; - }): Promise => { + putVerifyLanguageTest: async (params: { languageTestScoreId: string | number, data?: VerifyLanguageTestRequest }): Promise => { const res = await axiosInstance.put( - `/admin/scores/language-tests/${params.languageTestScoreId}`, - params?.data, + `/admin/scores/language-tests/${params.languageTestScoreId}`, params?.data ); return res.data; }, - getLanguageTestList: async (params: { params?: Record }): Promise => { - const res = await axiosInstance.get(`/admin/scores/language-tests?page=1&size=10`, { - params: params?.params, - }); + getLanguageTestList: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/admin/scores/language-tests?page=1&size=10`, { params: params?.params } + ); return res.data; }, - putVerifyGpa: async (params: { - gpaScoreId: string | number; - data?: VerifyGpaRequest; - }): Promise => { - const res = await axiosInstance.put(`/admin/scores/gpas/${params.gpaScoreId}`, params?.data); + putVerifyGpa: async (params: { gpaScoreId: string | number, data?: VerifyGpaRequest }): Promise => { + const res = await axiosInstance.put( + `/admin/scores/gpas/${params.gpaScoreId}`, params?.data + ); return res.data; }, - getGpaList: async (params: { params?: Record }): Promise => { - const res = await axiosInstance.get(`/admin/scores/gpas`, { params: params?.params }); + getGpaList: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/admin/scores/gpas`, { params: params?.params } + ); return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/Admin/apiDefinitions.ts b/apps/web/src/apis/Admin/apiDefinitions.ts new file mode 100644 index 00000000..1545c45e --- /dev/null +++ b/apps/web/src/apis/Admin/apiDefinitions.ts @@ -0,0 +1,38 @@ +import type { GpaListResponse, LanguageTestListResponse, VerifyGpaRequest, VerifyGpaResponse, VerifyLanguageTestRequest, VerifyLanguageTestResponse } from './api'; + +export const adminApiDefinitions = { + putVerifyLanguageTest: { + method: 'PUT' as const, + path: '{{URL}}/admin/scores/language-tests/{{language-test-score-id}}' as const, + pathParams: {} as { languageTestScoreId: string | number }, + queryParams: {} as Record, + body: {} as VerifyLanguageTestRequest, + response: {} as VerifyLanguageTestResponse, + }, + getLanguageTestList: { + method: 'GET' as const, + path: '{{URL}}/admin/scores/language-tests?page=1&size=10' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as LanguageTestListResponse, + }, + putVerifyGpa: { + method: 'PUT' as const, + path: '{{URL}}/admin/scores/gpas/{{gpa-score-id}}' as const, + pathParams: {} as { gpaScoreId: string | number }, + queryParams: {} as Record, + body: {} as VerifyGpaRequest, + response: {} as VerifyGpaResponse, + }, + getGpaList: { + method: 'GET' as const, + path: '{{URL}}/admin/scores/gpas' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as GpaListResponse, + }, +} as const; + +export type AdminApiDefinitions = typeof adminApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/Admin/index.ts b/apps/web/src/apis/Admin/index.ts index f7d22c2a..47440873 100644 --- a/apps/web/src/apis/Admin/index.ts +++ b/apps/web/src/apis/Admin/index.ts @@ -1,5 +1,6 @@ -export { adminApi } from "./api"; -export { default as getGpaList } from "./getGpaList"; -export { default as getLanguageTestList } from "./getLanguageTestList"; -export { default as putVerifyGpa } from "./putVerifyGpa"; -export { default as putVerifyLanguageTest } from "./putVerifyLanguageTest"; +export { adminApi } from './api'; +export { adminApiDefinitions, AdminApiDefinitions } from './apiDefinitions'; +export * from './getGpaList'; +export * from './getLanguageTestList'; +export * from './putVerifyGpa'; +export * from './putVerifyLanguageTest'; diff --git a/apps/web/src/apis/Auth/api.ts b/apps/web/src/apis/Auth/api.ts index 3f04e115..7d6ac3be 100644 --- a/apps/web/src/apis/Auth/api.ts +++ b/apps/web/src/apis/Auth/api.ts @@ -1,29 +1,18 @@ -import { axiosInstance, publicAxiosInstance } from "@/utils/axiosInstance"; +import { axiosInstance } from "@/utils/axiosInstance"; export type SignOutResponse = Record; export type SignOutRequest = Record; -// Apple Auth Types -export interface RegisteredAppleAuthResponse { - isRegistered: true; - accessToken: string; - refreshToken: string; -} - -export interface UnregisteredAppleAuthResponse { - isRegistered: false; +export interface AppleAuthResponse { + isRegistered: boolean; nickname: null; email: string; profileImageUrl: null; signUpToken: string; } -export type AppleAuthResponse = RegisteredAppleAuthResponse | UnregisteredAppleAuthResponse; - -export interface AppleAuthRequest { - code: string; -} +export type AppleAuthRequest = Record; export interface RefreshTokenResponse { accessToken: string; @@ -36,110 +25,88 @@ export interface EmailLoginResponse { refreshToken: string; } -export interface EmailLoginRequest { - email: string; - password: string; -} +export type EmailLoginRequest = Record; export interface EmailVerificationResponse { signUpToken: string; } -export interface EmailVerificationRequest { - email: string; - verificationCode: string; -} - -// Kakao Auth Types -export interface RegisteredKakaoAuthResponse { - isRegistered: true; - accessToken: string; - refreshToken: string; -} +export type EmailVerificationRequest = Record; -export interface UnregisteredKakaoAuthResponse { - isRegistered: false; +export interface KakaoAuthResponse { + isRegistered: boolean; nickname: string; email: string; profileImageUrl: string; signUpToken: string; } -export type KakaoAuthResponse = RegisteredKakaoAuthResponse | UnregisteredKakaoAuthResponse; +export type KakaoAuthRequest = Record; -export interface KakaoAuthRequest { - code: string; -} - -export type AccountResponse = undefined; +export type AccountResponse = void; export interface SignUpResponse { accessToken: string; refreshToken: string; } -export interface SignUpRequest { - signUpToken: string; - nickname: string; - profileImageUrl: string; - preparationStatus: string; - interestedRegions: string[]; - interestedCountries: string[]; -} - -export interface EmailSignUpRequest { - email: string; - password: string; -} - -export interface EmailSignUpResponse { - signUpToken: string; -} +export type SignUpRequest = Record; export const authApi = { - postSignOut: async (): Promise => { - const res = await axiosInstance.post(`/auth/sign-out`); + postSignOut: async (params: { data?: SignOutRequest }): Promise => { + const res = await axiosInstance.post( + `/auth/sign-out`, params?.data + ); return res.data; }, - postAppleAuth: async (data: AppleAuthRequest): Promise => { - const res = await publicAxiosInstance.post(`/auth/apple`, data); + postAppleAuth: async (params: { data?: AppleAuthRequest }): Promise => { + const res = await axiosInstance.post( + `/auth/apple`, params?.data + ); return res.data; }, - postRefreshToken: async (): Promise => { - const res = await publicAxiosInstance.post(`/auth/reissue`); + postRefreshToken: async (params: { data?: RefreshTokenRequest }): Promise => { + const res = await axiosInstance.post( + `/auth/reissue`, params?.data + ); return res.data; }, - postEmailLogin: async (data: EmailLoginRequest): Promise => { - const res = await publicAxiosInstance.post(`/auth/email/sign-in`, data); + postEmailLogin: async (params: { data?: EmailLoginRequest }): Promise => { + const res = await axiosInstance.post( + `/auth/email/sign-in`, params?.data + ); return res.data; }, - postEmailSignUp: async (data: EmailSignUpRequest): Promise => { - const res = await publicAxiosInstance.post(`/auth/email/sign-up`, data); + postEmailVerification: async (params: { data?: EmailVerificationRequest }): Promise => { + const res = await axiosInstance.post( + `/auth/email/sign-up`, params?.data + ); return res.data; }, - postKakaoAuth: async (data: KakaoAuthRequest): Promise => { - const res = await publicAxiosInstance.post(`/auth/kakao`, data); + postKakaoAuth: async (params: { data?: KakaoAuthRequest }): Promise => { + const res = await axiosInstance.post( + `/auth/kakao`, params?.data + ); return res.data; }, deleteAccount: async (): Promise => { - const res = await axiosInstance.delete(`/auth/quit`); + const res = await axiosInstance.delete( + `/auth/quit` + ); return res.data; }, - postSignUp: async (data: SignUpRequest): Promise => { - // 임시 성별, 생년월일 추가. API 변경 시 삭제 - const payload = { - ...data, - birth: "2000-01-01", - gender: "PREFER_NOT_TO_SAY", - }; - const res = await publicAxiosInstance.post(`/auth/sign-up`, payload); + postSignUp: async (params: { data?: SignUpRequest }): Promise => { + const res = await axiosInstance.post( + `/auth/sign-up`, params?.data + ); return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/Auth/apiDefinitions.ts b/apps/web/src/apis/Auth/apiDefinitions.ts new file mode 100644 index 00000000..30b1e75f --- /dev/null +++ b/apps/web/src/apis/Auth/apiDefinitions.ts @@ -0,0 +1,70 @@ +import type { AccountResponse, AppleAuthRequest, AppleAuthResponse, EmailLoginRequest, EmailLoginResponse, EmailVerificationRequest, EmailVerificationResponse, KakaoAuthRequest, KakaoAuthResponse, RefreshTokenResponse, SignOutResponse, SignUpRequest, SignUpResponse } from './api'; + +export const authApiDefinitions = { + postSignOut: { + method: 'POST' as const, + path: '{{URL}}/auth/sign-out' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as SignOutResponse, + }, + postAppleAuth: { + method: 'POST' as const, + path: '{{URL}}/auth/apple' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as AppleAuthRequest, + response: {} as AppleAuthResponse, + }, + postRefreshToken: { + method: 'POST' as const, + path: '{{URL}}/auth/reissue' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as RefreshTokenResponse, + }, + postEmailLogin: { + method: 'POST' as const, + path: '{{URL}}/auth/email/sign-in' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as EmailLoginRequest, + response: {} as EmailLoginResponse, + }, + postEmailVerification: { + method: 'POST' as const, + path: '{{URL}}/auth/email/sign-up' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as EmailVerificationRequest, + response: {} as EmailVerificationResponse, + }, + postKakaoAuth: { + method: 'POST' as const, + path: '{{URL}}/auth/kakao' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as KakaoAuthRequest, + response: {} as KakaoAuthResponse, + }, + deleteAccount: { + method: 'DELETE' as const, + path: '{{URL}}/auth/quit' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as AccountResponse, + }, + postSignUp: { + method: 'POST' as const, + path: '{{URL}}/auth/sign-up' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as SignUpRequest, + response: {} as SignUpResponse, + }, +} as const; + +export type AuthApiDefinitions = typeof authApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/Auth/index.ts b/apps/web/src/apis/Auth/index.ts index cd56347d..ab056f2c 100644 --- a/apps/web/src/apis/Auth/index.ts +++ b/apps/web/src/apis/Auth/index.ts @@ -1,25 +1,10 @@ -export type { - AppleAuthRequest, - AppleAuthResponse, - EmailLoginRequest, - EmailLoginResponse, - EmailSignUpRequest, - EmailSignUpResponse, - KakaoAuthRequest, - KakaoAuthResponse, - SignUpRequest, - SignUpResponse, -} from "./api"; -export { authApi } from "./api"; - -// Client-side hooks -export { default as useDeleteUserAccount } from "./deleteAccount"; -export { default as usePostAppleAuth } from "./postAppleAuth"; -export { default as usePostEmailAuth } from "./postEmailLogin"; -export { default as usePostEmailSignUp } from "./postEmailVerification"; -export { default as usePostKakaoAuth } from "./postKakaoAuth"; -export { default as usePostLogout } from "./postSignOut"; -export { default as usePostSignUp } from "./postSignUp"; - -// Server-side functions -export { postReissueToken } from "./server"; +export { authApi } from './api'; +export { authApiDefinitions, AuthApiDefinitions } from './apiDefinitions'; +export * from './deleteAccount'; +export * from './postAppleAuth'; +export * from './postEmailLogin'; +export * from './postEmailVerification'; +export * from './postKakaoAuth'; +export * from './postRefreshToken'; +export * from './postSignOut'; +export * from './postSignUp'; diff --git a/apps/web/src/apis/MyPage/api.ts b/apps/web/src/apis/MyPage/api.ts index 8586b26d..7180574f 100644 --- a/apps/web/src/apis/MyPage/api.ts +++ b/apps/web/src/apis/MyPage/api.ts @@ -1,68 +1,56 @@ -import type { AxiosResponse } from "axios"; -import type { UserRole } from "@/types/mentor"; -import type { BaseUserInfo } from "@/types/myInfo"; import { axiosInstance } from "@/utils/axiosInstance"; -// --- 타입 정의 --- -export interface MenteeInfo extends BaseUserInfo { - role: UserRole.MENTEE; - interestedCountries: string[]; -} - -export interface MentorInfo extends BaseUserInfo { - role: UserRole.MENTOR; - attendedUniversity: string; -} - -export interface AdminInfo extends BaseUserInfo { - role: UserRole.ADMIN; - attendedUniversity: string; -} +export type InterestedRegionCountryResponse = void; -export type MyInfoResponse = MenteeInfo | MentorInfo | AdminInfo; +export type InterestedRegionCountryRequest = Record; -export type InterestedRegionCountryResponse = undefined; +export type ProfileResponse = Record; -export type InterestedRegionCountryRequest = string[]; +export type ProfileRequest = Record; -export interface ProfilePatchRequest { - nickname?: string; - file?: File; +export interface ProfileResponse { + likedUniversityCount: number; + nickname: string; + profileImageUrl: string; + role: string; + authType: string; + email: string; + likedPostCount: number; + likedMentorCount: number; + interestedCountries: string[]; } -export interface PasswordPatchRequest { - currentPassword: string; - newPassword: string; - newPasswordConfirmation: string; -} +export type PasswordResponse = void; + +export type PasswordRequest = Record; export const myPageApi = { - getProfile: async (): Promise => { - const response: AxiosResponse = await axiosInstance.get("/my"); - return response.data; + patchInterestedRegionCountry: async (params: { data?: InterestedRegionCountryRequest }): Promise => { + const res = await axiosInstance.patch( + `/my/interested-location`, params?.data + ); + return res.data; }, - patchProfile: async (data: ProfilePatchRequest): Promise => { - const formData = new FormData(); - if (data.nickname) { - formData.append("nickname", data.nickname); - } - if (data.file) { - formData.append("file", data.file); - } - const res = await axiosInstance.patch("/my", formData); + patchProfile: async (params: { data?: ProfileRequest }): Promise => { + const res = await axiosInstance.patch( + `/my`, params?.data + ); return res.data; }, - patchPassword: async (data: PasswordPatchRequest): Promise => { - const res = await axiosInstance.patch("/my/password", data); + getProfile: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/my`, { params: params?.params } + ); return res.data; }, - patchInterestedRegionCountry: async ( - data: InterestedRegionCountryRequest, - ): Promise => { - const res = await axiosInstance.patch(`/my/interested-location`, data); + patchPassword: async (params: { data?: PasswordRequest }): Promise => { + const res = await axiosInstance.patch( + `/my/password`, params?.data + ); return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/MyPage/apiDefinitions.ts b/apps/web/src/apis/MyPage/apiDefinitions.ts new file mode 100644 index 00000000..860b9161 --- /dev/null +++ b/apps/web/src/apis/MyPage/apiDefinitions.ts @@ -0,0 +1,38 @@ +import type { InterestedRegionCountryRequest, InterestedRegionCountryResponse, PasswordRequest, PasswordResponse, ProfileRequest, ProfileResponse } from './api'; + +export const myPageApiDefinitions = { + patchInterestedRegionCountry: { + method: 'PATCH' as const, + path: '{{URL}}/my/interested-location' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as InterestedRegionCountryRequest, + response: {} as InterestedRegionCountryResponse, + }, + patchProfile: { + method: 'PATCH' as const, + path: '{{URL}}/my' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as ProfileRequest, + response: {} as ProfileResponse, + }, + getProfile: { + method: 'GET' as const, + path: '{{URL}}/my' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as ProfileResponse, + }, + patchPassword: { + method: 'PATCH' as const, + path: '{{URL}}/my/password' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as PasswordRequest, + response: {} as PasswordResponse, + }, +} as const; + +export type MyPageApiDefinitions = typeof myPageApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/MyPage/index.ts b/apps/web/src/apis/MyPage/index.ts index f431945c..16855a53 100644 --- a/apps/web/src/apis/MyPage/index.ts +++ b/apps/web/src/apis/MyPage/index.ts @@ -1,13 +1,6 @@ -export { - type AdminInfo, - type MenteeInfo, - type MentorInfo, - type MyInfoResponse, - myPageApi, - type PasswordPatchRequest, - type ProfilePatchRequest, -} from "./api"; -export { default as useGetMyInfo } from "./getProfile"; -export { default as usePatchInterestedRegionCountry } from "./patchInterestedRegionCountry"; -export { default as usePatchMyPassword } from "./patchPassword"; -export { default as usePatchMyInfo } from "./patchProfile"; +export { myPageApi } from './api'; +export { myPageApiDefinitions, MyPageApiDefinitions } from './apiDefinitions'; +export * from './getProfile'; +export * from './patchInterestedRegionCountry'; +export * from './patchPassword'; +export * from './patchProfile'; diff --git a/apps/web/src/apis/Scores/api.ts b/apps/web/src/apis/Scores/api.ts index e1961939..05099877 100644 --- a/apps/web/src/apis/Scores/api.ts +++ b/apps/web/src/apis/Scores/api.ts @@ -1,79 +1,78 @@ -import type { AxiosResponse } from "axios"; -import type { GpaScore, LanguageTestEnum, LanguageTestScore } from "@/types/score"; import { axiosInstance } from "@/utils/axiosInstance"; -// ====== Query Keys ====== -export const ScoresQueryKeys = { - myGpaScore: "myGpaScore", - myLanguageTestScore: "myLanguageTestScore", -} as const; +export interface CreateLanguageTestResponse { + id: number; +} + +export type CreateLanguageTestRequest = Record; + +export interface LanguageTestListResponseLanguageTestScoreStatusResponseListItem { + id: number; + languageTestResponse: LanguageTestListResponseLanguageTestScoreStatusResponseListItemLanguageTestResponse; + verifyStatus: string; + rejectedReason: null; +} + +export interface LanguageTestListResponseLanguageTestScoreStatusResponseListItemLanguageTestResponse { + languageTestType: string; + languageTestScore: string; + languageTestReportUrl: string; +} -// ====== Types ====== -export interface UseMyGpaScoreResponse { - gpaScoreStatusResponseList: GpaScore[]; +export interface LanguageTestListResponse { + languageTestScoreStatusResponseList: LanguageTestListResponseLanguageTestScoreStatusResponseListItem[]; } -export interface UseGetMyLanguageTestScoreResponse { - languageTestScoreStatusResponseList: LanguageTestScore[]; +export interface CreateGpaResponse { + id: number; } -export interface UsePostGpaScoreRequest { - gpaScoreRequest: { - gpa: number; - gpaCriteria: number; - issueDate: string; // yyyy-MM-dd - }; - file: Blob; +export type CreateGpaRequest = Record; + +export interface GpaListResponseGpaScoreStatusResponseListItem { + id: number; + gpaResponse: GpaListResponseGpaScoreStatusResponseListItemGpaResponse; + verifyStatus: string; + rejectedReason: null; +} + +export interface GpaListResponseGpaScoreStatusResponseListItemGpaResponse { + gpa: number; + gpaCriteria: number; + gpaReportUrl: string; } -export interface UsePostLanguageTestScoreRequest { - languageTestScoreRequest: { - languageTestType: LanguageTestEnum; - languageTestScore: string; - issueDate: string; // yyyy-MM-dd - }; - file: File; +export interface GpaListResponse { + gpaScoreStatusResponseList: GpaListResponseGpaScoreStatusResponseListItem[]; } -// ====== API Functions ====== export const scoresApi = { - /** - * 내 학점 점수 조회 - */ - getMyGpaScore: async (): Promise> => { - return axiosInstance.get("/scores/gpas"); + postCreateLanguageTest: async (params: { data?: CreateLanguageTestRequest }): Promise => { + const res = await axiosInstance.post( + `/scores/language-tests`, params?.data + ); + return res.data; }, - /** - * 내 어학 점수 조회 - */ - getMyLanguageTestScore: async (): Promise> => { - return axiosInstance.get("/scores/language-tests"); + getLanguageTestList: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/scores/language-tests`, { params: params?.params } + ); + return res.data; }, - /** - * 학점 점수 제출 - */ - postGpaScore: async (request: UsePostGpaScoreRequest): Promise> => { - const formData = new FormData(); - formData.append( - "gpaScoreRequest", - new Blob([JSON.stringify(request.gpaScoreRequest)], { type: "application/json" }), + postCreateGpa: async (params: { data?: CreateGpaRequest }): Promise => { + const res = await axiosInstance.post( + `/scores/gpas`, params?.data ); - formData.append("file", request.file); - return axiosInstance.post("/scores/gpas", formData); + return res.data; }, - /** - * 어학 점수 제출 - */ - postLanguageTestScore: async (request: UsePostLanguageTestScoreRequest): Promise> => { - const formData = new FormData(); - formData.append( - "languageTestScoreRequest", - new Blob([JSON.stringify(request.languageTestScoreRequest)], { type: "application/json" }), + getGpaList: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/scores/gpas`, { params: params?.params } ); - formData.append("file", request.file); - return axiosInstance.post("/scores/language-tests", formData); + return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/Scores/apiDefinitions.ts b/apps/web/src/apis/Scores/apiDefinitions.ts new file mode 100644 index 00000000..1f195e92 --- /dev/null +++ b/apps/web/src/apis/Scores/apiDefinitions.ts @@ -0,0 +1,38 @@ +import type { CreateGpaResponse, CreateLanguageTestResponse, GpaListResponse, LanguageTestListResponse } from './api'; + +export const scoresApiDefinitions = { + postCreateLanguageTest: { + method: 'POST' as const, + path: '{{URL}}/scores/language-tests' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as CreateLanguageTestResponse, + }, + getLanguageTestList: { + method: 'GET' as const, + path: '{{URL}}/scores/language-tests' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as LanguageTestListResponse, + }, + postCreateGpa: { + method: 'POST' as const, + path: '{{URL}}/scores/gpas' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as CreateGpaResponse, + }, + getGpaList: { + method: 'GET' as const, + path: '{{URL}}/scores/gpas' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as GpaListResponse, + }, +} as const; + +export type ScoresApiDefinitions = typeof scoresApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/Scores/index.ts b/apps/web/src/apis/Scores/index.ts index 529612eb..0847971b 100644 --- a/apps/web/src/apis/Scores/index.ts +++ b/apps/web/src/apis/Scores/index.ts @@ -1,12 +1,6 @@ -export type { - UseGetMyLanguageTestScoreResponse, - UseMyGpaScoreResponse, - UsePostGpaScoreRequest, - UsePostLanguageTestScoreRequest, -} from "./api"; -export { ScoresQueryKeys, scoresApi } from "./api"; - -export { default as useGetMyGpaScore } from "./getGpaList"; -export { default as useGetMyLanguageTestScore } from "./getLanguageTestList"; -export { default as usePostGpaScore } from "./postCreateGpa"; -export { default as usePostLanguageTestScore } from "./postCreateLanguageTest"; +export { scoresApi } from './api'; +export { scoresApiDefinitions, ScoresApiDefinitions } from './apiDefinitions'; +export * from './getGpaList'; +export * from './getLanguageTestList'; +export * from './postCreateGpa'; +export * from './postCreateLanguageTest'; diff --git a/apps/web/src/apis/applications/api.ts b/apps/web/src/apis/applications/api.ts index 5837a038..67702675 100644 --- a/apps/web/src/apis/applications/api.ts +++ b/apps/web/src/apis/applications/api.ts @@ -1,58 +1,147 @@ -import type { AxiosResponse } from "axios"; -import type { ApplicationListResponse } from "@/types/application"; import { axiosInstance } from "@/utils/axiosInstance"; -// ====== Query Keys ====== -export const ApplicationsQueryKeys = { - competitorsApplicationList: "competitorsApplicationList", -} as const; +export interface CompetitorsResponseThirdChoiceItem { + koreanName: string; + studentCapacity: number; + region: string; + country: string; + applicants: CompetitorsResponseThirdChoiceItemApplicantsItem[]; +} + +export interface CompetitorsResponseThirdChoiceItemApplicantsItem { + nicknameForApply: string; + gpa: number; + testType: string; + testScore: string; + isMine: boolean; +} + +export interface CompetitorsResponseSecondChoiceItem { + koreanName: string; + studentCapacity: number; + region: string; + country: string; + applicants: CompetitorsResponseSecondChoiceItemApplicantsItem[]; +} + +export interface CompetitorsResponseSecondChoiceItemApplicantsItem { + nicknameForApply: string; + gpa: number; + testType: string; + testScore: string; + isMine: boolean; +} -// ====== Types ====== -export interface UseSubmitApplicationResponse { - isSuccess: boolean; +export interface CompetitorsResponseFirstChoiceItem { + koreanName: string; + studentCapacity: number; + region: string; + country: string; + applicants: CompetitorsResponseFirstChoiceItemApplicantsItem[]; } -export interface UseSubmitApplicationRequest { - gpaScoreId: number; - languageTestScoreId: number; - universityChoiceRequest: { - firstChoiceUniversityId: number | null; - secondChoiceUniversityId: number | null; - thirdChoiceUniversityId: number | null; - }; +export interface CompetitorsResponseFirstChoiceItemApplicantsItem { + nicknameForApply: string; + gpa: number; + testType: string; + testScore: string; + isMine: boolean; } export interface CompetitorsResponse { - competitors: Array<{ - id: number; - name: string; - score: number; - }>; + firstChoice: CompetitorsResponseFirstChoiceItem[]; + secondChoice: CompetitorsResponseSecondChoiceItem[]; + thirdChoice: CompetitorsResponseThirdChoiceItem[]; +} + +export interface SubmitApplicationResponseAppliedUniversities { + firstChoiceUniversity: string; + secondChoiceUniversity: string; + thirdChoiceUniversity: string; +} + +export interface SubmitApplicationResponse { + totalApplyCount: number; + applyCount: number; + appliedUniversities: SubmitApplicationResponseAppliedUniversities; +} + +export type SubmitApplicationRequest = Record; + +export interface ApplicantsResponseThirdChoiceItem { + koreanName: string; + studentCapacity: number; + region: string; + country: string; + applicants: ApplicantsResponseThirdChoiceItemApplicantsItem[]; +} + +export interface ApplicantsResponseThirdChoiceItemApplicantsItem { + nicknameForApply: string; + gpa: number; + testType: string; + testScore: string; + isMine: boolean; +} + +export interface ApplicantsResponseSecondChoiceItem { + koreanName: string; + studentCapacity: number; + region: string; + country: string; + applicants: ApplicantsResponseSecondChoiceItemApplicantsItem[]; +} + +export interface ApplicantsResponseSecondChoiceItemApplicantsItem { + nicknameForApply: string; + gpa: number; + testType: string; + testScore: string; + isMine: boolean; +} + +export interface ApplicantsResponseFirstChoiceItem { + koreanName: string; + studentCapacity: number; + region: string; + country: string; + applicants: ApplicantsResponseFirstChoiceItemApplicantsItem[]; +} + +export interface ApplicantsResponseFirstChoiceItemApplicantsItem { + nicknameForApply: string; + gpa: number; + testType: string; + testScore: string; + isMine: boolean; +} + +export interface ApplicantsResponse { + firstChoice: ApplicantsResponseFirstChoiceItem[]; + secondChoice: ApplicantsResponseSecondChoiceItem[]; + thirdChoice: ApplicantsResponseThirdChoiceItem[]; } -// ====== API Functions ====== export const applicationsApi = { - /** - * 지원 목록 조회 - */ - getApplicationsList: async (): Promise> => { - return axiosInstance.get("/applications"); + getCompetitors: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/applications/competitors`, { params: params?.params } + ); + return res.data; }, - /** - * 지원 제출 - */ - postSubmitApplication: async ( - request: UseSubmitApplicationRequest, - ): Promise> => { - return axiosInstance.post("/applications", request); + postSubmitApplication: async (params: { data?: SubmitApplicationRequest }): Promise => { + const res = await axiosInstance.post( + `/applications`, params?.data + ); + return res.data; }, - /** - * 경쟁자 목록 조회 - */ - getCompetitors: async (config?: { params?: Record }): Promise => { - const res = await axiosInstance.get("/applications/competitors", config); + getApplicants: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/applications`, { params: params?.params } + ); return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/applications/apiDefinitions.ts b/apps/web/src/apis/applications/apiDefinitions.ts new file mode 100644 index 00000000..b57b1787 --- /dev/null +++ b/apps/web/src/apis/applications/apiDefinitions.ts @@ -0,0 +1,30 @@ +import type { ApplicantsResponse, CompetitorsResponse, SubmitApplicationRequest, SubmitApplicationResponse } from './api'; + +export const applicationsApiDefinitions = { + getCompetitors: { + method: 'GET' as const, + path: '{{URL}}/applications/competitors' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as CompetitorsResponse, + }, + postSubmitApplication: { + method: 'POST' as const, + path: '{{URL}}/applications' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as SubmitApplicationRequest, + response: {} as SubmitApplicationResponse, + }, + getApplicants: { + method: 'GET' as const, + path: '{{URL}}/applications' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as ApplicantsResponse, + }, +} as const; + +export type ApplicationsApiDefinitions = typeof applicationsApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/applications/index.ts b/apps/web/src/apis/applications/index.ts index f0b0f16b..db9985fc 100644 --- a/apps/web/src/apis/applications/index.ts +++ b/apps/web/src/apis/applications/index.ts @@ -1,5 +1,5 @@ -export type { UseSubmitApplicationRequest, UseSubmitApplicationResponse } from "./api"; -export { ApplicationsQueryKeys, applicationsApi } from "./api"; -export { default as useGetApplicationsList } from "./getApplicants"; -export { default as useGetCompetitors } from "./getCompetitors"; -export { default as usePostSubmitApplication } from "./postSubmitApplication"; +export { applicationsApi } from './api'; +export { applicationsApiDefinitions, ApplicationsApiDefinitions } from './apiDefinitions'; +export * from './getApplicants'; +export * from './getCompetitors'; +export * from './postSubmitApplication'; diff --git a/apps/web/src/apis/chat/api.ts b/apps/web/src/apis/chat/api.ts index 1fa093d0..c48784f8 100644 --- a/apps/web/src/apis/chat/api.ts +++ b/apps/web/src/apis/chat/api.ts @@ -1,55 +1,65 @@ -import type { AxiosResponse } from "axios"; -import type { ChatMessage, ChatPartner, ChatRoom } from "@/types/chat"; import { axiosInstance } from "@/utils/axiosInstance"; -// QueryKeys for chat domain -export const ChatQueryKeys = { - chatRooms: "chatRooms", - chatHistories: "chatHistories", - partnerInfo: "partnerInfo", -} as const; - -// Re-export types from @/types/chat -export type { ChatMessage, ChatRoom, ChatPartner }; +export interface ChatMessagesResponseContentItem { + id: number; + content: string; + senderId: number; + createdAt: string; + attachments: ChatMessagesResponseContentItemAttachmentsItem[]; +} -export interface ChatHistoriesResponse { - nextPageNumber: number; // 다음 페이지가 없다면 -1 - content: ChatMessage[]; +export interface ChatMessagesResponseContentItemAttachmentsItem { + id: number; + isImage: boolean; + url: string; + thumbnailUrl: string | null; + createdAt: string; } -export interface ChatRoomListResponse { - chatRooms: ChatRoom[]; +export interface ChatMessagesResponse { + nextPageNumber: number; + content: ChatMessagesResponseContentItem[]; } -interface GetChatHistoriesParams { - roomId: number; - size?: number; - page?: number; +export type ChatRoomsResponse = void; + +export type ReadChatRoomResponse = void; + +export type ReadChatRoomRequest = Record; + +export interface ChatPartnerResponse { + partnerId: number; + nickname: string; + profileUrl: string; } export const chatApi = { - getChatHistories: async ({ roomId, size = 20, page = 0 }: GetChatHistoriesParams): Promise => { - const res = await axiosInstance.get(`/chats/rooms/${roomId}`, { - params: { - size, - page, - }, - }); + getChatMessages: async (params: { roomId: string | number, defaultSize: string | number, defaultPage: string | number, params?: Record }): Promise => { + const res = await axiosInstance.get( + `/chats/rooms/${params.roomId}?size=${params.defaultSize}&page=${params.defaultPage}`, { params: params?.params } + ); return res.data; }, - getChatRooms: async (): Promise => { - const res = await axiosInstance.get("/chats/rooms"); + getChatRooms: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/chats/rooms`, { params: params?.params } + ); return res.data; }, - putReadChatRoom: async (roomId: number): Promise => { - const response: AxiosResponse = await axiosInstance.put(`/chats/rooms/${roomId}/read`); - return response.data; + putReadChatRoom: async (params: { roomId: string | number, data?: ReadChatRoomRequest }): Promise => { + const res = await axiosInstance.put( + `//chats/rooms/${params.roomId}/read`, params?.data + ); + return res.data; }, - getChatPartner: async (roomId: number): Promise => { - const res = await axiosInstance.get(`/chats/rooms/${roomId}/partner`); + getChatPartner: async (params: { roomId: string | number, params?: Record }): Promise => { + const res = await axiosInstance.get( + `/chats/rooms/${params.roomId}/partner`, { params: params?.params } + ); return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/chat/apiDefinitions.ts b/apps/web/src/apis/chat/apiDefinitions.ts new file mode 100644 index 00000000..0912b724 --- /dev/null +++ b/apps/web/src/apis/chat/apiDefinitions.ts @@ -0,0 +1,38 @@ +import type { ChatMessagesResponse, ChatPartnerResponse, ChatRoomsResponse, ReadChatRoomResponse } from './api'; + +export const chatApiDefinitions = { + getChatMessages: { + method: 'GET' as const, + path: '{{URL}}/chats/rooms/{{room-id}}?size={{default-size}}&page={{default-page}}' as const, + pathParams: {} as { roomId: string | number; defaultSize: string | number; defaultPage: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as ChatMessagesResponse, + }, + getChatRooms: { + method: 'GET' as const, + path: '{{URL}}/chats/rooms' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as ChatRoomsResponse, + }, + putReadChatRoom: { + method: 'PUT' as const, + path: '{{URL}}//chats/rooms/{{room-id}}/read' as const, + pathParams: {} as { roomId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as ReadChatRoomResponse, + }, + getChatPartner: { + method: 'GET' as const, + path: '{{URL}}/chats/rooms/{{room-id}}/partner' as const, + pathParams: {} as { roomId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as ChatPartnerResponse, + }, +} as const; + +export type ChatApiDefinitions = typeof chatApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/chat/index.ts b/apps/web/src/apis/chat/index.ts index e1a190a4..dc1fde87 100644 --- a/apps/web/src/apis/chat/index.ts +++ b/apps/web/src/apis/chat/index.ts @@ -1,6 +1,6 @@ -export type { ChatHistoriesResponse, ChatMessage, ChatPartner, ChatRoom, ChatRoomListResponse } from "./api"; -export { ChatQueryKeys, chatApi } from "./api"; -export { default as useGetChatHistories } from "./getChatMessages"; -export { default as useGetPartnerInfo } from "./getChatPartner"; -export { default as useGetChatRooms } from "./getChatRooms"; -export { default as usePutChatRead } from "./putReadChatRoom"; +export { chatApi } from './api'; +export { chatApiDefinitions, ChatApiDefinitions } from './apiDefinitions'; +export * from './getChatMessages'; +export * from './getChatPartner'; +export * from './getChatRooms'; +export * from './putReadChatRoom'; diff --git a/apps/web/src/apis/community/api.ts b/apps/web/src/apis/community/api.ts index 0ffc27fb..2579e8c1 100644 --- a/apps/web/src/apis/community/api.ts +++ b/apps/web/src/apis/community/api.ts @@ -1,21 +1,4 @@ -import type { AxiosResponse } from "axios"; -import type { - CommentCreateRequest, - CommentIdResponse, - ListPost, - Post, - PostCreateRequest, - PostIdResponse, - PostLikeResponse, - PostUpdateRequest, -} from "@/types/community"; -import { axiosInstance, publicAxiosInstance } from "@/utils/axiosInstance"; - -// QueryKeys for community domain -export const CommunityQueryKeys = { - posts: "posts", - postList: "postList1", // 기존 api/boards와 동일한 키 유지 -} as const; +import { axiosInstance } from "@/utils/axiosInstance"; export interface BoardListResponse { 0: string; @@ -37,116 +20,178 @@ export interface BoardResponseItem { } export interface BoardResponse { - 0: BoardResponseItem[]; - 1: BoardResponseItem[]; - 2: BoardResponseItem[]; - 3: BoardResponseItem[]; -} - -// Delete response types -export interface DeletePostResponse { - message: string; - postId: number; -} - -// Re-export types from @/types/community for convenience -export type { - Post, - PostCreateRequest, - PostIdResponse, - PostUpdateRequest, - PostLikeResponse, - CommentCreateRequest, - CommentIdResponse, - ListPost, -}; + 0: BoardResponse0; + 1: BoardResponse1; + 2: BoardResponse2; + 3: BoardResponse3; +} -export const communityApi = { - /** - * 게시글 목록 조회 (클라이언트) - */ - getPostList: (boardCode: string, category: string | null = null): Promise> => { - const params = category && category !== "전체" ? { category } : {}; - return publicAxiosInstance.get(`/boards/${boardCode}`, { params }); - }, +export interface CommentResponse { + id: number; +} + +export interface UpdateCommentResponse { + id: number; +} + +export type UpdateCommentRequest = Record; + +export interface CreateCommentResponse { + id: number; +} + +export type CreateCommentRequest = Record; + +export interface PostResponse { + id: number; +} + +export interface UpdatePostResponse { + id: number; +} + +export type UpdatePostRequest = Record; + +export interface CreatePostResponse { + id: number; +} + +export type CreatePostRequest = Record; + +export interface PostDetailResponsePostFindPostImageResponsesItem { + id: number; + imageUrl: string; +} + +export interface PostDetailResponsePostFindCommentResponsesItem { + id: number; + parentId: null | number; + content: string; + isOwner: boolean; + createdAt: string; + updatedAt: string; + postFindSiteUserResponse: PostDetailResponsePostFindCommentResponsesItemPostFindSiteUserResponse; +} + +export interface PostDetailResponsePostFindCommentResponsesItemPostFindSiteUserResponse { + id: number; + nickname: string; + profileImageUrl: string; +} + +export interface PostDetailResponsePostFindSiteUserResponse { + id: number; + nickname: string; + profileImageUrl: string; +} - getBoardList: async (params?: Record): Promise => { - const res = await axiosInstance.get(`/boards`, { params }); +export interface PostDetailResponsePostFindBoardResponse { + code: string; + koreanName: string; +} + +export interface PostDetailResponse { + id: number; + title: string; + content: string; + isQuestion: boolean; + likeCount: number; + viewCount: number; + commentCount: number; + postCategory: string; + isOwner: boolean; + isLiked: boolean; + createdAt: string; + updatedAt: string; + postFindBoardResponse: PostDetailResponsePostFindBoardResponse; + postFindSiteUserResponse: PostDetailResponsePostFindSiteUserResponse; + postFindCommentResponses: PostDetailResponsePostFindCommentResponsesItem[]; + postFindPostImageResponses: PostDetailResponsePostFindPostImageResponsesItem[]; +} + +export interface LikePostResponse { + likeCount: number; + isLiked: boolean; +} + +export type LikePostRequest = Record; + +export const communityApi = { + getBoardList: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/boards`, { params: params?.params } + ); return res.data; }, - getBoard: async (boardCode: string, params?: Record): Promise => { - const res = await axiosInstance.get(`/boards/${boardCode}`, { params }); + getBoard: async (params: { boardCode: string | number, params?: Record }): Promise => { + const res = await axiosInstance.get( + `/boards/${params.boardCode}`, { params: params?.params } + ); return res.data; }, - getPostDetail: async (postId: number): Promise => { - const response: AxiosResponse = await axiosInstance.get(`/posts/${postId}`); - return response.data; + deleteComment: async (params: { commentId: string | number }): Promise => { + const res = await axiosInstance.delete( + `/comments/${params.commentId}` + ); + return res.data; }, - createPost: async (request: PostCreateRequest): Promise => { - const convertedRequest: FormData = new FormData(); - convertedRequest.append( - "postCreateRequest", - new Blob([JSON.stringify(request.postCreateRequest)], { type: "application/json" }), + patchUpdateComment: async (params: { commentId: string | number, data?: UpdateCommentRequest }): Promise => { + const res = await axiosInstance.patch( + `/comments/${params.commentId}`, params?.data ); - request.file.forEach((file) => { - convertedRequest.append("file", file); - }); - - const response: AxiosResponse = await axiosInstance.post(`/posts`, convertedRequest, { - headers: { "Content-Type": "multipart/form-data" }, - }); - - return { - ...response.data, - boardCode: request.postCreateRequest.boardCode, - }; + return res.data; }, - updatePost: async (postId: number, request: PostUpdateRequest): Promise => { - const convertedRequest: FormData = new FormData(); - convertedRequest.append( - "postUpdateRequest", - new Blob([JSON.stringify(request.postUpdateRequest)], { type: "application/json" }), + postCreateComment: async (params: { data?: CreateCommentRequest }): Promise => { + const res = await axiosInstance.post( + `/comments`, params?.data ); - request.file.forEach((file) => { - convertedRequest.append("file", file); - }); - - const response: AxiosResponse = await axiosInstance.patch(`/posts/${postId}`, convertedRequest, { - headers: { "Content-Type": "multipart/form-data" }, - }); - return response.data; + return res.data; }, - deletePost: async (postId: number): Promise> => { - return axiosInstance.delete(`/posts/${postId}`); + deletePost: async (params: { postId: string | number }): Promise => { + const res = await axiosInstance.delete( + `/posts/${params.postId}` + ); + return res.data; }, - likePost: async (postId: number): Promise => { - const response: AxiosResponse = await axiosInstance.post(`/posts/${postId}/like`); - return response.data; + patchUpdatePost: async (params: { postId: string | number, data?: UpdatePostRequest }): Promise => { + const res = await axiosInstance.patch( + `/posts/${params.postId}`, params?.data + ); + return res.data; }, - unlikePost: async (postId: number): Promise => { - const response: AxiosResponse = await axiosInstance.delete(`/posts/${postId}/like`); - return response.data; + postCreatePost: async (params: { data?: CreatePostRequest }): Promise => { + const res = await axiosInstance.post( + `/posts`, params?.data + ); + return res.data; }, - createComment: async (request: CommentCreateRequest): Promise => { - const response: AxiosResponse = await axiosInstance.post(`/comments`, request); - return response.data; + getPostDetail: async (params: { postId: string | number, params?: Record }): Promise => { + const res = await axiosInstance.get( + `/posts/${params.postId}`, { params: params?.params } + ); + return res.data; }, - deleteComment: async (commentId: number): Promise => { - const response: AxiosResponse = await axiosInstance.delete(`/comments/${commentId}`); - return response.data; + postLikePost: async (params: { postId: string | number, data?: LikePostRequest }): Promise => { + const res = await axiosInstance.post( + `/posts/${params.postId}/like`, params?.data + ); + return res.data; }, - updateComment: async (commentId: number, data: { content: string }): Promise => { - const res = await axiosInstance.patch(`/comments/${commentId}`, data); + deleteLikePost: async (params: { postId: string | number }): Promise => { + const res = await axiosInstance.delete( + `/posts/${params.postId}/like` + ); return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/community/apiDefinitions.ts b/apps/web/src/apis/community/apiDefinitions.ts new file mode 100644 index 00000000..7ac43752 --- /dev/null +++ b/apps/web/src/apis/community/apiDefinitions.ts @@ -0,0 +1,94 @@ +import type { BoardListResponse, BoardResponse, CommentResponse, CreateCommentRequest, CreateCommentResponse, CreatePostResponse, LikePostResponse, PostDetailResponse, PostResponse, UpdateCommentRequest, UpdateCommentResponse, UpdatePostResponse } from './api'; + +export const communityApiDefinitions = { + getBoardList: { + method: 'GET' as const, + path: '{{URL}}/boards' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as BoardListResponse, + }, + getBoard: { + method: 'GET' as const, + path: '{{URL}}/boards/{{board-code}}' as const, + pathParams: {} as { boardCode: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as BoardResponse, + }, + deleteComment: { + method: 'DELETE' as const, + path: '{{URL}}/comments/{{comment-id}}' as const, + pathParams: {} as { commentId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as CommentResponse, + }, + patchUpdateComment: { + method: 'PATCH' as const, + path: '{{URL}}/comments/{{comment-id}}' as const, + pathParams: {} as { commentId: string | number }, + queryParams: {} as Record, + body: {} as UpdateCommentRequest, + response: {} as UpdateCommentResponse, + }, + postCreateComment: { + method: 'POST' as const, + path: '{{URL}}/comments' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as CreateCommentRequest, + response: {} as CreateCommentResponse, + }, + deletePost: { + method: 'DELETE' as const, + path: '{{URL}}/posts/{{post-id}}' as const, + pathParams: {} as { postId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as PostResponse, + }, + patchUpdatePost: { + method: 'PATCH' as const, + path: '{{URL}}/posts/{{post-id}}' as const, + pathParams: {} as { postId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as UpdatePostResponse, + }, + postCreatePost: { + method: 'POST' as const, + path: '{{URL}}/posts' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as CreatePostResponse, + }, + getPostDetail: { + method: 'GET' as const, + path: '{{URL}}/posts/{{post-id}}' as const, + pathParams: {} as { postId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as PostDetailResponse, + }, + postLikePost: { + method: 'POST' as const, + path: '{{URL}}/posts/{{post-id}}/like' as const, + pathParams: {} as { postId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as LikePostResponse, + }, + deleteLikePost: { + method: 'DELETE' as const, + path: '{{URL}}/posts/{{post-id}}/like' as const, + pathParams: {} as { postId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as LikePostResponse, + }, +} as const; + +export type CommunityApiDefinitions = typeof communityApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/community/index.ts b/apps/web/src/apis/community/index.ts index d396a31d..6b8b148f 100644 --- a/apps/web/src/apis/community/index.ts +++ b/apps/web/src/apis/community/index.ts @@ -1,26 +1,15 @@ -export type { - CommentCreateRequest, - CommentIdResponse, - ListPost, - Post, - PostCreateRequest, - PostIdResponse, - PostLikeResponse, - PostUpdateRequest, -} from "./api"; -export { CommunityQueryKeys, communityApi } from "./api"; -export { default as useDeleteComment } from "./deleteComment"; -export { default as useDeleteLike } from "./deleteLikePost"; -export { default as useDeletePost } from "./deletePost"; -export { default as useGetBoard } from "./getBoard"; -export { default as useGetBoardList } from "./getBoardList"; -export { default as useGetPostDetail } from "./getPostDetail"; -export { default as useGetPostList } from "./getPostList"; -export { default as usePatchUpdateComment } from "./patchUpdateComment"; -export { default as useUpdatePost } from "./patchUpdatePost"; -export { default as useCreateComment } from "./postCreateComment"; -export { default as useCreatePost } from "./postCreatePost"; -export { default as usePostLike } from "./postLikePost"; - -// Server-side functions -export { getPostListServer } from "./server"; +export { communityApi } from './api'; +export { communityApiDefinitions, CommunityApiDefinitions } from './apiDefinitions'; +export * from './deleteComment'; +export * from './deleteLikePost'; +export * from './deletePost'; +export * from './getBoard'; +export * from './getBoardList'; +export * from './getPostDetail'; +export * from './getPostList'; +export * from './patchUpdateComment'; +export * from './patchUpdatePost'; +export * from './postCreateComment'; +export * from './postCreatePost'; +export * from './postLikePost'; +export * from './server'; diff --git a/apps/web/src/apis/environments/api.ts b/apps/web/src/apis/environments/api.ts new file mode 100644 index 00000000..df9d1b7d --- /dev/null +++ b/apps/web/src/apis/environments/api.ts @@ -0,0 +1,4 @@ +import { axiosInstance } from "@/utils/axiosInstance"; + +export const environmentsApi = { +}; \ No newline at end of file diff --git a/apps/web/src/apis/environments/apiDefinitions.ts b/apps/web/src/apis/environments/apiDefinitions.ts new file mode 100644 index 00000000..c180e8bd --- /dev/null +++ b/apps/web/src/apis/environments/apiDefinitions.ts @@ -0,0 +1,4 @@ +export const environmentsApiDefinitions = { +} as const; + +export type EnvironmentsApiDefinitions = typeof environmentsApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/environments/index.ts b/apps/web/src/apis/environments/index.ts new file mode 100644 index 00000000..a3e900be --- /dev/null +++ b/apps/web/src/apis/environments/index.ts @@ -0,0 +1,2 @@ +export { environmentsApi } from './api'; +export { environmentsApiDefinitions, EnvironmentsApiDefinitions } from './apiDefinitions'; diff --git a/apps/web/src/apis/image-upload/api.ts b/apps/web/src/apis/image-upload/api.ts index 932d1a69..a2024dda 100644 --- a/apps/web/src/apis/image-upload/api.ts +++ b/apps/web/src/apis/image-upload/api.ts @@ -1,81 +1,67 @@ -import type { AxiosResponse } from "axios"; -import type { FileResponse } from "@/types/file"; -import { axiosInstance, publicAxiosInstance } from "@/utils/axiosInstance"; +import { axiosInstance } from "@/utils/axiosInstance"; + +export type SlackNotificationResponse = void; -// ====== Types ====== -export type SlackNotificationResponse = undefined; export type SlackNotificationRequest = Record; export interface UploadLanguageTestReportResponse { fileUrl: string; } +export type UploadLanguageTestReportRequest = Record; + export interface UploadProfileImageResponse { fileUrl: string; } +export type UploadProfileImageRequest = Record; + +export interface UploadProfileImageBeforeSignupResponse { + fileUrl: string; +} + +export type UploadProfileImageBeforeSignupRequest = Record; + export interface UploadGpaReportResponse { fileUrl: string; } -// ====== API Functions ====== +export type UploadGpaReportRequest = Record; + export const imageUploadApi = { - /** - * 슬랙 알림 전송 - */ postSlackNotification: async (params: { data?: SlackNotificationRequest }): Promise => { const res = await axiosInstance.post( - `https://hooks.slack.com/services/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`, - params?.data, + `https://hooks.slack.com/services/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`, params?.data ); return res.data; }, - /** - * 어학 성적 증명서 업로드 - */ - postUploadLanguageTestReport: async (file: File): Promise => { - const formData = new FormData(); - formData.append("file", file); - const res = await axiosInstance.post(`/file/language-test`, formData, { - headers: { "Content-Type": "multipart/form-data" }, - }); + postUploadLanguageTestReport: async (params: { data?: UploadLanguageTestReportRequest }): Promise => { + const res = await axiosInstance.post( + `/file/language-test`, params?.data + ); return res.data; }, - /** - * 프로필 이미지 업로드 (로그인 후) - */ - postUploadProfileImage: async (file: File): Promise => { - const formData = new FormData(); - formData.append("file", file); - const res = await axiosInstance.post(`/file/profile/post`, formData, { - headers: { "Content-Type": "multipart/form-data" }, - }); + postUploadProfileImage: async (params: { data?: UploadProfileImageRequest }): Promise => { + const res = await axiosInstance.post( + `/file/profile/post`, params?.data + ); return res.data; }, - /** - * 프로필 이미지 업로드 (회원가입 전, 공개 API) - */ - postUploadProfileImageBeforeSignup: async (file: File): Promise => { - const formData = new FormData(); - formData.append("file", file); - const response: AxiosResponse = await publicAxiosInstance.post("/file/profile/pre", formData, { - headers: { "Content-Type": "multipart/form-data" }, - }); - return response.data; + postUploadProfileImageBeforeSignup: async (params: { data?: UploadProfileImageBeforeSignupRequest }): Promise => { + const res = await axiosInstance.post( + `/file/profile/pre`, params?.data + ); + return res.data; }, - /** - * 학점 증명서 업로드 - */ - postUploadGpaReport: async (file: File): Promise => { - const formData = new FormData(); - formData.append("file", file); - const res = await axiosInstance.post(`/file/gpa`, formData, { - headers: { "Content-Type": "multipart/form-data" }, - }); + postUploadGpaReport: async (params: { data?: UploadGpaReportRequest }): Promise => { + const res = await axiosInstance.post( + `/file/gpa`, params?.data + ); return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/image-upload/apiDefinitions.ts b/apps/web/src/apis/image-upload/apiDefinitions.ts new file mode 100644 index 00000000..b42b7d74 --- /dev/null +++ b/apps/web/src/apis/image-upload/apiDefinitions.ts @@ -0,0 +1,46 @@ +import type { SlackNotificationRequest, SlackNotificationResponse, UploadGpaReportResponse, UploadLanguageTestReportResponse, UploadProfileImageBeforeSignupResponse, UploadProfileImageResponse } from './api'; + +export const imageUploadApiDefinitions = { + postSlackNotification: { + method: 'POST' as const, + path: 'https://hooks.slack.com/services/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' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as SlackNotificationRequest, + response: {} as SlackNotificationResponse, + }, + postUploadLanguageTestReport: { + method: 'POST' as const, + path: '{{URL}}/file/language-test' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as UploadLanguageTestReportResponse, + }, + postUploadProfileImage: { + method: 'POST' as const, + path: '{{URL}}/file/profile/post' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as UploadProfileImageResponse, + }, + postUploadProfileImageBeforeSignup: { + method: 'POST' as const, + path: '{{URL}}/file/profile/pre' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as UploadProfileImageBeforeSignupResponse, + }, + postUploadGpaReport: { + method: 'POST' as const, + path: '{{URL}}/file/gpa' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as UploadGpaReportResponse, + }, +} as const; + +export type ImageUploadApiDefinitions = typeof imageUploadApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/image-upload/index.ts b/apps/web/src/apis/image-upload/index.ts index d6ee6647..3f548ce6 100644 --- a/apps/web/src/apis/image-upload/index.ts +++ b/apps/web/src/apis/image-upload/index.ts @@ -1,8 +1,7 @@ -export type { UploadGpaReportResponse, UploadLanguageTestReportResponse, UploadProfileImageResponse } from "./api"; -export { imageUploadApi } from "./api"; - -export { default as useSlackNotification } from "./postSlackNotification"; -export { default as useUploadGpaReport } from "./postUploadGpaReport"; -export { default as useUploadLanguageTestReport } from "./postUploadLanguageTestReport"; -export { default as useUploadProfileImage } from "./postUploadProfileImage"; -export { default as useUploadProfileImagePublic } from "./postUploadProfileImageBeforeSignup"; +export { imageUploadApi } from './api'; +export { imageUploadApiDefinitions, ImageUploadApiDefinitions } from './apiDefinitions'; +export * from './postSlackNotification'; +export * from './postUploadGpaReport'; +export * from './postUploadLanguageTestReport'; +export * from './postUploadProfileImage'; +export * from './postUploadProfileImageBeforeSignup'; diff --git a/apps/web/src/apis/kakao-api/api.ts b/apps/web/src/apis/kakao-api/api.ts index 935a1bc6..8af1475c 100644 --- a/apps/web/src/apis/kakao-api/api.ts +++ b/apps/web/src/apis/kakao-api/api.ts @@ -1,34 +1,33 @@ import { axiosInstance } from "@/utils/axiosInstance"; -export type KakaoUserIdsResponse = undefined; +export type KakaoUserIdsResponse = void; -export type KakaoUnlinkResponse = undefined; +export type KakaoUnlinkResponse = void; export type KakaoUnlinkRequest = Record; -export type KakaoInfoResponse = undefined; +export type KakaoInfoResponse = void; export const kakaoApiApi = { - getKakaoUserIds: async (params: { params?: Record }): Promise => { - const res = await axiosInstance.get(`https://kapi.kakao.com/v1/user/ids?order=dsc`, { - params: params?.params, - }); + getKakaoUserIds: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `https://kapi.kakao.com/v1/user/ids?order=dsc`, { params: params?.params } + ); return res.data; }, postKakaoUnlink: async (params: { data?: KakaoUnlinkRequest }): Promise => { const res = await axiosInstance.post( - `https://kapi.kakao.com/v1/user/unlink?target_id_type=user_id&target_id=3715136239`, - params?.data, + `https://kapi.kakao.com/v1/user/unlink?target_id_type=user_id&target_id=3715136239`, params?.data ); return res.data; }, - getKakaoInfo: async (params: { params?: Record }): Promise => { + getKakaoInfo: async (params: { params?: Record }): Promise => { const res = await axiosInstance.get( - `https://kapi.kakao.com/v2/user/me?property_keys=["kakao_account.email"]&target_id_type=user_id&target_id=3715136239`, - { params: params?.params }, + `https://kapi.kakao.com/v2/user/me?property_keys=["kakao_account.email"]&target_id_type=user_id&target_id=3715136239`, { params: params?.params } ); return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/kakao-api/apiDefinitions.ts b/apps/web/src/apis/kakao-api/apiDefinitions.ts new file mode 100644 index 00000000..b28e91a4 --- /dev/null +++ b/apps/web/src/apis/kakao-api/apiDefinitions.ts @@ -0,0 +1,30 @@ +import type { KakaoInfoResponse, KakaoUnlinkResponse, KakaoUserIdsResponse } from './api'; + +export const kakaoApiApiDefinitions = { + getKakaoUserIds: { + method: 'GET' as const, + path: 'https://kapi.kakao.com/v1/user/ids?order=dsc' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as KakaoUserIdsResponse, + }, + postKakaoUnlink: { + method: 'POST' as const, + path: 'https://kapi.kakao.com/v1/user/unlink?target_id_type=user_id&target_id=3715136239' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as KakaoUnlinkResponse, + }, + getKakaoInfo: { + method: 'GET' as const, + path: 'https://kapi.kakao.com/v2/user/me?property_keys=["kakao_account.email"]&target_id_type=user_id&target_id=3715136239' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as KakaoInfoResponse, + }, +} as const; + +export type KakaoApiApiDefinitions = typeof kakaoApiApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/kakao-api/index.ts b/apps/web/src/apis/kakao-api/index.ts index 0acb2db7..2e56ce45 100644 --- a/apps/web/src/apis/kakao-api/index.ts +++ b/apps/web/src/apis/kakao-api/index.ts @@ -1,4 +1,5 @@ -export { kakaoApiApi } from "./api"; -export { default as getKakaoInfo } from "./getKakaoInfo"; -export { default as getKakaoUserIds } from "./getKakaoUserIds"; -export { default as postKakaoUnlink } from "./postKakaoUnlink"; +export { kakaoApiApi } from './api'; +export { kakaoApiApiDefinitions, KakaoApiApiDefinitions } from './apiDefinitions'; +export * from './getKakaoInfo'; +export * from './getKakaoUserIds'; +export * from './postKakaoUnlink'; diff --git a/apps/web/src/apis/mentor/api.ts b/apps/web/src/apis/mentor/api.ts index d4069700..40d507c5 100644 --- a/apps/web/src/apis/mentor/api.ts +++ b/apps/web/src/apis/mentor/api.ts @@ -1,196 +1,230 @@ -import type { MentoringListItem, VerifyStatus } from "@/types/mentee"; -import { - type MentorCardDetail, - type MentorCardPreview, - MentoringApprovalStatus, - type MentoringItem, -} from "@/types/mentor"; import { axiosInstance } from "@/utils/axiosInstance"; -// QueryKeys for mentor domain -export const MentorQueryKeys = { - myMentorProfile: "myMentorProfile", - mentoringList: "mentoringList", - mentoringNewCount: "mentoringNewCount", - applyMentoringList: "applyMentoringList", - mentorList: "mentorList", - mentorDetail: "mentorDetail", -} as const; - -// Re-export types -export type { MentorCardPreview, MentorCardDetail, MentoringItem }; -export type { MentoringListItem, VerifyStatus }; -export { MentoringApprovalStatus }; - -// Response types -export interface MentoringListResponse { - content: MentoringItem[]; - nextPageNumber: number; +export interface MatchedMentorsResponseContentItem { + id: number; + roomId: number; + nickname: string; + profileImageUrl: string; + country: string; + universityName: string; + term: string; + menteeCount: number; + hasBadge: boolean; + introduction: string; + channels: MatchedMentorsResponseContentItemChannelsItem[]; + isApplied: boolean; } -export interface GetMentoringNewCountResponse { - uncheckedCount: number; +export interface MatchedMentorsResponseContentItemChannelsItem { + type: string; + url: string; } -export interface ApplyMentoringListResponse { - content: MentoringListItem[]; +export interface MatchedMentorsResponse { + content: MatchedMentorsResponseContentItem[]; nextPageNumber: number; } -export interface MentorListResponse { - nextPageNumber: number; - content: MentorCardDetail[]; +export interface ApplyMentoringResponse { + mentoringId: number; } -export interface MatchedMentorsResponse { - content: MentorCardDetail[]; - nextPageNumber: number; - totalElements: number; -} +export type ApplyMentoringRequest = Record; -export interface PatchApprovalStatusRequest { - status: MentoringApprovalStatus; - mentoringId: number; +export interface ConfirmMentoringResponse { + checkedMentoringIds: number[]; } -export interface PatchApprovalStatusResponse { +export type ConfirmMentoringRequest = Record; + +export interface AppliedMentoringsResponseContentItem { mentoringId: number; + profileImageUrl: null; + nickname: string; + isChecked: boolean; + createdAt: string; chatRoomId: number; } -export interface PatchCheckMentoringsRequest { - checkedMentoringIds: number[]; +export interface AppliedMentoringsResponse { + content: AppliedMentoringsResponseContentItem[]; + nextPageNumber: number; } -export interface PatchCheckMentoringsResponse { - checkedMentoringIds: number[]; +export interface MentorListResponseContentItem { + id: number; + profileImageUrl: string; + nickname: string; + country: string; + universityName: string; + term: string; + menteeCount: number; + hasBadge: boolean; + introduction: string; + channels: MentorListResponseContentItemChannelsItem[]; + isApplied: boolean; } -export interface PostApplyMentoringRequest { - mentorId: number; +export interface MentorListResponseContentItemChannelsItem { + type: string; + url: string; } -export interface PostApplyMentoringResponse { - mentoringId: number; +export interface MentorListResponse { + nextPageNumber: number; + content: MentorListResponseContentItem[]; } -export interface PostMentorApplicationRequest { - interestedCountries: string[]; +export interface MentorDetailResponseChannelsItem { + type: string; + url: string; +} + +export interface MentorDetailResponse { + id: number; + profileImageUrl: string; + nickname: string; country: string; universityName: string; - studyStatus: "STUDYING" | "PLANNING" | "COMPLETED"; - verificationFile: File; + term: string; + menteeCount: number; + hasBadge: boolean; + introduction: string; + channels: MentorDetailResponseChannelsItem[]; + passTip: string; + isApplied: boolean; } -export interface PutMyMentorProfileRequest { - channels: { type: string; url: string }[]; - passTip: string; +export interface MyMentorPageResponseChannelsItem { + type: string; + url: string; +} + +export interface MyMentorPageResponse { + id: number; + profileImageUrl: null; + nickname: string; + country: string; + universityName: string; + term: string; + menteeCount: number; + hasBadge: boolean; introduction: string; + passTip: string; + channels: MyMentorPageResponseChannelsItem[]; } -const OFFSET = 5; -const MENTORS_OFFSET = 10; -const MENTEE_OFFSET = 3; +export type UpdateMyMentorPageResponse = Record; -export const mentorApi = { - // === Mentor (멘토) APIs === - getMentorMyProfile: async (): Promise => { - const res = await axiosInstance.get("/mentor/my"); - return res.data; - }, +export type UpdateMyMentorPageRequest = Record; + +export interface MentoringStatusResponse { + mentoringId: number; +} - getMentoringList: async (page: number, size: number = OFFSET): Promise => { - const endpoint = `/mentor/mentorings?size=${size}&page=${page}`; - const res = await axiosInstance.get(endpoint); +export type MentoringStatusRequest = Record; + +export interface ReceivedMentoringsResponseContentItem { + mentoringId: number; + profileImageUrl: null; + nickname: string; + isChecked: boolean; + verifyStatus: string; + createdAt: string; +} + +export interface ReceivedMentoringsResponse { + content: ReceivedMentoringsResponseContentItem[]; + nextPageNumber: number; +} + +export interface UnconfirmedMentoringCountResponse { + uncheckedCount: number; +} + +export const mentorApi = { + getMatchedMentors: async (params: { defaultSize: string | number, defaultPage: string | number, params?: Record }): Promise => { + const res = await axiosInstance.get( + `/mentee/mentorings/matched-mentors?size=${params.defaultSize}&page=${params.defaultPage}`, { params: params?.params } + ); return res.data; }, - getMentoringUncheckedCount: async (): Promise => { - const endpoint = "/mentor/mentorings/check"; - const res = await axiosInstance.get(endpoint); + postApplyMentoring: async (params: { data?: ApplyMentoringRequest }): Promise => { + const res = await axiosInstance.post( + `/mentee/mentorings`, params?.data + ); return res.data; }, - patchApprovalStatus: async (props: PatchApprovalStatusRequest): Promise => { - const { status, mentoringId } = props; - const res = await axiosInstance.patch(`/mentor/mentorings/${mentoringId}`, { - status, - }); + patchConfirmMentoring: async (params: { data?: ConfirmMentoringRequest }): Promise => { + const res = await axiosInstance.patch( + `/mentee/mentorings/check`, params?.data + ); return res.data; }, - patchMentorCheckMentorings: async (body: PatchCheckMentoringsRequest): Promise => { - const res = await axiosInstance.patch("/mentor/mentorings/check", body); + getAppliedMentorings: async (params: { verifyStatus: string | number, defaultSize: string | number, defaultPage: string | number, params?: Record }): Promise => { + const res = await axiosInstance.get( + `/mentee/mentorings?verify-status=${params.verifyStatus}&size=${params.defaultSize}&page=${params.defaultPage}`, { params: params?.params } + ); return res.data; }, - postMentorApplication: async (body: PostMentorApplicationRequest): Promise => { - const formData = new FormData(); - const applicationData = { - interestedCountries: body.interestedCountries, - country: body.country, - universityName: body.universityName, - studyStatus: body.studyStatus, - }; - formData.append( - "mentorApplicationRequest", - new Blob([JSON.stringify(applicationData)], { type: "application/json" }), + getMentorList: async (params: { defaultSize: string | number, defaultPage: string | number, params?: Record }): Promise => { + const res = await axiosInstance.get( + `/mentors?region=미주권&size=${params.defaultSize}&page=${params.defaultPage}`, { params: params?.params } ); - formData.append("file", body.verificationFile); - const res = await axiosInstance.post("/mentor/verification", formData, { - headers: { "Content-Type": "multipart/form-data" }, - }); return res.data; }, - putMyMentorProfile: async (body: PutMyMentorProfileRequest): Promise => { - const res = await axiosInstance.put("/mentor/my", body); + getMentorDetail: async (params: { mentorId: string | number, params?: Record }): Promise => { + const res = await axiosInstance.get( + `/mentors/${params.mentorId}`, { params: params?.params } + ); return res.data; }, - // === Mentee (멘티) APIs === - getApplyMentoringList: async ( - verifyStatus: VerifyStatus, - page: number, - size: number = MENTEE_OFFSET, - ): Promise => { - const res = await axiosInstance.get( - `/mentee/mentorings?verify-status=${verifyStatus}&size=${size}&page=${page}`, + getMyMentorPage: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/mentor/my`, { params: params?.params } ); return res.data; }, - patchMenteeCheckMentorings: async (body: PatchCheckMentoringsRequest): Promise => { - const res = await axiosInstance.patch("/mentee/mentorings/check", body); + putUpdateMyMentorPage: async (params: { data?: UpdateMyMentorPageRequest }): Promise => { + const res = await axiosInstance.put( + `/mentor/my`, params?.data + ); return res.data; }, - postApplyMentoring: async (body: PostApplyMentoringRequest): Promise => { - const res = await axiosInstance.post("/mentee/mentorings", body); + patchMentoringStatus: async (params: { mentoringId: string | number, data?: MentoringStatusRequest }): Promise => { + const res = await axiosInstance.patch( + `/mentor/mentorings/${params.mentoringId}`, params?.data + ); return res.data; }, - // === Mentors (멘토 목록) APIs === - getMentorList: async (region: string, page: number, size: number = MENTORS_OFFSET): Promise => { - const res = await axiosInstance.get(`/mentors?region=${region}&page=${page}&size=${size}`); + patchConfirmMentoring: async (params: { data?: ConfirmMentoringRequest }): Promise => { + const res = await axiosInstance.patch( + `/mentor/mentorings/check`, params?.data + ); return res.data; }, - getMentorDetail: async (mentorId: number): Promise => { - const res = await axiosInstance.get(`/mentors/${mentorId}`); + getReceivedMentorings: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/mentor/mentorings`, { params: params?.params } + ); return res.data; }, - getMatchedMentors: async (params: { - defaultSize: string | number; - defaultPage: string | number; - params?: Record; - }): Promise => { - const { defaultSize, defaultPage, params: queryParams } = params; - const res = await axiosInstance.get( - `/mentors/matched?size=${defaultSize}&page=${defaultPage}`, - { params: queryParams }, + getUnconfirmedMentoringCount: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/mentor/mentorings/check`, { params: params?.params } ); return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/mentor/apiDefinitions.ts b/apps/web/src/apis/mentor/apiDefinitions.ts new file mode 100644 index 00000000..3813a9a1 --- /dev/null +++ b/apps/web/src/apis/mentor/apiDefinitions.ts @@ -0,0 +1,102 @@ +import type { AppliedMentoringsResponse, ApplyMentoringRequest, ApplyMentoringResponse, ConfirmMentoringRequest, ConfirmMentoringResponse, MatchedMentorsResponse, MentorDetailResponse, MentorListResponse, MentoringStatusRequest, MentoringStatusResponse, MyMentorPageResponse, ReceivedMentoringsResponse, UnconfirmedMentoringCountResponse, UpdateMyMentorPageRequest, UpdateMyMentorPageResponse } from './api'; + +export const mentorApiDefinitions = { + getMatchedMentors: { + method: 'GET' as const, + path: '{{URL}}/mentee/mentorings/matched-mentors?size={{default-size}}&page={{default-page}}' as const, + pathParams: {} as { defaultSize: string | number; defaultPage: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as MatchedMentorsResponse, + }, + postApplyMentoring: { + method: 'POST' as const, + path: '{{URL}}/mentee/mentorings' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as ApplyMentoringRequest, + response: {} as ApplyMentoringResponse, + }, + patchConfirmMentoring: { + method: 'PATCH' as const, + path: '{{URL}}/mentee/mentorings/check' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as ConfirmMentoringRequest, + response: {} as ConfirmMentoringResponse, + }, + getAppliedMentorings: { + method: 'GET' as const, + path: '{{URL}}/mentee/mentorings?verify-status={{verify-status}}&size={{default-size}}&page={{default-page}}' as const, + pathParams: {} as { verifyStatus: string | number; defaultSize: string | number; defaultPage: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as AppliedMentoringsResponse, + }, + getMentorList: { + method: 'GET' as const, + path: '{{URL}}/mentors?region=미주권&size={{default-size}}&page={{default-page}}' as const, + pathParams: {} as { defaultSize: string | number; defaultPage: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as MentorListResponse, + }, + getMentorDetail: { + method: 'GET' as const, + path: '{{URL}}/mentors/{{mentor-id}}' as const, + pathParams: {} as { mentorId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as MentorDetailResponse, + }, + getMyMentorPage: { + method: 'GET' as const, + path: '{{URL}}/mentor/my' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as MyMentorPageResponse, + }, + putUpdateMyMentorPage: { + method: 'PUT' as const, + path: '{{URL}}/mentor/my' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as UpdateMyMentorPageRequest, + response: {} as UpdateMyMentorPageResponse, + }, + patchMentoringStatus: { + method: 'PATCH' as const, + path: '{{URL}}/mentor/mentorings/{{mentoring-id}}' as const, + pathParams: {} as { mentoringId: string | number }, + queryParams: {} as Record, + body: {} as MentoringStatusRequest, + response: {} as MentoringStatusResponse, + }, + patchConfirmMentoring: { + method: 'PATCH' as const, + path: '{{URL}}/mentor/mentorings/check' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as ConfirmMentoringRequest, + response: {} as ConfirmMentoringResponse, + }, + getReceivedMentorings: { + method: 'GET' as const, + path: '{{URL}}/mentor/mentorings' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as ReceivedMentoringsResponse, + }, + getUnconfirmedMentoringCount: { + method: 'GET' as const, + path: '{{URL}}/mentor/mentorings/check' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as UnconfirmedMentoringCountResponse, + }, +} as const; + +export type MentorApiDefinitions = typeof mentorApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/mentor/index.ts b/apps/web/src/apis/mentor/index.ts index 7986dd51..d8cbb3dd 100644 --- a/apps/web/src/apis/mentor/index.ts +++ b/apps/web/src/apis/mentor/index.ts @@ -1,26 +1,15 @@ -export type { - MentorCardDetail, - MentorCardPreview, - MentoringApprovalStatus, - MentoringItem, - MentoringListItem, - PostMentorApplicationRequest, - PutMyMentorProfileRequest, - VerifyStatus, -} from "./api"; -export { MentorQueryKeys, mentorApi } from "./api"; -// Mentee (멘티) hooks -export { default as useGetApplyMentoringList, usePrefetchApplyMentoringList } from "./getAppliedMentorings"; -export { default as useGetMentorDetail } from "./getMentorDetail"; -// Mentors (멘토 목록) hooks -export { default as useGetMentorList, usePrefetchMentorList } from "./getMentorList"; -// Mentor (멘토) hooks -export { default as useGetMentorMyProfile } from "./getMyMentorPage"; -export { default as useGetMentoringList } from "./getReceivedMentorings"; -export { default as useGetMentoringUncheckedCount } from "./getUnconfirmedMentoringCount"; -export { default as usePatchMentorCheckMentorings } from "./patchConfirmMentoring"; -export { default as usePatchMenteeCheckMentorings } from "./patchMenteeCheckMentorings"; -export { default as usePatchApprovalStatus } from "./patchMentoringStatus"; -export { default as usePostApplyMentoring } from "./postApplyMentoring"; -export { default as usePostMentorApplication } from "./postMentorApplication"; -export { default as usePutMyMentorProfile } from "./putUpdateMyMentorPage"; +export { mentorApi } from './api'; +export { mentorApiDefinitions, MentorApiDefinitions } from './apiDefinitions'; +export * from './getAppliedMentorings'; +export * from './getMatchedMentors'; +export * from './getMentorDetail'; +export * from './getMentorList'; +export * from './getMyMentorPage'; +export * from './getReceivedMentorings'; +export * from './getUnconfirmedMentoringCount'; +export * from './patchConfirmMentoring'; +export * from './patchMenteeCheckMentorings'; +export * from './patchMentoringStatus'; +export * from './postApplyMentoring'; +export * from './postMentorApplication'; +export * from './putUpdateMyMentorPage'; diff --git a/apps/web/src/apis/news/api.ts b/apps/web/src/apis/news/api.ts index dccf7dc5..a926781a 100644 --- a/apps/web/src/apis/news/api.ts +++ b/apps/web/src/apis/news/api.ts @@ -1,106 +1,79 @@ -import type { AxiosResponse } from "axios"; -import type { ArticleFormData } from "@/components/mentor/ArticleBottomSheetModal/lib/schema"; -import type { Article } from "@/types/news"; import { axiosInstance } from "@/utils/axiosInstance"; -// ====== Query Keys ====== -export const NewsQueryKeys = { - articleList: "articleList", - postAddArticle: "postAddArticle", - putModifyArticle: "putModifyArticle", -} as const; +export interface NewsListResponseNewsResponseListItem { + id: number; + title: string; + description: string; + url: string; + thumbnailUrl: string; + updatedAt: string; +} -// ====== Types ====== -export interface ArticleListResponse { - newsResponseList: Article[]; +export interface NewsListResponse { + newsResponseList: NewsListResponseNewsResponseListItem[]; } -export interface PostArticleLikeResponse { - isLiked: boolean; - likeCount: number; +export interface NewsResponse { + id: number; } -export interface DeleteArticleLikeResponse { - isLiked: boolean; - likeCount: number; +export interface UpdateNewsResponse { + id: number; } -export type UsePostAddArticleRequest = ArticleFormData; +export type UpdateNewsRequest = Record; + +export type LikeNewsResponse = void; + +export type LikeNewsRequest = Record; -export type UsePutModifyArticleRequest = { - body: ArticleFormData & { isImageDeleted?: boolean }; - articleId: number; -}; +export interface CreateNewsResponse { + id: number; +} + +export type CreateNewsRequest = Record; -// ====== API Functions ====== export const newsApi = { - /** - * 아티클 목록 조회 - */ - getArticleList: async (userId: number): Promise => { - const response: AxiosResponse = await axiosInstance.get(`/news?author-id=${userId}`); - return response.data; + getNewsList: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/news?author-id=6`, { params: params?.params } + ); + return res.data; }, - /** - * 아티클 추가 - */ - postAddArticle: async (body: UsePostAddArticleRequest): Promise
=> { - const newsCreateRequest = { - title: body.title, - description: body.description, - url: body.url || "", - }; - - const formData = new FormData(); - formData.append("newsCreateRequest", new Blob([JSON.stringify(newsCreateRequest)], { type: "application/json" })); - if (body.file) { - formData.append("file", body.file); - } - const response: AxiosResponse
= await axiosInstance.post("/news", formData); - return response.data; + deleteNews: async (params: { newsId: string | number }): Promise => { + const res = await axiosInstance.delete( + `/news/${params.newsId}` + ); + return res.data; }, - /** - * 아티클 수정 - */ - putModifyArticle: async (props: UsePutModifyArticleRequest): Promise
=> { - const { body, articleId } = props; - const newsUpdateRequest = { - title: body.title, - description: body.description, - url: body.url || "", - resetToDefaultImage: body.isImageDeleted === true, - }; - const formData = new FormData(); - formData.append("newsUpdateRequest", new Blob([JSON.stringify(newsUpdateRequest)], { type: "application/json" })); - if (body.file) formData.append("file", body.file); - - const response: AxiosResponse
= await axiosInstance.put(`/news/${articleId}`, formData); - return response.data; + putUpdateNews: async (params: { newsId: string | number, data?: UpdateNewsRequest }): Promise => { + const res = await axiosInstance.put( + `/news/${params.newsId}`, params?.data + ); + return res.data; }, - /** - * 아티클 삭제 - */ - deleteArticle: async (articleId: number): Promise => { - const response: AxiosResponse = await axiosInstance.delete(`/news/${articleId}`); - return response.data; + postLikeNews: async (params: { newsId: string | number, data?: LikeNewsRequest }): Promise => { + const res = await axiosInstance.post( + `/news/${params.newsId}/like`, params?.data + ); + return res.data; }, - /** - * 아티클 좋아요 - */ - postArticleLike: async (articleId: number): Promise => { - const response: AxiosResponse = await axiosInstance.post(`/news/${articleId}/like`); - return response.data; + deleteLikeNews: async (params: { newsId: string | number }): Promise => { + const res = await axiosInstance.delete( + `/news/${params.newsId}/like` + ); + return res.data; }, - /** - * 아티클 좋아요 취소 - */ - deleteArticleLike: async (articleId: number): Promise => { - const response: AxiosResponse = await axiosInstance.delete(`/news/${articleId}/like`); - return response.data; + postCreateNews: async (params: { data?: CreateNewsRequest }): Promise => { + const res = await axiosInstance.post( + `/news`, params?.data + ); + return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/news/apiDefinitions.ts b/apps/web/src/apis/news/apiDefinitions.ts new file mode 100644 index 00000000..e9ab03d9 --- /dev/null +++ b/apps/web/src/apis/news/apiDefinitions.ts @@ -0,0 +1,54 @@ +import type { CreateNewsRequest, CreateNewsResponse, LikeNewsResponse, NewsListResponse, NewsResponse, UpdateNewsRequest, UpdateNewsResponse } from './api'; + +export const newsApiDefinitions = { + getNewsList: { + method: 'GET' as const, + path: '{{URL}}/news?author-id=6' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as NewsListResponse, + }, + deleteNews: { + method: 'DELETE' as const, + path: '{{URL}}/news/{{news-id}}' as const, + pathParams: {} as { newsId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as NewsResponse, + }, + putUpdateNews: { + method: 'PUT' as const, + path: '{{URL}}/news/{{news-id}}' as const, + pathParams: {} as { newsId: string | number }, + queryParams: {} as Record, + body: {} as UpdateNewsRequest, + response: {} as UpdateNewsResponse, + }, + postLikeNews: { + method: 'POST' as const, + path: '{{URL}}/news/{{news-id}}/like' as const, + pathParams: {} as { newsId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as LikeNewsResponse, + }, + deleteLikeNews: { + method: 'DELETE' as const, + path: '{{URL}}/news/{{news-id}}/like' as const, + pathParams: {} as { newsId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as LikeNewsResponse, + }, + postCreateNews: { + method: 'POST' as const, + path: '{{URL}}/news' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as CreateNewsRequest, + response: {} as CreateNewsResponse, + }, +} as const; + +export type NewsApiDefinitions = typeof newsApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/news/index.ts b/apps/web/src/apis/news/index.ts index 000e3daa..fd8a124a 100644 --- a/apps/web/src/apis/news/index.ts +++ b/apps/web/src/apis/news/index.ts @@ -1,15 +1,8 @@ -export type { - ArticleListResponse, - DeleteArticleLikeResponse, - PostArticleLikeResponse, - UsePostAddArticleRequest, - UsePutModifyArticleRequest, -} from "./api"; -export { NewsQueryKeys, newsApi } from "./api"; -export { default as useDeleteArticleLike } from "./deleteLikeNews"; -export { default as useDeleteArticle } from "./deleteNews"; -// News (아티클) hooks -export { default as useGetArticleList } from "./getNewsList"; -export { default as usePostAddArticle } from "./postCreateNews"; -export { default as usePostArticleLike } from "./postLikeNews"; -export { default as usePutModifyArticle } from "./putUpdateNews"; +export { newsApi } from './api'; +export { newsApiDefinitions, NewsApiDefinitions } from './apiDefinitions'; +export * from './deleteLikeNews'; +export * from './deleteNews'; +export * from './getNewsList'; +export * from './postCreateNews'; +export * from './postLikeNews'; +export * from './putUpdateNews'; diff --git a/apps/web/src/apis/reports/api.ts b/apps/web/src/apis/reports/api.ts index c1417589..39bd649c 100644 --- a/apps/web/src/apis/reports/api.ts +++ b/apps/web/src/apis/reports/api.ts @@ -1,21 +1,15 @@ -import type { AxiosResponse } from "axios"; -import type { ReportType } from "@/types/reports"; import { axiosInstance } from "@/utils/axiosInstance"; -// ====== Types ====== -export interface UsePostReportsRequest { - targetType: "POST"; // 지금은 게시글 신고 기능만 존재 - targetId: number; // 신고하려는 리소스의 ID - reportType: ReportType; -} +export type ReportResponse = Record; + +export type ReportRequest = Record; -// ====== API Functions ====== export const reportsApi = { - /** - * 신고 등록 - */ - postReport: async (body: UsePostReportsRequest): Promise => { - const response: AxiosResponse = await axiosInstance.post(`/reports`, body); - return response.data; + postReport: async (params: { data?: ReportRequest }): Promise => { + const res = await axiosInstance.post( + `/reports`, params?.data + ); + return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/reports/apiDefinitions.ts b/apps/web/src/apis/reports/apiDefinitions.ts new file mode 100644 index 00000000..e8ba26fb --- /dev/null +++ b/apps/web/src/apis/reports/apiDefinitions.ts @@ -0,0 +1,14 @@ +import type { ReportRequest, ReportResponse } from './api'; + +export const reportsApiDefinitions = { + postReport: { + method: 'POST' as const, + path: '{{URL}}/reports' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as ReportRequest, + response: {} as ReportResponse, + }, +} as const; + +export type ReportsApiDefinitions = typeof reportsApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/reports/index.ts b/apps/web/src/apis/reports/index.ts index 25277463..0115702f 100644 --- a/apps/web/src/apis/reports/index.ts +++ b/apps/web/src/apis/reports/index.ts @@ -1,3 +1,3 @@ -export type { UsePostReportsRequest } from "./api"; -export { reportsApi } from "./api"; -export { default as usePostReports } from "./postReport"; +export { reportsApi } from './api'; +export { reportsApiDefinitions, ReportsApiDefinitions } from './apiDefinitions'; +export * from './postReport'; diff --git a/apps/web/src/apis/universities/api.ts b/apps/web/src/apis/universities/api.ts index 56b2bb19..5137fe10 100644 --- a/apps/web/src/apis/universities/api.ts +++ b/apps/web/src/apis/universities/api.ts @@ -1,5 +1,4 @@ -import type { HomeUniversityName } from "@/types/university"; -import { axiosInstance, publicAxiosInstance } from "@/utils/axiosInstance"; +import { axiosInstance } from "@/utils/axiosInstance"; export interface RecommendedUniversitiesResponseRecommendedUniversitiesItem { id: number; @@ -40,17 +39,17 @@ export interface WishListResponseItemLanguageRequirementsItem { } export interface WishListResponse { - 0: WishListResponseItem[]; - 1: WishListResponseItem[]; + 0: WishListResponse0; + 1: WishListResponse1; } -export type WishResponse = undefined; +export type WishResponse = void; -export type AddWishResponse = undefined; +export type AddWishResponse = void; export type AddWishRequest = Record; -export type IsWishResponse = undefined; +export type IsWishResponse = void; export interface UniversityDetailResponseLanguageRequirementsItem { languageTestType: string; @@ -96,7 +95,6 @@ export interface SearchTextResponseUnivApplyInfoPreviewsItem { backgroundImageUrl: string; studentCapacity: number; languageRequirements: SearchTextResponseUnivApplyInfoPreviewsItemLanguageRequirementsItem[]; - homeUniversityName?: HomeUniversityName; } export interface SearchTextResponseUnivApplyInfoPreviewsItemLanguageRequirementsItem { @@ -129,67 +127,70 @@ export interface SearchFilterResponse { univApplyInfoPreviews: SearchFilterResponseUnivApplyInfoPreviewsItem[]; } -export type ByRegionCountryResponse = undefined; +export type ByRegionCountryResponse = void; export const universitiesApi = { - getRecommendedUniversities: async (params?: { isLogin?: boolean }): Promise => { - const instance = params?.isLogin ? axiosInstance : publicAxiosInstance; - const res = await instance.get(`/univ-apply-infos/recommend`); + getRecommendedUniversities: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/univ-apply-infos/recommend`, { params: params?.params } + ); return res.data; }, - getWishList: async (params: { params?: Record }): Promise => { - const res = await axiosInstance.get(`/univ-apply-infos/like`, { params: params?.params }); + getWishList: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/univ-apply-infos/like`, { params: params?.params } + ); return res.data; }, deleteWish: async (params: { univApplyInfoId: string | number }): Promise => { - const res = await axiosInstance.delete(`/univ-apply-infos/${params.univApplyInfoId}/like`); + const res = await axiosInstance.delete( + `/univ-apply-infos/${params.univApplyInfoId}/like` + ); return res.data; }, - postAddWish: async (params: { - univApplyInfoId: string | number; - data?: AddWishRequest; - }): Promise => { + postAddWish: async (params: { univApplyInfoId: string | number, data?: AddWishRequest }): Promise => { const res = await axiosInstance.post( - `/univ-apply-infos/${params.univApplyInfoId}/like`, - params?.data, + `/univ-apply-infos/${params.univApplyInfoId}/like`, params?.data ); return res.data; }, - getIsWish: async (params: { - univApplyInfoId: string | number; - params?: Record; - }): Promise => { - const res = await axiosInstance.get(`/univ-apply-infos/${params.univApplyInfoId}/like`, { - params: params?.params, - }); + getIsWish: async (params: { univApplyInfoId: string | number, params?: Record }): Promise => { + const res = await axiosInstance.get( + `/univ-apply-infos/${params.univApplyInfoId}/like`, { params: params?.params } + ); return res.data; }, - getUniversityDetail: async (params: { univApplyInfoId: string | number }): Promise => { - const res = await publicAxiosInstance.get(`/univ-apply-infos/${params.univApplyInfoId}`); + getUniversityDetail: async (params: { univApplyInfoId: string | number, params?: Record }): Promise => { + const res = await axiosInstance.get( + `/univ-apply-infos/${params.univApplyInfoId}`, { params: params?.params } + ); return res.data; }, - getSearchText: async (params?: { value?: string }): Promise => { - const res = await publicAxiosInstance.get(`/univ-apply-infos/search/text`, { - params: { value: params?.value ?? "" }, - }); + getSearchText: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/univ-apply-infos/search/text?value=괌`, { params: params?.params } + ); return res.data; }, - getSearchFilter: async (params?: { params?: Record }): Promise => { - const res = await publicAxiosInstance.get(`/univ-apply-infos/search/filter`, { - params: params?.params, - }); + getSearchFilter: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/univ-apply-infos/search/filter`, { params: params?.params } + ); return res.data; }, - getByRegionCountry: async (params: { params?: Record }): Promise => { - const res = await axiosInstance.get(`/universities/search`, { params: params?.params }); + getByRegionCountry: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/universities/search`, { params: params?.params } + ); return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/universities/apiDefinitions.ts b/apps/web/src/apis/universities/apiDefinitions.ts new file mode 100644 index 00000000..5815320c --- /dev/null +++ b/apps/web/src/apis/universities/apiDefinitions.ts @@ -0,0 +1,78 @@ +import type { AddWishResponse, ByRegionCountryResponse, IsWishResponse, RecommendedUniversitiesResponse, SearchFilterResponse, SearchTextResponse, UniversityDetailResponse, WishListResponse, WishResponse } from './api'; + +export const universitiesApiDefinitions = { + getRecommendedUniversities: { + method: 'GET' as const, + path: '{{URL}}/univ-apply-infos/recommend' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as RecommendedUniversitiesResponse, + }, + getWishList: { + method: 'GET' as const, + path: '{{URL}}/univ-apply-infos/like' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as WishListResponse, + }, + deleteWish: { + method: 'DELETE' as const, + path: '{{URL}}/univ-apply-infos/{{univ-apply-info-id}}/like' as const, + pathParams: {} as { univApplyInfoId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as WishResponse, + }, + postAddWish: { + method: 'POST' as const, + path: '{{URL}}/univ-apply-infos/{{univ-apply-info-id}}/like' as const, + pathParams: {} as { univApplyInfoId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as AddWishResponse, + }, + getIsWish: { + method: 'GET' as const, + path: '{{URL}}/univ-apply-infos/{{univ-apply-info-id}}/like' as const, + pathParams: {} as { univApplyInfoId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as IsWishResponse, + }, + getUniversityDetail: { + method: 'GET' as const, + path: '{{URL}}/univ-apply-infos/{{univ-apply-info-id}}' as const, + pathParams: {} as { univApplyInfoId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as UniversityDetailResponse, + }, + getSearchText: { + method: 'GET' as const, + path: '{{URL}}/univ-apply-infos/search/text?value=괌' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as SearchTextResponse, + }, + getSearchFilter: { + method: 'GET' as const, + path: '{{URL}}/univ-apply-infos/search/filter' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as SearchFilterResponse, + }, + getByRegionCountry: { + method: 'GET' as const, + path: '{{URL}}/universities/search' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as ByRegionCountryResponse, + }, +} as const; + +export type UniversitiesApiDefinitions = typeof universitiesApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/universities/index.ts b/apps/web/src/apis/universities/index.ts index 95a44032..8c55a014 100644 --- a/apps/web/src/apis/universities/index.ts +++ b/apps/web/src/apis/universities/index.ts @@ -1,10 +1,11 @@ -export { universitiesApi } from "./api"; -export { default as useDeleteWish } from "./deleteWish"; -export { default as useGetByRegionCountry } from "./getByRegionCountry"; -export { default as useGetIsWish } from "./getIsWish"; -export { default as useGetRecommendedUniversities } from "./getRecommendedUniversities"; -export { default as useGetUniversitySearchByFilter, type UniversitySearchFilterParams } from "./getSearchFilter"; -export { default as useUniversitySearch } from "./getSearchText"; -export { default as useGetUniversityDetail } from "./getUniversityDetail"; -export { default as useGetWishList } from "./getWishList"; -export { default as usePostAddWish } from "./postAddWish"; +export { universitiesApi } from './api'; +export { universitiesApiDefinitions, UniversitiesApiDefinitions } from './apiDefinitions'; +export * from './deleteWish'; +export * from './getByRegionCountry'; +export * from './getIsWish'; +export * from './getRecommendedUniversities'; +export * from './getSearchFilter'; +export * from './getSearchText'; +export * from './getUniversityDetail'; +export * from './getWishList'; +export * from './postAddWish'; diff --git a/apps/web/src/apis/users/api.ts b/apps/web/src/apis/users/api.ts index d91558fd..2e59c96d 100644 --- a/apps/web/src/apis/users/api.ts +++ b/apps/web/src/apis/users/api.ts @@ -4,13 +4,11 @@ export interface NicknameExistsResponse { exists: boolean; } -export type BlockUserResponse = undefined; +export type BlockUserResponse = void; export type BlockUserRequest = Record; -export type UnblockUserRequest = Record; - -export type UnblockUserResponse = undefined; +export type UnblockUserResponse = void; export interface BlockedUsersResponseContentItem { id: number; @@ -25,28 +23,32 @@ export interface BlockedUsersResponse { } export const usersApi = { - getNicknameExists: async (params: { params?: Record }): Promise => { - const res = await axiosInstance.get(`/users/exists?nickname=abc`, { - params: params?.params, - }); + getNicknameExists: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/users/exists?nickname=abc`, { params: params?.params } + ); return res.data; }, - postBlockUser: async (params: { - blockedId: string | number; - data?: BlockUserRequest; - }): Promise => { - const res = await axiosInstance.post(`/users/block/${params.blockedId}`, params?.data); + postBlockUser: async (params: { blockedId: string | number, data?: BlockUserRequest }): Promise => { + const res = await axiosInstance.post( + `/users/block/${params.blockedId}`, params?.data + ); return res.data; }, deleteUnblockUser: async (params: { blockedId: string | number }): Promise => { - const res = await axiosInstance.delete(`/users/block/${params.blockedId}`); + const res = await axiosInstance.delete( + `/users/block/${params.blockedId}` + ); return res.data; }, - getBlockedUsers: async (params: { params?: Record }): Promise => { - const res = await axiosInstance.get(`/users/blocks`, { params: params?.params }); + getBlockedUsers: async (params: { params?: Record }): Promise => { + const res = await axiosInstance.get( + `/users/blocks`, { params: params?.params } + ); return res.data; }, -}; + +}; \ No newline at end of file diff --git a/apps/web/src/apis/users/apiDefinitions.ts b/apps/web/src/apis/users/apiDefinitions.ts new file mode 100644 index 00000000..ac85afce --- /dev/null +++ b/apps/web/src/apis/users/apiDefinitions.ts @@ -0,0 +1,38 @@ +import type { BlockUserResponse, BlockedUsersResponse, NicknameExistsResponse, UnblockUserResponse } from './api'; + +export const usersApiDefinitions = { + getNicknameExists: { + method: 'GET' as const, + path: '{{URL}}/users/exists?nickname=abc' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as NicknameExistsResponse, + }, + postBlockUser: { + method: 'POST' as const, + path: '{{URL}}/users/block/{{blocked-id}}' as const, + pathParams: {} as { blockedId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as BlockUserResponse, + }, + deleteUnblockUser: { + method: 'DELETE' as const, + path: '{{URL}}/users/block/{{blocked-id}}' as const, + pathParams: {} as { blockedId: string | number }, + queryParams: {} as Record, + body: {} as Record, + response: {} as UnblockUserResponse, + }, + getBlockedUsers: { + method: 'GET' as const, + path: '{{URL}}/users/blocks' as const, + pathParams: {} as Record, + queryParams: {} as Record, + body: {} as Record, + response: {} as BlockedUsersResponse, + }, +} as const; + +export type UsersApiDefinitions = typeof usersApiDefinitions; \ No newline at end of file diff --git a/apps/web/src/apis/users/index.ts b/apps/web/src/apis/users/index.ts index ff51c891..586275a1 100644 --- a/apps/web/src/apis/users/index.ts +++ b/apps/web/src/apis/users/index.ts @@ -1,5 +1,6 @@ -export { usersApi } from "./api"; -export { default as deleteUnblockUser } from "./deleteUnblockUser"; -export { default as getBlockedUsers } from "./getBlockedUsers"; -export { default as getNicknameExists } from "./getNicknameExists"; -export { default as postBlockUser } from "./postBlockUser"; +export { usersApi } from './api'; +export { usersApiDefinitions, UsersApiDefinitions } from './apiDefinitions'; +export * from './deleteUnblockUser'; +export * from './getBlockedUsers'; +export * from './getNicknameExists'; +export * from './postBlockUser';