Skip to content

Commit cc1daaa

Browse files
committed
feat: ProfileImage 엔티티 구현
1 parent 8c796ec commit cc1daaa

File tree

5 files changed

+58
-7
lines changed

5 files changed

+58
-7
lines changed

src/main/java/targeter/aim/domain/file/entity/AttachedFile.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import lombok.AllArgsConstructor;
66
import lombok.Getter;
77
import lombok.NoArgsConstructor;
8+
import lombok.experimental.SuperBuilder;
89
import targeter.aim.common.auditor.TimeStampedEntity;
910

1011
@Getter
@@ -13,6 +14,7 @@
1314
@Entity
1415
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
1516
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
17+
@SuperBuilder
1618
public abstract class AttachedFile extends TimeStampedEntity {
1719

1820
@Id
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package targeter.aim.domain.file.entity;
2+
3+
import jakarta.persistence.DiscriminatorValue;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.FetchType;
6+
import jakarta.persistence.OneToOne;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
import lombok.Setter;
10+
import lombok.experimental.SuperBuilder;
11+
import org.springframework.web.multipart.MultipartFile;
12+
import targeter.aim.domain.user.entity.User;
13+
14+
import java.util.UUID;
15+
16+
@Entity
17+
@Getter
18+
@Setter
19+
@SuperBuilder
20+
@NoArgsConstructor
21+
@DiscriminatorValue("PROFILE_IMAGE")
22+
public class ProfileImage extends AttachedFile {
23+
24+
@OneToOne(fetch = FetchType.LAZY)
25+
private User user;
26+
27+
public static ProfileImage from(MultipartFile file, String filePath) {
28+
if(file == null || file.isEmpty()) {
29+
return null;
30+
}
31+
32+
return ProfileImage.builder()
33+
.uuid(UUID.randomUUID().toString())
34+
.handlingType(HandlingType.IMAGE)
35+
.fileName(file.getOriginalFilename())
36+
.size(file.getSize())
37+
.filePath(filePath)
38+
.build();
39+
}
40+
}

src/main/java/targeter/aim/domain/user/dto/UserDto.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import io.swagger.v3.oas.annotations.media.Schema;
44
import lombok.*;
5+
import targeter.aim.domain.file.dto.FileDto;
6+
import targeter.aim.domain.file.entity.ProfileImage;
57
import targeter.aim.domain.user.entity.Gender;
8+
import targeter.aim.domain.user.entity.SocialLogin;
69
import targeter.aim.domain.user.entity.User;
710

811
import java.time.LocalDate;
@@ -32,7 +35,10 @@ public static class UserResponse {
3235
allowableValues = {"KAKAO", "GOOGLE"},
3336
nullable = true
3437
)
35-
private String socialLogin;
38+
private SocialLogin socialLogin;
39+
40+
@Schema(description = "사용자 프로필 이미지")
41+
private FileDto.FileResponse profileImage;
3642

3743
@Schema(description = "계정 생성 시간", example = "ISO Datetime")
3844
private LocalDateTime createdAt;
@@ -46,7 +52,7 @@ public static UserResponse from(User user) {
4652
.nickname(user.getNickname())
4753
.birthday(user.getBirthday())
4854
.gender(user.getGender())
49-
.socialLogin(user.getSocialLogin() == null ? null : user.getSocialLogin().name())
55+
.socialLogin(user.getSocialLogin() == null ? null : user.getSocialLogin())
5056
.createdAt(user.getCreatedAt())
5157
.lastModifiedAt(user.getLastModifiedAt())
5258
.build();

src/main/java/targeter/aim/domain/user/entity/User.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import lombok.*;
55
import lombok.experimental.SuperBuilder;
66
import targeter.aim.common.auditor.TimeStampedEntity;
7+
import targeter.aim.domain.file.entity.ProfileImage;
78

89
import java.time.LocalDate;
910

@@ -52,10 +53,9 @@ public class User extends TimeStampedEntity {
5253
@JoinColumn(nullable = false, name = "tier_id")
5354
private Tier tier; // 1~30 : Bronze, 31~60 : Silver, 61~80 : Gold, 81~100 : Diamond
5455

55-
// 프로필 이미지 컬럼. File 도메인 완성 시 구현
56-
// @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
57-
// @JoinColumn(name = "profile_image_id")
58-
// private ProfileImage profileImage;
56+
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
57+
@JoinColumn(name = "profile_image_id")
58+
private ProfileImage profileImage;
5959

6060
public boolean isLocalUser() {
6161
return this.socialLogin == null;

src/main/resources/application.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,7 @@ logging:
1414
org.hibernate.type: trace
1515

1616
server:
17-
port: 8080
17+
port: 8080
18+
19+
file:
20+
save-path: ./upload

0 commit comments

Comments
 (0)