본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
공부 시작 시각 인증
공부 시작 시각 인증
수강 인증 사진
수강 인증 사진
User.java
package org.fastcampus.user.domain;
import java.util.Objects;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import org.fastcampus.common.domain.*;
@Builder
@Getter
@AllArgsConstructor
public class User {
private Long id;
private UserInfo info;
private PositiveIntegerCounter followingCount;
private PositiveIntegerCounter followerCount;
public User(Long id, UserInfo userInfo) {
if (userInfo == null) {
throw new IllegalArgumentException();
}
this.id = id;
this.info = userInfo;
this.followingCount = new PositiveIntegerCounter();
this.followerCount = new PositiveIntegerCounter();
}
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);
}
public String getName() {
return info.getName();
}
public String getProfileUrl() {
return info.getProfileImageUrl();
}
public int followerCount() {
return followerCount.getCount();
}
public int followingCount() {
return followingCount.getCount();
}
}
UserEntity.java
package org.fastcampus.user.repository.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.fastcampus.common.domain.*;
import org.fastcampus.common.repository.entity.*;
import org.fastcampus.user.domain.*;
@Entity
@Table(name = "community_user")
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class UserEntity extends TimeBaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String profileUrl;
private Integer followerCount;
private Integer followingCount;
public UserEntity(User user) {
this.id = user.getId();
this.name = user.getName();
this.profileUrl = user.getProfileUrl();
this.followerCount = user.followerCount();
this.followingCount = user.followingCount();
}
public User toUser() {
return User.builder()
.id(id)
.info(new UserInfo(name, profileUrl))
.followerCount(new PositiveIntegerCounter(followerCount))
.followingCount(new PositiveIntegerCounter(followingCount))
.build();
}
}
TimeBaseEntity.java
package org.fastcampus.common.repository.entity;
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import java.time.LocalDateTime;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
public class TimeBaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime regDt;
@LastModifiedDate
private LocalDateTime updDt;
}
UserRelationIdEntity.java
package org.fastcampus.user.repository.entity;
import jakarta.persistence.Embeddable;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Embeddable
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class UserRelationIdEntity {
private Long followingUserId;
private Long followerUserId;
}
UserRelationEntity.java
package org.fastcampus.user.repository.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.IdClass;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.fastcampus.common.repository.entity.*;
@Entity
@Table(name = "community_user-relation")
@NoArgsConstructor
@AllArgsConstructor
@Getter
@IdClass(UserRelationIdEntity.class)
public class UserRelationEntity extends TimeBaseEntity {
@Id
private Long followingUserId;
@Id
private Long followerUserId;
}
학습 인증샷
학습 인증샷
공부 종료 시각 인증
공부 종료 시각 인증
https://bit.ly/4hTSJNB