Giter Club home page Giter Club logo

delimo-server's Introduction

로그인 API

1. 사용자가 email과 password를 입력하여 로그인합니다.

  • 입력 데이터: email, password
  • email 또는 password가 하나라도 일치하지 않으면 로그인 실패입니다.
  • 사용자가 입력한 email을 바탕으로 회원DB에서 일치하는 회원을 찾고, BcryptPasswordEncoder().matches() 를 이용해 인코딩된 pw와 동일한지 여부 확인

URL / Method

POST /users/login

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

Request Body

항목 타입 설명 값(예시) 필수
email string (varchar) 사용자 email [email protected] O
password string (varchar) 사용자 비밀번호 12345678*** O
{
    "email":"[email protected]",
    "password":"12345678***"
}

Response

  • 200 OK : 로그인 성공
{
  "code": 200,
  "message": "인증 성공",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0dEBnbWFpbC5jb20iLCJwYXNzd29yZCI6InBhc3N3b3JkIiwiZXhwIjoxNjg1OTA2ODM0fQ.IWnrlUFJY2BM45a1tEWDfBRM5SoFShWypH6wOjBuFok"
  }
}
  • 401 Unauthorized : 로그인 실패
{
  "code": 401,
  "message": "인증 실패",
  "data": null
}
회원 가입 API

1. 사용자가 회원 가입합니다. ✅

  • 입력 데이터: email, password, nickname
  • 프론트에서는 다음의 과정을 진행합니다.
    • confirm password
    • 영문 8자리 이상, 특수 문자 입력 등 프론트에서 처리
  • 이후 완료되면, 사용자에게 한 줄 소개 추가적으로 입력 받음

URL / Method

POST /users/new

Request Body

{
  "email":"[email protected]",
  "nickname":"예빈",
  "password":"12345678***"
}

Response

  • 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"
        }
    }

2. 회원 가입 후 한 줄 소개 수정 ✅

URL / Method

PATCH /users/updateResolution

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

RequestBody

{
    "resolution":"화이팅팅"
}

ResponseBody

{
    "code": 401,
    "message": "회원 인증 실패",
    "data": null
}
{
    "code": 200,
    "message": "다짐이 수정되었습니다.",
    "data": {
        "resolution": "화이팅팅"
    }
}
마이 페이지, 친구 API

1. 마이 페이지에서 나의 정보를 확인합니다. ✅

URL / Method

GET /users/myPage

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

Response Body

  • 오늘의 구절(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
}

2. code로 친구를 검색합니다.

  • 친구 코드로 친구를 검색합니다. (path variable)

URL / Method

  • React Native에서 Get 메서드에 대해 Request Body 확인하지 않으므로 Post로 변경
  • 친구 코드는 노출되어도 큰 문제 없는 정보라 판단되어 PathVariable로 변경
POST /friend/findByCode/{code}

Path Variable

POST /friend/findByCode/1234567

Response Body

{
    "code": 200,
    "message": "친구 검색 성공",
    "data": {
        "friendId": 1
    }
}
{
    "code": 404,
    "message": "회원을 찾을 수 없습니다.",
    "data": null
}

3. 친구 신청을 보냅니다. ✅

  • 친구 신청을 보냅니다.

URL / Method

POST /friend/request

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

Request Body

{
    "friendId":1
}

Response Body

  • 친구 신청이 완료되면 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
}

4. 친구 신청을 승인합니다. ✅

URL / Method

POST /friend/acceptRequest

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

Request Body

{
    "friendId":1
}

Response Body

  • 친구 신청을 승인하면 requesterIdList, requestedIdList에서 삭제가 되고, friendList에 추가됩니다.
  • 자기 자신을 검색하거나, 친구 신청이 이미 완료됐거나, 친구 검색에 실패한 경우 400 code를 반환합니다.
{
    "code": 201,
    "message": "친구 신청 승인 완료",
    "data": null
}

