[Toy] 제작한 api 목록 및 사용 방법

서연·2023년 8월 30일
0

toy-project-1

목록 보기
3/5
post-thumbnail

토이프로젝트에서 제작한 api 모음 및 사용 방법에 대한 안내

1. AuthController

1-1. 회원가입 POST : /api/auth/signUp

  • request
{
  "email": "user3@email.com",
  "name": "유저3",
  "password": "user3password",
  "nickname": "user3",
  "phoneNum": "010-3333-3333",
  "gender": "남성",
  "age": 20,
  "agreement": true
}
  • response
{
    "result": true,
    "message": "SignUp success!",
    "data": null
}
  • 회원가입 성공 여부만 message로 알려주며, 따로 반환하는 데이터는 없다.

1-2. 로그인 POST : /api/auth/signIn

  • request
{
    "userEmail" : "user3@email.com",
    "userPassword" : "user3password"
}
  • response
{
    "result": true,
    "message": "Sign In Success",
    "data": {
        "token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ1c2VyM0BlbWFpbC5jb20iLCJpYXQiOjE2OTM0MDMyMDQsImV4cCI6MTY5MzQwNjgwNH0.P4TPvbG5zJjYv3RJqu_EMGAg6cCFi8TU6KGZ3-F4jiGZSdeHqKLDzQ-qrIJv_VFJZ7pf7s7rBvKHQY3om-QbBA",
        "exprTime": 3600000,
        "user": {
            "id": 4,
            "email": "user3@email.com",
            "name": "유저3",
            "password": "",
            "nickname": "user3",
            "phoneNum": "010-3333-3333",
            "gender": "남성",
            "age": 20,
            "agreement": true
        }
    }
}
  • 로그인이 되면 유저 객체에 대한 로그인 정보가 담긴 jwt 토큰이 생성됨
  • 이 토큰은 1시간 후에 만료됨 (exprTime)
  • 프론트에서는 다른 서비스에서 request 시 이 토큰을 헤더 정보에 포함시켜서 이후의 로직을 처리하면 된다.
  • 기존에 있는 휴대폰 번호, 이메일이 이미 가입된 정보이면 가입이 불가하도록 구현해놨다. (이메일의 경우 중복 체크 단계에서 통과되지만, 휴대폰 번호는 중복 확인 과정이 없기 때문에 가입 시 이를 판단하게 된다.)

1-3. 이메일 중복 체크 POST : /api/auth/emailCheck

  • request
{
    "check" : "use1@email.com"
}
  • response
{
    "result": false,
    "message": "Existed Email",
    "data": null
}

or 

{
    "result": true,
    "message": "can use this email",
    "data": null
}
  • true/false 여부로 가입 가능 여부를 판단 가능하다.

1-4. 닉네임 중복 체크 POST : /api/auth/nicknameCheck

  • request
{
    "check" : "user1"
}
  • response
{
    "result": false,
    "message": "Existed nickname",
    "data": null
}

or 

{
    "result": true,
    "message": "can use this nickname",
    "data": null
}
  • true/false 여부로 닉네임 사용 가능 여부를 판단 가능하다.
  • 중복 체크나 존재 여부 관련해서 해당 dto를 같이 쓰도록 구현했기 때문에 request 시 변수가 "check" 임에 유의하자.

1-5. 회원 탈퇴 DELETE: /api/auth/delete

  • request
    • header
        Key : Authorization
        Value : Bearer + 로그인 시 받은 Token
  • response
{
    "result": true,
    "message": "Successfully deleted user",
    "data": "user5@email.com"
}

1-6. 프로필 사진 등록 및 수정 POST: /api/auth/setPhoto

  • request

    • header
        Key : Authorization
        Value : Bearer + 로그인 시 받은 Token
    • Body
       {
        "file" : photo file
        }
    • body에 파일을 첨부해줍니다!
  • response

    {
        "result": true,
        "message": "Profile Photo saved successfully",
        "data": null
    }

1-7. 닉네임 등록 및 수정 POST: /api/auth/setNickname

  • request

    • header
        Key : Authorization
        Value : Bearer + 로그인 시 받은 Token
    • Body
       {
        nickname
        }
    • (중요) key 값 설정 필요 없이 그냥 닉네임만 보내도 되게 했습니다.
  • response

      {
          "result": true,
          "message": "Nickname saved successfully",
          "data": "고심고심"
      }

1-8. 닉네임 조회 GET: /api/auth/viewProfile

  • request
    • header
        Key : Authorization
        Value : Bearer + 로그인 시 받은 Token
  • response
{
    "result": true,
    "message": "Profile Photo retrieved successfully",
    "data": {
        "userNickname": "고심고심",
        "resourceUrl": "file:/C:/Users/User/JavaWorkspace/toy_back/diary/src/main/resources/static/files/003a3be9-9328-4d94-a179-5b9f37c06d6a_고심합격.jpg"
    }
}
  • 닉네임과 사진 조회를 한 번에 할 수 있게 하려했는데 파일 구조 외에 프런트에서 바로 접근할 수 있는 url을 제작하는 법에 대해 명확히 이해를 못했다. aws 보안 설정을 달리하면 접근 가능할 수 있게 될 것 같긴 한데... 고민 끝에 사진을 직접 보내는 방식을 시도해서 그 방법으로 통신을 일단 하는 게 좋을 것 같다.

