패스트캠퍼스

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

이태우(1990년) 2025. 3. 7. 23:07

공부 시작 시각 인증

공부 시작 시각 인증

수강 인증 사진

수강 인증 사진

학습 인증샷

학습 인증샷

커뮤니티 피드 유즈 케이스

유저 메인 서비스 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