5. 친구 신청을 거절합니다. ✅

URL / Method

POST /friend/rejectRequest

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

Request Body

{
    "friendId":1
}

Response Body

  • 친구 신청 거절을 완료하면, friendRequest 객체가 삭제됩니다.
{
    "code": 201,
    "message": "친구 신청 거절 완료",
    "data": null
}

6. 친구 목록을 조회합니다. ✅

URL / Method

GET /friend/list

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

Response Body

  • 친구의 id, 닉네임, 한줄 소개를 표시합니다.
{
    "code": 200,
    "message": "친구 목록 가져오기 성공",
    "data": [
        {
            "friendId": 1,
            "nickname": "ybrin",
            "resolution": null
        },
        {
            "friendId": 1,
            "nickname": "ybrin",
            "resolution": null
        }
    ]
}
{
    "code": 401,
    "message": "회원 인증 실패",
    "data": null
}

7. 받은 친구 신청 목록을 조회합니다. ✅

URL / Method

GET /friend/requested

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

Response Body

  • 받은 친구 신청 각각에 대해, 친구 id, 닉네임, resolution이 표시됩니다.
{
    "code": 201,
    "message": "친구 신청 목록을 성공적으로 가져왔습니다.",
    "data": [
        {
            "friendId": 1,
            "nickname": "ybrin",
            "resolution": null
        }
    ]
}
{
    "code": 401,
    "message": "회원 인증 실패",
    "data": null
}
일기장 API

1. 사용자는 오늘 작성한 일기를 조회합니다. ✅

  • 오늘 작성한 일기를 조회합니다.
  • 오늘의 날짜와 작성한 일기의 날짜를 비교하여 작성한 일기가 있는지 확인합니다.

URL / Method

GET /diary/today

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

Response

  • 200 OK / 201 Created
    • POST 전송 성공
  • 401 Unauthorized
    • 로그인이 필요한 경우 (JWT 토큰 만료 시)

Response Body

  • 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
    }

2. 사용자는 오늘의 일기를 작성 또는 수정합니다. ✅

  • 사용자가 오늘의 일기를 새로 작성하거나, 이미 작성된 일기를 수정합니다.

URL / Method

POST /diary/today

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

Request Body

  • privacy 설정하지 않는 경우 자동적으로 0

  • setting: 0(비공개, default), 1(친구공개), 2(전체공개)

    {
        "content":"즐거웠던 하루였다"
    }
    {
        "content":"즐거워던 하루였다",
        "privacy":1
    }

Response

  • 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
      }

3. 사용자는 대표 감정을 변경할 수 있습니다. ✅

  • 7가지 감정 중, 자연어 처리 모델을 통해 분석된 일기에 대한 대표 감정을 바꿀 수 있습니다.
  • 감정 변경 모달 창은 처음 감정을 도출될 때에만 뜨게 됩니다. (visitied=1 인 경우)

URL / Method

PATCH /diary/updateSentiment

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

Request Body

  • 바꿀 일기 테이블의 pk id, one-to-one 관계를 맺고 있는 sentiment 테이블의 pk id와 대표 감정의 code를 전달합니다.
{
    "diaryId":1,
    "sentimentId":1,
    "newSentiment":7
}

Response

  • 200 OK
    • PATCH 전송 성공

      {
          "code": 200,
          "message": "감정이 성공적으로 변경되었습니다.",
          "data": {
              "diaryId": 1,
              "sentimentId": 1,
              "updatedSentiment": 7
          }
      }

4. 사용자는 자신이 작성한 전체 일기 목록 조회합니다.

  • 사용자는 그동안 작성한 전체 일기들을 조회합니다.

URL / Method

GET /diary/list

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

Response

  • 200 OK / 201 Created
    • POST 전송 성공
  • 401 Unauthorized
    • 로그인이 필요한 경우 (JWT 토큰 만료 시)

