로그인 API
- 입력 데이터: email, password
- email 또는 password가 하나라도 일치하지 않으면 로그인 실패입니다.
- 사용자가 입력한 email을 바탕으로 회원DB에서 일치하는 회원을 찾고,
BcryptPasswordEncoder().matches()
를 이용해 인코딩된 pw와 동일한지 여부 확인
POST /users/login
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
항목 | 타입 | 설명 | 값(예시) | 필수 |
---|---|---|---|---|
string (varchar) | 사용자 email | [email protected] | O | |
password | string (varchar) | 사용자 비밀번호 | 12345678*** | O |
{
"email":"[email protected]",
"password":"12345678***"
}
200 OK
: 로그인 성공
{
"code": 200,
"message": "인증 성공",
"data": {
"token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0dEBnbWFpbC5jb20iLCJwYXNzd29yZCI6InBhc3N3b3JkIiwiZXhwIjoxNjg1OTA2ODM0fQ.IWnrlUFJY2BM45a1tEWDfBRM5SoFShWypH6wOjBuFok"
}
}
401 Unauthorized
: 로그인 실패
{
"code": 401,
"message": "인증 실패",
"data": null
}
회원 가입 API
- 입력 데이터: email, password, nickname
- 프론트에서는 다음의 과정을 진행합니다.
- confirm password
- 영문 8자리 이상, 특수 문자 입력 등 프론트에서 처리
- 이후 완료되면, 사용자에게 한 줄 소개 추가적으로 입력 받음
POST /users/new
{
"email":"[email protected]",
"nickname":"예빈",
"password":"12345678***"
}
-
200 OK
/201 Created
- POST 전송 성공적으로 완료될 시 JWT 토큰 발행
- payload : email, nickname, password
- JWT 토큰 앞자리 7자리로 사용자 고유 토큰 ID 값을 발행합니다.
{ "code": 400, "message": "이미 사용 중인 이메일입니다.", "data": null }
{ "code": 200, "message": "회원 가입 성공", "data": { "token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMzZGQiLCJleHAiOjE2ODI5NTIzNjB9.gpxmzejXcChpbqq02BACqbEd_99qOFSXkFxV6qQfOZE" } }
- POST 전송 성공적으로 완료될 시 JWT 토큰 발행
PATCH /users/updateResolution
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
{
"resolution":"화이팅팅"
}
{
"code": 401,
"message": "회원 인증 실패",
"data": null
}
{
"code": 200,
"message": "다짐이 수정되었습니다.",
"data": {
"resolution": "화이팅팅"
}
}
마이 페이지, 친구 API
GET /users/myPage
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
- 오늘의 구절(phrase)은 매일 바뀌므로, 오늘의 date에 해당하는 phrase를 응답으로 받습니다.
- 내 정보들: email, code, resolution, friendList, requestedList
- 내 고유 code는 친구 추가 시 필요한 정보입니다.
{
"code": 200,
"message": "회원의 정보를 성공적으로 불러왔습니다.",
"data": {
"id": 1,
"email": "[email protected]",
"token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwiZXhwIjoxNjgyODY0ODQ0fQ.gjhdUxtf81pvp8EZfR9YO94_ZXkgQswQCPdJcVcXEIk",
"code": "eeea16ab",
"resolution": null,
"friendList": [],
"requestedList": [
2
],
"requesterList": []
}
}
{
"code": 200,
"message": "회원의 정보를 성공적으로 불러왔습니다.",
"data": {
"id": 1,
"email": "[email protected]",
"token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwiZXhwIjoxNjgyODY0ODQ0fQ.gjhdUxtf81pvp8EZfR9YO94_ZXkgQswQCPdJcVcXEIk",
"code": "eeea16ab",
"resolution": null,
"friendList": [],
"requestedList": [],
"requesterList": []
}
}
{
"code": 401,
"message": "회원 인증 실패",
"data": null
}
- 친구 코드로 친구를 검색합니다. (path variable)
- React Native에서 Get 메서드에 대해 Request Body 확인하지 않으므로 Post로 변경
- 친구 코드는 노출되어도 큰 문제 없는 정보라 판단되어 PathVariable로 변경
POST /friend/findByCode/{code}
POST /friend/findByCode/1234567
{
"code": 200,
"message": "친구 검색 성공",
"data": {
"friendId": 1
}
}
{
"code": 404,
"message": "회원을 찾을 수 없습니다.",
"data": null
}
- 친구 신청을 보냅니다.
POST /friend/request
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
{
"friendId":1
}
- 친구 신청이 완료되면 myPage에서 requesterIdList 에 친구 id가 추가됩니다. 상대방 친구 mypage에는 requestedId에 id가 추가됩니다.
{
"code": 201,
"message": "친구 신청을 성공적으로 보냈습니다.",
"data": null
}
- 자기 자신을 검색하거나, 친구 신청이 이미 완료됐거나, 친구 검색에 실패한 경우 400 code를 반환합니다.
{
"code": 400,
"message": "자기 자신에게 친구 신청을 보낼 수 없습니다.",
"data": null
}
{
"code": 400,
"message": "친구 신청이 이미 완료됐습니다.",
"data": null
}
{
"code": 400,
"message": "친구 검색에 실패했습니다.",
"data": null
}
POST /friend/acceptRequest
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
{
"friendId":1
}
- 친구 신청을 승인하면 requesterIdList, requestedIdList에서 삭제가 되고, friendList에 추가됩니다.
- 자기 자신을 검색하거나, 친구 신청이 이미 완료됐거나, 친구 검색에 실패한 경우 400 code를 반환합니다.
{
"code": 201,
"message": "친구 신청 승인 완료",
"data": null
}
POST /friend/rejectRequest
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
{
"friendId":1
}
- 친구 신청 거절을 완료하면, friendRequest 객체가 삭제됩니다.
{
"code": 201,
"message": "친구 신청 거절 완료",
"data": null
}
GET /friend/list
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
- 친구의 id, 닉네임, 한줄 소개를 표시합니다.
{
"code": 200,
"message": "친구 목록 가져오기 성공",
"data": [
{
"friendId": 1,
"nickname": "ybrin",
"resolution": null
},
{
"friendId": 1,
"nickname": "ybrin",
"resolution": null
}
]
}
{
"code": 401,
"message": "회원 인증 실패",
"data": null
}
GET /friend/requested
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
- 받은 친구 신청 각각에 대해, 친구 id, 닉네임, resolution이 표시됩니다.
{
"code": 201,
"message": "친구 신청 목록을 성공적으로 가져왔습니다.",
"data": [
{
"friendId": 1,
"nickname": "ybrin",
"resolution": null
}
]
}
{
"code": 401,
"message": "회원 인증 실패",
"data": null
}
일기장 API
- 오늘 작성한 일기를 조회합니다.
- 오늘의 날짜와 작성한 일기의 날짜를 비교하여 작성한 일기가 있는지 확인합니다.
GET /diary/today
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
200 OK
/201 Created
- POST 전송 성공
401 Unauthorized
- 로그인이 필요한 경우 (JWT 토큰 만료 시)
-
200 OK
-
일기를 아직 작성하지 않은 경우
{ "code": 200, "message": "오늘 작성된 일기가 없습니다.", "data": null }
-
-
일기 작성한 경우
-
diaryId
: 해당 일기 pk값 -
sentimentId
: 해당 sentiment 테이블 pk값 -
privacy
: 공개 설정 코드 -
sentiment
: 감정 코드 -
visitied
: 방문 조회수 (1일 경우 감정 변경 모달창 구현){ "code": 200, "message": "오늘의 일기를 성공적으로 가져왔습니다", "data": { "diaryId": 2, "sentimentId": 2, "content": "im happy", "privacy": 2, "sentiment": 1, "visited": 1 } }
-
-
401 Unauthorized
: 회원 인증 실패한 경우{ "code": 401, "message": "회원 인증 실패", "data": null }
- 사용자가 오늘의 일기를 새로 작성하거나, 이미 작성된 일기를 수정합니다.
POST /diary/today
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
-
privacy 설정하지 않는 경우 자동적으로 0
-
setting: 0(비공개, default), 1(친구공개), 2(전체공개)
{ "content":"즐거웠던 하루였다" }
{ "content":"즐거워던 하루였다", "privacy":1 }
-
201 Created
-
POST 전송 성공
{ "code": 201, "message": "새로운 일기가 등록되었습니다.", "data": { "diaryId": null, "sentimentId": null, "content": "오늘 스쿼트를 100개 한 하루...힘들지만 매우 뿌듯하다.", "privacy": 0, "sentiment": 7, "visited": 0 } }
-
일기 수정
{ "code": 201, "message": "새로운 일기가 등록되었습니다.", "data": { "diaryId": null, "sentimentId": null, "content": "오늘 스쿼트를 100개 한 하루...힘들지만 매우 뿌듯하다.", "privacy": 0, "sentiment": 7, "visited": 2 } }
-
-
400 Bad Request
-
content 내용이 없는 경우
{ "code": 400, "message": "일기 내용이 없습니다.", "data": null }
-
- 7가지 감정 중, 자연어 처리 모델을 통해 분석된 일기에 대한 대표 감정을 바꿀 수 있습니다.
- 감정 변경 모달 창은 처음 감정을 도출될 때에만 뜨게 됩니다. (
visitied=1
인 경우)
PATCH /diary/updateSentiment
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
- 바꿀 일기 테이블의 pk id, one-to-one 관계를 맺고 있는 sentiment 테이블의 pk id와 대표 감정의 code를 전달합니다.
{
"diaryId":1,
"sentimentId":1,
"newSentiment":7
}
200 OK
-
PATCH 전송 성공
{ "code": 200, "message": "감정이 성공적으로 변경되었습니다.", "data": { "diaryId": 1, "sentimentId": 1, "updatedSentiment": 7 } }
-
- 사용자는 그동안 작성한 전체 일기들을 조회합니다.
GET /diary/list
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
200 OK
/201 Created
- POST 전송 성공
401 Unauthorized
- 로그인이 필요한 경우 (JWT 토큰 만료 시)
-
200 OK
{ "code": 200, "message": "내 일기 목록을 성공적으로 가져왔습니다.", "data": [ { "diaryId": 2, "sentimentId": 2, "content": "드디 주말이다 휴", "privacy": 0, "sentiment": 0, "visited": 2, "createdDate": "2023-11-11T01:53:05.970923" } ] }
커뮤니티 게시판 API
- 사용자는 다른 사용자들의 전체 공개된 일기 게시물들을 볼 수 있습니다.
GET /community/diaries
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8
- privacy 설정 값이 전체 공개 (setting값:2) 인 게시물들의 리스트를 보여줍니다.
- comment 리스트도 함께 나옴
- privacy 설정 값이 전체 공개 (setting값:2) 인 게시물들의 리스트를 보여줍니다.
- comment 리스트도 함께 나옴
{
"code": 200,
"message": "일기 목록을 커뮤니티에 성공적으로 가져왔습니다.",
"data": [
{
"diaryId": 1,
"memberId": 1,
"code": "d3601200",
"nickname": "yebin",
"content": "졸업까지 얼마 안남아서 너무 슬퍼퍼",
"createdDate": "2023-11-09T12:29:45.599339",
"comments": [
{
"memberId": null,
"nickname": "익명",
"content": "나는 얼른 졸업하고 싶어~",
"createdDate": "2023-11-09T12:47:39.244858"
},
{
"memberId": 1,
"nickname": "yebin",
"content": "나도 이제 대학 생활이 끝난 다니 슬퍼~",
"createdDate": "2023-11-09T13:00:32.353228"
},
{
"memberId": 1,
"nickname": "yebin",
"content": "나도 슬퍼",
"createdDate": "2023-11-10T21:37:38.18776"
}
]
}
]
}
200 OK
/201 Created
- GET성공
401 Unauthorized
- 로그인이 필요한 경우 (JWT 토큰 만료 시)
- 사용자는 관심이 가는 게시글에 댓글을 달아 반응을 할 수 있습니다.
POST /community/diaries/{diary_id}/comment
- Authorization : Bearer Token
- Content-Type : application/json; charset=utf-8\
- content : 댓글 내용
{
"content":"나도 이제 대학 생활이 끝난 다니 슬퍼~"
}
200 OK
/201 Created
- POST 전송 성공
401 Unauthorized
- 로그인이 필요한 경우 (JWT 토큰 만료 시)
404 Not Found
- 원본 게시글이 비공개로 전환되었거나, 삭제되는 등 어떠한 이유로 원본 게시글을 더 이상 볼 수 없는 경우
400 Bad Request
- 서버 오류로 댓글을 다는데 실패한 경우