Skip to content

Commit c5721c3

Browse files
authored
Merge pull request #3 from NET-ZERO-FitFit/develop
main <- develop 엔티티 설계
2 parents ddd70ad + 0edf3c8 commit c5721c3

3 files changed

Lines changed: 170 additions & 1 deletion

File tree

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,44 @@
11
package fitfit.domain.category.entity;
22

3+
import jakarta.persistence.*;
4+
import lombok.*;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
@Getter
10+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
11+
@AllArgsConstructor
12+
@Builder
13+
@Entity
14+
@Table(name = "CATEGORY")
315
public class Category {
16+
17+
@Id
18+
@GeneratedValue(strategy = GenerationType.IDENTITY)
19+
@Column(name = "category_id")
20+
private Long id;
21+
22+
@Column(length = 20, nullable = false)
23+
private String name;
24+
25+
// --- 셀프 참조 (부모) ---
26+
@ManyToOne(fetch = FetchType.LAZY)
27+
@JoinColumn(name = "parent_id") // DB의 parent_id 컬럼과 매핑
28+
private Category parent;
29+
30+
// --- 셀프 참조 (자식) ---
31+
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
32+
@Builder.Default
33+
private List<Category> children = new ArrayList<>();
34+
35+
// 자식 카테고리를 추가할 때 사용
36+
public void addChildCategory(Category child) {
37+
this.children.add(child);
38+
child.setParent(this);
39+
}
40+
41+
public void setParent(Category newCategory) {
42+
this.parent = newCategory;
43+
}
444
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package fitfit.domain.clothes.entity;
2+
3+
import fitfit.domain.category.entity.Category;
4+
import fitfit.domain.member.entity.Member;
5+
import fitfit.global.entity.BaseEntity;
6+
import fitfit.global.enums.Style;
7+
import jakarta.persistence.*;
8+
import lombok.*;
9+
10+
import java.time.LocalDate;
11+
import java.time.LocalDateTime;
12+
13+
@Getter
14+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
15+
@AllArgsConstructor
16+
@Builder
17+
@Entity
18+
@Table(name = "CLOTHES")
19+
public class Clothes extends BaseEntity {
20+
21+
@Id
22+
@GeneratedValue(strategy = GenerationType.IDENTITY)
23+
@Column(name = "clothes_id")
24+
private Long id;
25+
26+
@ManyToOne(fetch = FetchType.LAZY)
27+
@JoinColumn(name = "seller_id", nullable = false)
28+
private Member seller;
29+
30+
@ManyToOne(fetch = FetchType.LAZY)
31+
@JoinColumn(name = "category_id", nullable = false)
32+
private Category category;
33+
34+
@Column(length = 25, nullable = false)
35+
private String title;
36+
37+
@Column(nullable = false)
38+
private Long price;
39+
40+
@Column(length = 255)
41+
private String image; // 옷 사진
42+
43+
@Enumerated(EnumType.STRING)
44+
@Column
45+
private Style style;
46+
47+
@Column(length = 255)
48+
private String comment;
49+
50+
@Column(name = "sale_agreed")
51+
private Boolean saleAgreed; // n개월 이후 특가 세일 동의여부
52+
53+
@Column(name = "meetup_agreed")
54+
private Boolean meetupAgreed; // 직거래여부
55+
56+
@Column(length = 25, nullable = false)
57+
private String address;
58+
59+
@Column(name = "is_sold")
60+
private Boolean isSold; // 판매여부
61+
62+
@Column(name = "sold_date")
63+
private LocalDateTime soldDate; // 판매날짜
64+
65+
@Column(name = "see_count", nullable = false)
66+
@Builder.Default
67+
private Long seeCount = 0L; // 조회수
68+
69+
@Column(name = "offer_agreed")
70+
private Boolean offerAgreed; // 가격 제안 받기 여부
71+
72+
@Column(name = "total_length", length = 25)
73+
private String totalLength; // 총장
74+
75+
@Column(name = "chest_width", length = 25)
76+
private String chestWidth; // 가슴단면
77+
78+
@Column(name = "shoulder_width", length = 25)
79+
private String shoulderWidth; // 어깨너비
80+
81+
@Column(name = "foot_size", length = 25)
82+
private String footSize; // 발사이즈
83+
84+
@Column(name = "waist_measurement", length = 25)
85+
private String waistMeasurement; // 허리 단면
86+
87+
@Column(name = "thigh_measurement", length = 25)
88+
private String thighMeasurement; // 허벅지 단면
89+
90+
@Column(name = "sales_period")
91+
private LocalDate salesPeriod; // 판매 기간
92+
93+
@Column(name = "discount_rate")
94+
private Long discountRate; // 할인율
95+
96+
}
Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,37 @@
11
package fitfit.domain.clothes.mapping;
22

3-
public class WearRoom {
3+
import fitfit.domain.clothes.entity.Clothes;
4+
import fitfit.domain.member.entity.Member;
5+
import fitfit.global.entity.BaseEntity;
6+
import jakarta.persistence.*;
7+
import lombok.*;
8+
9+
@Getter
10+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
11+
@AllArgsConstructor
12+
@Builder
13+
@Entity
14+
@Table(name = "WEAR_ROOM",
15+
// (회원ID, 옷ID) 쌍 중복되지 않도록 제약 조건
16+
uniqueConstraints = {
17+
@UniqueConstraint(
18+
name = "WEAR_ROOM_MEMBER_CLOTHES_UK",
19+
columnNames = {"member_id", "clothes_id"}
20+
)
21+
}
22+
)
23+
public class WearRoom extends BaseEntity{
24+
25+
@Id
26+
@GeneratedValue(strategy = GenerationType.IDENTITY)
27+
@Column(name = "wear_room_id")
28+
private Long id;
29+
30+
@ManyToOne(fetch = FetchType.LAZY)
31+
@JoinColumn(name = "member_id", nullable = false)
32+
private Member member;
33+
34+
@ManyToOne(fetch = FetchType.LAZY)
35+
@JoinColumn(name = "clothes_id", nullable = false)
36+
private Clothes clothes;
437
}

0 commit comments

Comments
 (0)