1-9. 프로필 사진 조회 GET: /api/auth/viewPhoto

  • request
    • header
        Key : Authorization
        Value : Bearer + 로그인 시 받은 Token
  • response
    프로필 사진 반환! (사진 파일 자체가 반환된다~)

2. DiaryController

2-1. 일기 작성 POST : /api/diary/create

  • request

    • header
        Key : Authorization
        Value : Bearer + 로그인 시 받은 Token
    • Body
       {
        "diaryDetail" : "오늘은 알고리즘 스터디를 했다. 너무 재밌었다.",
        "addDate" : "2023-08-27"
        }
  • response

{
    "result": true,
    "message": "Complete Create Diary",
    "data": "기쁨"
}
  • 일기를 작성하면 일기 저장 로직이 구현되어 있는 DiaryService.createDiary 부분에서 감정 평가에 대한 FastApi를 호출 후 diaryDetail 내용에 대한 감정평가까지 이뤄질 예정.
  • diaryName 이라는 변수는 이메일 + 날짜를 조합한 고유 아이디 값을 생성하여 저장한다. (ex. user3@email.com 2023-08-30)
  • 일기가 저장된 후 일기에 대한 감정 결과만 반환한다.

2-2 날짜 별 일기 조회 GET : /api/diary/view

  • request
    • header
        Key : Authorization
        Value : Bearer + 로그인 시 받은 Token
http://localhost:8080/api/diary/view?addDate=2023-08-27
  • addDate=날짜 를 통해 해당 날짜의 일기를 조회한다.

  • body는 사용하지 않으며 url로 쿼리를 전송하는 Get 방식

  • response

{
    "result": true,
    "message": "Find Diary",
    "data": {
        "addDate": "2023-08-27",
        "diaryDetail": "오늘은 알고리즘 스터디를 했다. 너무 재밌었다.",
        "emotion": "기쁨"
    }
}
  • 해당 날짜의 일기, 일기 내용, 감정이 반환된다.
  • 못 찾으면 false 반환됨

2-3. 일기 수정 PUT : /api/diary/edit

  • request

    • header
        Key : Authorization
        Value : Bearer + 로그인 시 받은 Token
    • Body
    {
        "diaryDetail" : "사실 오늘은 늦잠자서 모각코 오전에 지각을 했다. 아차차 ㅎㅎㅎㅎ",
        "addDate" : "2023-01-01"
    }
  • response

{
    "result": true,
    "message": "edit Successful",
    "data": "기쁨"
}
  • PUT 요청을 해야하는 것에 주의하기 !!

2-4. 일기 삭제 DELETE : /api/diary/delete

  • request
    • header
        Key : Authorization
        Value : Bearer + 로그인 시 받은 Token
http://localhost:8080/api/diary/delete?addDate=2023-01-01
  • addDate=날짜 를 통해 해당 날짜의 일기를 조회한다.

  • body는 사용하지 않으며 url로 쿼리를 전송하는 방식

  • response

{
    "result": true,
    "message": "Delete Successful",
    "data": "2023-01-01"
}

or

{
    "result": false,
    "message": "user didn't write diary",
    "data": null
}
  • 해당 날짜의 일기를 삭제하고 성공 여부를 반환한다.

3. MessageController

3-1. 채팅 저장 POST : /api/message/save

  • request

    • header
        Key : Authorization
        Value : Bearer + 로그인 시 받은 Token
    • Body
      {
      "diaryName": "user3@email.com 2023-09-05",
      "conversation": { "role": "user", "content": "오늘 너무너무 힘들다." }
       } 
  • response

{
    "result": true,
    "message": "Message saved complete",
    "data": {
        "role": "user",
        "content": "오늘 너무너무 힘들다."
    }
}

3-2 날짜 별 채팅 조회 GET : /api/message/view

  • request

    • header
        Key : Authorization
        Value : Bearer + 로그인 시 받은 Token
    http://localhost:8080/api/message/view?addDate=2023-09-02
    • addDate=날짜 를 통해 해당 날짜의 일기를 조회한다.
    • body는 사용하지 않으며 url로 쿼리를 전송하는 Get 방식
  • response

{
    "result": true,
    "message": "Message Find Complete",
    "data": {
        "diaryName": "user3@email.com 2023-09-02",
        "conversation": [
            {
                "role": "user",
                "content": "야 말해봐"
            },
            {
                "role": "assistant",
                "content": "무엇을 말씀드릴까요? 무엇에 대해 대화하고 싶으신가요?"
            },
            {
                "role": "user",
                "content": "1 2 3 1 2 3이 숫자를 기억해"
            },
            {
                "role": "assistant",
                "content": "알겠습니다. 숫자를 기억해야 한다는 의미인가요? 제가 도와드릴 수 있을까요?"
            },
            {
                "role": "user",
                "content": "네가 기억하라고 했던 숫자가 뭐야"
            },
        ]
    }
}

3-3. 채팅 삭제 DELETE : /api/message/delete

  • request

    • header
        Key : Authorization
        Value : Bearer + 로그인 시 받은 Token
    http://localhost:8080/api/message/delete?addDate=2023-01-01
    • addDate=날짜 를 통해 해당 날짜의 일기를 조회한다.
    • body는 사용하지 않으며 url로 쿼리를 전송하는 방식
  • response

{
    "result": true,
    "message": "Message Deletion Completed",
    "data": "2023-09-05"
}
profile
삽질 기록장/ 📍다른 삽질 기록장 https://sqlimblife.tistory.com/

0개의 댓글