Response Body

  • 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

1. 커뮤니티 게시판을 봅니다. (오늘의 일기)

  • 사용자는 다른 사용자들의 전체 공개된 일기 게시물들을 볼 수 있습니다.

URL / Method

GET /community/diaries

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8

Response Body

  • privacy 설정 값이 전체 공개 (setting값:2) 인 게시물들의 리스트를 보여줍니다.
  • comment 리스트도 함께 나옴

Response Body

  • 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"
                }
            ]
        }
    ]
}

Response

  • 200 OK / 201 Created
    • GET성공
  • 401 Unauthorized
    • 로그인이 필요한 경우 (JWT 토큰 만료 시)

2. 사용자는 게시글에 댓글을 달 수 있습니다.

  • 사용자는 관심이 가는 게시글에 댓글을 달아 반응을 할 수 있습니다.

URL / Method

POST /community/diaries/{diary_id}/comment

Request Headers

  • Authorization : Bearer Token
  • Content-Type : application/json; charset=utf-8\

Request Body

  • content : 댓글 내용
{
    "content":"나도 이제 대학 생활이 끝난 다니 슬퍼~"
}

Response

  • 200 OK / 201 Created
    • POST 전송 성공
  • 401 Unauthorized
    • 로그인이 필요한 경우 (JWT 토큰 만료 시)
  • 404 Not Found
    • 원본 게시글이 비공개로 전환되었거나, 삭제되는 등 어떠한 이유로 원본 게시글을 더 이상 볼 수 없는 경우
  • 400 Bad Request
    • 서버 오류로 댓글을 다는데 실패한 경우

delimo-server's People

Contributors

yebinleee avatar

Stargazers

 avatar  avatar

Watchers

 avatar

delimo-server's Issues

일기 조회수 변경 필요

  • 일기에 대한 수정 이후, visitied 값을 0으로 다시 변경해야 할 필요가 있음
  • 수정 이후 도출되는 감정 분석 결과 변경 필요를 위해 다시 조회 수 reset이 필요

일기 작성 시간 확인 기능 변경하기

목적 및 목표

일기 작성 및 수정 시에 오늘 작성된 일기 여부 확인 (날짜 및 시간 저장 로직 재확인하기)


작업 상세 내용

  • 오늘 작성된 일기 여부 확인하기 (현재 날짜/시각과 비교 로직 확인하기)
  • 일기 작성 및 수정 시 날짜 및 시간 저장 로직 수정
  • 하루에 일기 1개만 작성 가능하도록 로직 확인하기 (중복 일기 작성 불가)
  • 작성된 일기 없는 경우에 오늘 일기 GET 요청 로직 기능 재확인하기

참고 사항

DiaryController.java

        Diary diaryGet = null;
        boolean created = false;

// 오늘 생성된 일기가 없는 경우 (새로 생성)
        if (todayDiary.isEmpty()) {
            diaryService.insertDiary(member.get(), diaryDto, resultSentiment);
            diaryGet = diaryService.insertDiary(member.get(), diaryDto, resultSentiment);
            created = true;
        }
// 오늘 일기가 생성되어 있는 경우 (updateDiary)
        else {
            diaryService.updateDiary(member.get(), diaryDto, resultSentiment);
        }

        todayDiary = diaryService.getTodayDiary(member.get());
        if (!created){
            diaryGet = todayDiary.get(); // 새로 생성된 경우가 아닌 경우 이미 저장되어 있는 값 가져오
        }

        DiaryResponseDto diaryData = DiaryResponseDto.builder()
                .diaryId(todayDiary.get().getId())
                .sentimentId(todayDiary.get().getDiarySentiment().getId())
                .diaryId(diaryGet.getId())
                .sentimentId(diaryGet.getDiarySentiment().getId())
                .content(diaryDto.getContent())
                .privacy(diaryDto.getPrivacy())
                .sentiment(resultSentiment)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.