본문 바로가기

패스트캠퍼스

패스트캠퍼스 환급챌린지 3일차 : 9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online 강의 후기

공부 시작 시각 인증

공부 시작 시각 인증

수강 인증 사진

수강 인증 사진

학습 인증샷

학습 인증샷

커뮤니티 피드 유즈 케이스

유저 메인 서비스 FLOW

  1. 유저 생성
    • 유저는 id 를 통해 구분이 되어야 함
    • 이름, 프로필 이미지를 입력 받으면 저장되어야 함
      • 단, 이름은 빈 값이 입력되면 안됨
  2. 팔로우 기능:
    • 사용자는 다른 이용자를 팔로우 할 수 있음
    • 팔로우 취소 할 수 있음
    • 자기 자신을 팔로우 할 수 없음
  3. 프로필 노출:
    • 사용자 프로필을 누르면 다음과 같은 정보들이 노출 됨
      • 이름, 유저 프로필, 팔로잉 숫자, 팔로워 숫자
      • 팔로잉 팔로우 유저 리스트
        • 이름, 프로필
        • 단, 팔로잉, 팔로우 숫자를 클릭 했을 때에 각 유저 리스트가 노출됨

피드 서비스 메인 FLOW

  1. 게시물 작성:
    • 사용자가 텍스트를 입력하고
    • 사용자가 공개 대상 (예: 모두 공개, 팔로워 전용)을 선택합니다.
    • 사용자가 게시물을 제출합니다.
      • 단, 게시물의 글자수는 5글자 이상 500자 이하여야 합니다.
  2. 댓글 작성:
    • 시용자기 텍스트를 입력하고
    • 사용자가 댓글을 제출합니다.
      • 단, 댓글의 글자수는 100자 이하여야 합니다.
  3. 게시물 상호작용:
    • 사용자는 '좋아요' 버튼을 눌러 게시물을 좋아할 수 있습니다.
      • 본인 게시글은 본인이 좋아요를 누를 수 없습니다.
    • 사용자는 댓글 섹션에 메시지를 입력하여 게시물에 댓글을 달 수 있습니다.
    • 좋아요 개수를 누르면 좋아요를 누른 인원들을 볼 수 있음
    • 댓글 개수를 누르면 댓글 리스트가 보일 수 있음
    • 글 수정 버튼을 누르면 글을 수정할 수 있음
      • 본인이 작성한 글이 아니면 수정 할 수 없음
      • 수정이 된 여부와 수정된 시간을 같이 저장해야 함
    • 댓글 수정 버튼을 누르면 댓글을 수정 할 수 있음
      • 본인이 작성한 댓글이 아니면 수정 할 수 없음
      • 수정이 된 여부와 수정된 시간을 같이 저장해야 함
  4. 피드 보기:
    • 사용자는 팔로우 한 사람이 작성한 글을 시간 순서대로 볼 수 있습니다.
    • 사용자는 피드를 스크롤하여 콘텐츠를 봅니다.
    • 게시글은 다음과 같은 정보를 제공합니다.
      • 글 내용, 작성자 이름, 작성자 프로필, 좋아요 개수, 댓글 개수, 수정 여부 , 발행 일자 (수정 시간), 나의 좋아요 여부
  5. 댓글 리스트:
    • 댓글 리스트에는 다음과 같은 정보들이 노출되어야 함
      • 작성자 이름, 작성자 프로필, 댓글 내용, 좋아요 개수, 수정 여부, 발행 일자 (수정 시간), 나의 좋아요 여부
    • 댓글에 좋아요를 누를 수 있음

User.java

package org.fastcampus.domain;

import java.util.Objects;

class User {
    private final Long id;
    private final UserInfo info;
    private final UserRelationCounter followingCount;
    private final UserRelationCounter followerCount;

    public User(Long id, UserInfo userInfo) {
        this.id = id;
        this.info = userInfo;
        this.followingCount = new UserRelationCounter();
        this.followerCount = new UserRelationCounter();
    }

    public void follow(User targetUser) {
        if (targetUser.equals(this)) {
            throw new IllegalArgumentException();
        }

        followingCount.increase();
        targetUser.increaseFollowerCount();
    }

    public void unfollow(User targetUser) {
        if (targetUser.equals(this)) {
            throw new IllegalArgumentException();
        }

        followingCount.decrease();
        targetUser.decreaseFollowerCount();
    }

    private void increaseFollowerCount() {
        followerCount.increase();
    }

    private void decreaseFollowerCount() {
        followerCount.decrease();
    }

    @Override
    public boolean equals(Object o) {
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        User user = (User) o;
        return Objects.equals(id, user.id);
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(id);
    }
}

UserInfo.java

package org.fastcampus.domain;

class UserInfo {
    private final String name;
    private final String profileImageUrl;

    public UserInfo(String name, String profileImageUrl) {

        if (name == null || name.isEmpty()) {
            throw new IllegalArgumentException();
        }

        this.name = name;
        this.profileImageUrl = profileImageUrl;
    }
}

UserRelationCounter.java

package org.fastcampus.domain;

public class UserRelationCounter {
    private int count;

    public UserRelationCounter() {
        this.count = 0;
    }

    public void increase() {
        this.count++;
    }

    public void decrease() {
        if (count <= 0) {
            return;
        }
        this.count--;
    }
}

 

공부 종료 시각 인증

공부 종료 시각 인증

https://bit.ly/4hTSJNB