|
|
@@ -0,0 +1,406 @@
|
|
|
+{
|
|
|
+ "info": {
|
|
|
+ "_postman_id": "mypage-api-collection",
|
|
|
+ "name": "bitForum - MyPage API",
|
|
|
+ "description": "bitForum 마이페이지 API 컬렉션\n\n로그인 후 Bearer Token을 설정하여 사용하세요.",
|
|
|
+ "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
|
|
+ },
|
|
|
+ "variable": [
|
|
|
+ {
|
|
|
+ "key": "baseUrl",
|
|
|
+ "value": "https://localhost:4000",
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "key": "accessToken",
|
|
|
+ "value": "",
|
|
|
+ "type": "string"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "key": "refreshToken",
|
|
|
+ "value": "",
|
|
|
+ "type": "string"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "auth": {
|
|
|
+ "type": "bearer",
|
|
|
+ "bearer": [
|
|
|
+ {
|
|
|
+ "key": "token",
|
|
|
+ "value": "{{accessToken}}",
|
|
|
+ "type": "string"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ "item": [
|
|
|
+ {
|
|
|
+ "name": "🔐 Auth",
|
|
|
+ "item": [
|
|
|
+ {
|
|
|
+ "name": "[POST] 로그인",
|
|
|
+ "event": [
|
|
|
+ {
|
|
|
+ "listen": "test",
|
|
|
+ "script": {
|
|
|
+ "exec": [
|
|
|
+ "var json = pm.response.json();",
|
|
|
+ "if (json.success && json.data) {",
|
|
|
+ " pm.collectionVariables.set('accessToken', json.data.accessToken);",
|
|
|
+ " pm.collectionVariables.set('refreshToken', json.data.refreshToken);",
|
|
|
+ " console.log('AccessToken, RefreshToken 저장 완료');",
|
|
|
+ "}"
|
|
|
+ ],
|
|
|
+ "type": "text/javascript"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "request": {
|
|
|
+ "auth": {
|
|
|
+ "type": "noauth"
|
|
|
+ },
|
|
|
+ "method": "POST",
|
|
|
+ "header": [
|
|
|
+ {
|
|
|
+ "key": "Content-Type",
|
|
|
+ "value": "application/json"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "body": {
|
|
|
+ "mode": "raw",
|
|
|
+ "raw": "{\n \"email\": \"test@bitforum.io\",\n \"password\": \"password123\"\n}"
|
|
|
+ },
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/auth/login",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "auth", "login"]
|
|
|
+ },
|
|
|
+ "description": "로그인 후 accessToken, refreshToken이 자동으로 컬렉션 변수에 저장됩니다."
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "[POST] 로그아웃",
|
|
|
+ "event": [
|
|
|
+ {
|
|
|
+ "listen": "test",
|
|
|
+ "script": {
|
|
|
+ "exec": [
|
|
|
+ "var json = pm.response.json();",
|
|
|
+ "if (json.success) {",
|
|
|
+ " pm.collectionVariables.set('accessToken', '');",
|
|
|
+ " pm.collectionVariables.set('refreshToken', '');",
|
|
|
+ " console.log('토큰 초기화 완료');",
|
|
|
+ "}"
|
|
|
+ ],
|
|
|
+ "type": "text/javascript"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "request": {
|
|
|
+ "method": "POST",
|
|
|
+ "header": [
|
|
|
+ {
|
|
|
+ "key": "Content-Type",
|
|
|
+ "value": "application/json"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "body": {
|
|
|
+ "mode": "raw",
|
|
|
+ "raw": "{\n \"refreshToken\": \"{{refreshToken}}\"\n}"
|
|
|
+ },
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/auth/logout",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "auth", "logout"]
|
|
|
+ },
|
|
|
+ "description": "로그아웃. RefreshToken을 서버에서 폐기합니다.\n\n- Bearer 토큰 필요\n- 성공 시 컬렉션 변수의 토큰이 자동 초기화됩니다.\n- 이미 폐기된 토큰이면 그냥 성공 반환"
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "📧 이메일",
|
|
|
+ "item": [
|
|
|
+ {
|
|
|
+ "name": "[POST] 이메일 변경",
|
|
|
+ "request": {
|
|
|
+ "method": "POST",
|
|
|
+ "header": [
|
|
|
+ {
|
|
|
+ "key": "Content-Type",
|
|
|
+ "value": "application/json"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "body": {
|
|
|
+ "mode": "raw",
|
|
|
+ "raw": "{\n \"newEmail\": \"newemail@bitforum.io\"\n}"
|
|
|
+ },
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/mypage/email",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "mypage", "email"]
|
|
|
+ },
|
|
|
+ "description": "이메일 변경 요청. 새 이메일로 인증 메일이 발송됩니다.\n\n- 중복 이메일 불가\n- 현재 이메일과 동일하면 에러\n- 변경 즉시 이메일이 바뀌고, IsEmailVerified가 false로 변경"
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "[GET] 이메일 인증",
|
|
|
+ "request": {
|
|
|
+ "auth": {
|
|
|
+ "type": "noauth"
|
|
|
+ },
|
|
|
+ "method": "GET",
|
|
|
+ "header": [],
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/mypage/email/verify?token=YOUR_TOKEN_HERE",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "mypage", "email", "verify"],
|
|
|
+ "query": [
|
|
|
+ {
|
|
|
+ "key": "token",
|
|
|
+ "value": "YOUR_TOKEN_HERE",
|
|
|
+ "description": "이메일 인증 토큰 (이메일 변경 시 발송된 링크에 포함)"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ "description": "이메일 인증 토큰으로 이메일 인증 완료.\n\n- 인증 불필요 (Anonymous)\n- 토큰 만료: 24시간\n- 이미 인증된 토큰은 재사용 불가"
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "👤 별명",
|
|
|
+ "item": [
|
|
|
+ {
|
|
|
+ "name": "[POST] 별명 변경",
|
|
|
+ "request": {
|
|
|
+ "method": "POST",
|
|
|
+ "header": [
|
|
|
+ {
|
|
|
+ "key": "Content-Type",
|
|
|
+ "value": "application/json"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "body": {
|
|
|
+ "mode": "raw",
|
|
|
+ "raw": "{\n \"name\": \"새별명\"\n}"
|
|
|
+ },
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/mypage/name",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "mypage", "name"]
|
|
|
+ },
|
|
|
+ "description": "별명 변경.\n\n- 최대 40자\n- 중복 별명 불가\n- 변경 로그 기록됨"
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "[DELETE] 별명 삭제",
|
|
|
+ "request": {
|
|
|
+ "method": "DELETE",
|
|
|
+ "header": [],
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/mypage/name",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "mypage", "name"]
|
|
|
+ },
|
|
|
+ "description": "별명 삭제 (null로 초기화).\n\n- 이미 비어있으면 에러\n- 삭제 로그 기록됨"
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "💬 한마디",
|
|
|
+ "item": [
|
|
|
+ {
|
|
|
+ "name": "[POST] 한마디 변경",
|
|
|
+ "request": {
|
|
|
+ "method": "POST",
|
|
|
+ "header": [
|
|
|
+ {
|
|
|
+ "key": "Content-Type",
|
|
|
+ "value": "application/json"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "body": {
|
|
|
+ "mode": "raw",
|
|
|
+ "raw": "{\n \"summary\": \"안녕하세요! 비트포럼입니다.\"\n}"
|
|
|
+ },
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/mypage/summary",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "mypage", "summary"]
|
|
|
+ },
|
|
|
+ "description": "한마디(상태 메시지) 변경.\n\n- 최대 50자\n- 변경 로그 기록됨"
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "[DELETE] 한마디 삭제",
|
|
|
+ "request": {
|
|
|
+ "method": "DELETE",
|
|
|
+ "header": [],
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/mypage/summary",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "mypage", "summary"]
|
|
|
+ },
|
|
|
+ "description": "한마디 삭제 (null로 초기화).\n\n- 이미 비어있으면 에러\n- 삭제 로그 기록됨"
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "📝 자기소개",
|
|
|
+ "item": [
|
|
|
+ {
|
|
|
+ "name": "[POST] 자기소개 변경",
|
|
|
+ "request": {
|
|
|
+ "method": "POST",
|
|
|
+ "header": [
|
|
|
+ {
|
|
|
+ "key": "Content-Type",
|
|
|
+ "value": "application/json"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "body": {
|
|
|
+ "mode": "raw",
|
|
|
+ "raw": "{\n \"intro\": \"비트코인과 블록체인에 관심이 많은 개발자입니다.\"\n}"
|
|
|
+ },
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/mypage/intro",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "mypage", "intro"]
|
|
|
+ },
|
|
|
+ "description": "자기소개 변경.\n\n- 최대 3000자\n- 변경 로그 기록됨"
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "[DELETE] 자기소개 삭제",
|
|
|
+ "request": {
|
|
|
+ "method": "DELETE",
|
|
|
+ "header": [],
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/mypage/intro",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "mypage", "intro"]
|
|
|
+ },
|
|
|
+ "description": "자기소개 삭제 (null로 초기화).\n\n- 이미 비어있으면 에러\n- 삭제 로그 기록됨"
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "🔔 수신설정",
|
|
|
+ "item": [
|
|
|
+ {
|
|
|
+ "name": "[POST] 수신설정 변경",
|
|
|
+ "request": {
|
|
|
+ "method": "POST",
|
|
|
+ "header": [
|
|
|
+ {
|
|
|
+ "key": "Content-Type",
|
|
|
+ "value": "application/json"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "body": {
|
|
|
+ "mode": "raw",
|
|
|
+ "raw": "{\n \"isReceiveSMS\": true,\n \"isReceiveEmail\": true,\n \"isReceiveNote\": false\n}"
|
|
|
+ },
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/mypage/receive-settings",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "mypage", "receive-settings"]
|
|
|
+ },
|
|
|
+ "description": "SMS/이메일/쪽지 수신 설정 변경.\n\n- 변경된 항목만 동의 시간이 업데이트됩니다."
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "🔒 보안",
|
|
|
+ "item": [
|
|
|
+ {
|
|
|
+ "name": "[POST] 비밀번호 변경",
|
|
|
+ "request": {
|
|
|
+ "method": "POST",
|
|
|
+ "header": [
|
|
|
+ {
|
|
|
+ "key": "Content-Type",
|
|
|
+ "value": "application/json"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "body": {
|
|
|
+ "mode": "raw",
|
|
|
+ "raw": "{\n \"currentPassword\": \"password123\",\n \"newPassword\": \"newpassword456\",\n \"confirmPassword\": \"newpassword456\"\n}"
|
|
|
+ },
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/mypage/password",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "mypage", "password"]
|
|
|
+ },
|
|
|
+ "description": "비밀번호 변경.\n\n- 현재 비밀번호 검증 필수\n- 새 비밀번호 6자 이상\n- newPassword와 confirmPassword 일치 필요"
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "[POST] 회원탈퇴",
|
|
|
+ "request": {
|
|
|
+ "method": "POST",
|
|
|
+ "header": [
|
|
|
+ {
|
|
|
+ "key": "Content-Type",
|
|
|
+ "value": "application/json"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "body": {
|
|
|
+ "mode": "raw",
|
|
|
+ "raw": "{\n \"password\": \"password123\"\n}"
|
|
|
+ },
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/mypage/withdraw",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "mypage", "withdraw"]
|
|
|
+ },
|
|
|
+ "description": "회원 탈퇴.\n\n- 비밀번호 검증 필수\n- 모든 RefreshToken 무효화\n- IsWithdraw = true, DeletedAt 설정 (소프트 삭제)"
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "[GET] 로그인 기록",
|
|
|
+ "request": {
|
|
|
+ "method": "GET",
|
|
|
+ "header": [],
|
|
|
+ "url": {
|
|
|
+ "raw": "{{baseUrl}}/api/mypage/login-logs?page=1&pageSize=20",
|
|
|
+ "host": ["{{baseUrl}}"],
|
|
|
+ "path": ["api", "mypage", "login-logs"],
|
|
|
+ "query": [
|
|
|
+ {
|
|
|
+ "key": "page",
|
|
|
+ "value": "1",
|
|
|
+ "description": "페이지 번호 (기본값: 1)"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "key": "pageSize",
|
|
|
+ "value": "20",
|
|
|
+ "description": "페이지 크기 (기본값: 20, 최대: 50)"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ "description": "로그인 기록 조회.\n\n- 최신순 정렬\n- 페이지네이션 지원 (page, pageSize)\n- 응답: items[], totalCount, page, pageSize"
|
|
|
+ },
|
|
|
+ "response": []
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|