원본 API데이터 모델📌 어드민어드민 📌 인증로그인 ✅회원가입 ✅로그아웃 ✅인증 ❓📌 사용자사용자목록 ✅ 현재 접속 중인 사용자목록 사용자 정보 ✅프로필 이미지 변경 ✅커버 이미지 변경 x📌 설정내 정보 변경 ✅비밀번호 변경 ✅📌 채널채널 목록채널 정보특정 채널의 포스트 목록 ✅특정 사용자의 포스트 목록 ✅특정 채널에 포스트 작성하기 ✅특정 포스트 상세보기 ✅내가 작성한 포스트 수정하기내가 작성한 포스트 삭제하기 ✅📌 좋아요특정 포스트 좋아요 ✅특정 포스트 좋아요 취소 ✅📌 댓글특정 포스트에 댓글 달기 ✅특정 포스트에 단 내 댓글 지우기 ✅📌 알림나의 알림 목록 ✅알림 확인 처리 ✅알림 생성 ✅📌 팔로우특정 유저 팔로우 ✅특정 유저 언팔 ✅📌 메시지나의 메세지(소통한 유저 목록)특정 사용자와 소통한 메세지 목록특정 사용자에게 메세지 전송메세지 확인 처리📌 검색사용자 검색 ✅전체 검색(포스트, 사용자) ✅
원본 API
API Host ⇒
https://kdt.frontend.4th.programmers.co.kr:5001
기본 요구사항
- 사용자는 회원가입과 로그인을 할 수 있습니다.
- 사용자는 채널에 올라온 글을 볼 수 있습니다.
- 사용자는 가입자 목록을 볼 수 있습니다.
- 사용자는 가입자를 이름으로 검색을 할 수 있습니다.
- 사용자는 가입자의 정보를 볼 수 있습니다.
- 사용자는 포스트 혹은 가입자를 검색할 수 있습니다.
- 인증된 사용자는 자신의 정보를 변경할 수 있습니다.
- 인증된 사용자는 채널에 올라온 글을 볼 수 있습니다.
- 인증된 사용자는 채널에 포스트를 남길 수 있습니다.
- 인증된 사용자는 포스트를 좋아요 할 수 있습니다.
- 인증된 사용자는 포스트에 댓글을 남길 수 있습니다.
- 인증된 사용자는 자신의 알림 목록을 확인 할 수 있습니다.
- SPA 형태로 만들어주세요.
- 엉뚱한 페이지에 접속하면 404 페이지를 보여주세요.
선택 요구사항
- 사용자는 현재 접속 중인 사용자를 볼 수 있습니다.
- 인증된 사용자는 다른 가입자에게 메시지를 보낼 수 있습니다.
- 인증된 사용자는 자신에게 온 메시지 목록을 확인 할 수 있습니다.
- 인증된 사용자는 특정 사용자와의 메시지 대화 내역을 확인 할 수 있습니다.
- 인증된 사용자는 프로필 이미지 변경 및 포스트를 작성할 때 이미지를 첨부할 수 있습니다. 파일 업로드를 구현해보세요.
- 다크 모드를 적용해보세요.
- 테스트 할 것: User 객체의 followers, following
데이터 모델
User
{ "coverImage": String, // 커버 이미지 x "image": String, // 프로필 이미지 o "role": String, // x "emailVerified": Boolean, // 사용되지 않음 x "banned": Boolean, // 사용되지 않음 x "isOnline": Boolean, x "posts": Post[], "likes": Like[], "comments": String[], "followers": [], // Follow[] 유저가 신청 "following": [ // 자기가 신청 { "_id": "6169e91316cb2265df003c6d", // 팔로잉 객체 고유 id "user": "6169e58216cb2265df003bf4", // 현재 유저의 id "follower": "6169e206aa57d952c6dc1edd", // 나를 팔로우하는 유저의 id "createdAt": "2021-10-15T20:48:19.816Z", "updatedAt": "2021-10-15T20:48:19.816Z", "__v": 0 } ], "notifications": Notification[], "messages": Message[], x "_id": String, // userId "fullName": String, "email": String, "createdAt": String, "updatedAt": String } // Follow { "_id": String, "user": String, // 사용자 id "follower": String, // 사용자 id "createdAt": String, "updatedAt": String }
Channel
{ "authRequired": Boolean, // 사용되지 않음 "posts": String[], "_id": String, "name": String, "description": String, "createdAt": String, "updatedAt": String }
Post
{ "likes": Like[], // 이 포스트가 받은 좋아요 목 "comments": Comment[], "_id": String, "image": Optional<String>, // 사용되지 않음 "imagePublicId": Optional<String>, // 사용되지 않음 "title": String, "channel": Channel, // 사용되지 않음 "author": User, "createdAt": String, "updatedAt": String // 사용되지 않음 }
Like
{ "_id": String, // like 객체 자체 id "user": String, // 좋아요를 누른 사람의 id "post": String, // 포스트 id "createdAt": String, "updatedAt": String }
Comment
{ "_id": String, // comment 자체 id "comment": String, "author": User, // comment를 작성한 유저 "post": String, // 포스트 id "createdAt": String, "updatedAt": String }
Notification
{ "seen": Boolean, "_id": String, // Notification 자체의 id "author": User, // 알림을 생성한 사람의 User 객체 id "user": User | String, // 알림을 받는 사람의 User 객체 id "post": Nullable<String>, // 특정 Post의 id "follow": Optional<Follow>, // Follow 객체의 id "like": Optional<Like> "comment": Optional<Comment>, // Comment 객체의 id ? or Comment 객체 자체 "message": Optional<String>, // Messsage 객체의 id "createdAt": String, "updatedAt": String }
Follow
{ "_id": String, "user": String, // 사용자 id, 팔로우 당한 사람 "follower": String, // 사용자 id, 팔로우 신청한 사람ㄱ "createdAt": String, "updatedAt": String }
Conversation
{ "_id": String[], "message": String, "sender": User, "receiver": User, "seen": Boolean, "createdAt": String }
Message
{ "_id": String, "message": String, "sender": User, "receiver": User, "seen": Boolean, "createdAt": String, "updatedAt": String }
📌 어드민
어드민
각 서버에 어드민 계정이 따로 있고, 공통적으로 다음 계정으로 생성됩니다.
email: admin@programmers.co.kr password: programmers
포스트를 남기기 위해서는 채널이 필요하기 때문에 채널 생성이 필요합니다.
채널 추가는 어드민 계정으로 가능하고 다음과 같이 요청을 보낼 수 있습니다.
POST /channels/create
❗ auth에 Bearer token에 admin 계정 토큰 넣어주기
Request Body
{ "authRequired": Boolean // 채널 내용을 로그인한 사람만 볼 수 있는지 여부 "description": String // 채널 설명 "name": String // 채널 이름 }
📌 인증
로그인 ✅
회원가입 ✅
로그아웃 ✅
사용자가 로그아웃 합니다.
POST /logout
인증 ❓
📌 사용자
사용자목록 ✅
현재 접속 중인 사용자목록
사용자 정보 ✅
프로필 이미지 변경 ✅
커버 이미지 변경 x
📌 설정
내 정보 변경 ✅
비밀번호 변경 ✅
📌 채널
채널 목록
채널 정보
특정 채널의 포스트 목록 ✅
특정 사용자의 포스트 목록 ✅
특정 채널에 포스트 작성하기 ✅
특정 채널에 포스트를 작성합니다.
POST /posts/create
Request Header
Authorization: bearer JWT토큰
Request Body
FormData
title: String, image: Binary | null, channelId: String
Response
⇒
POST
type의 데이터가 옴 ! { "likes": Like[], "comments": Comment[], "_id": String, "image": Optional<String>, // 사용되지 않음 "imagePublicId": Optional<String>, // 사용되지 않음 "title": String, "channel": Channel, // 사용되지 않음 "author": User, "createdAt": String, "updatedAt": String // 사용되지 않음 }
특정 포스트 상세보기 ✅
내가 작성한 포스트 수정하기
내가 작성한 포스트 삭제하기 ✅
📌 좋아요
특정 포스트 좋아요 ✅
특정 포스트 좋아요 취소 ✅
📌 댓글
특정 포스트에 댓글 달기 ✅
특정 포스트에 단 내 댓글 지우기 ✅
📌 알림
나의 알림 목록 ✅
알림 확인 처리 ✅
알림 생성 ✅
상대방에게 알림을 보냅니다.
POST /notifications/create
원래는 서버에서 해주는게 맞는 작업이지만 API 호출로 알림을 보낼 수 있도록 작성했습니다.
Request Header
Authorization: bearer JWT토큰
Request Body
notificationTypeId
는 type에 해당하는 객체의 id를 넣어주세요.- COMMENT일 경우엔 댓글 id
- FOLLOW일 경우엔 팔로우 id
- LIKE일 경우엔 좋아요 id
- MESSAGE일 경우엔 메시지 id
postId
는 type이 FOLLOW일 경우엔 null로 보내주세요.{ "notificationType": "COMMENT" | "FOLLOW" | "LIKE" | "MESSAGE", "notificationTypeId": String, "userId": String, // 알림을 받을 사람의 id ? "postId": Nullable<String> }
Response
Notification