{ "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": [] } ] } ] }