diff --git a/backend/build.gradle b/backend/build.gradle index aa3ec58..1dfb888 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -25,14 +25,18 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - //implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.mysql:mysql-connector-j' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' - //testImplementation 'org.springframework.security:spring-security-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + implementation 'javax.xml.bind:jaxb-api:2.3.1' + + //JWT + implementation 'io.jsonwebtoken:jjwt:0.9.1' // Swagger implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0' diff --git a/backend/src/main/java/com/itec0401/backend/BackendApplication.java b/backend/src/main/java/com/itec0401/backend/BackendApplication.java index 2a24804..69bb119 100644 --- a/backend/src/main/java/com/itec0401/backend/BackendApplication.java +++ b/backend/src/main/java/com/itec0401/backend/BackendApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootApplication +@EnableJpaAuditing public class BackendApplication { public static void main(String[] args) { diff --git a/backend/src/main/java/com/itec0401/backend/config/SecurityConfig.java b/backend/src/main/java/com/itec0401/backend/config/SecurityConfig.java new file mode 100644 index 0000000..c38b0ad --- /dev/null +++ b/backend/src/main/java/com/itec0401/backend/config/SecurityConfig.java @@ -0,0 +1,28 @@ +package com.itec0401.backend.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; + +@Configuration +@EnableWebSecurity +public class SecurityConfig { + + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http + .csrf((csrf) -> csrf.disable()) + .cors((c) -> c.disable()) + .headers((headers) -> headers.disable()); + return http.build(); + } + + @Bean + public PasswordEncoder passwordEncoder(){ + return new BCryptPasswordEncoder(); + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/itec0401/backend/domain/clothing/entity/Clothing.java b/backend/src/main/java/com/itec0401/backend/domain/clothing/entity/Clothing.java new file mode 100644 index 0000000..dcf34d6 --- /dev/null +++ b/backend/src/main/java/com/itec0401/backend/domain/clothing/entity/Clothing.java @@ -0,0 +1,43 @@ +package com.itec0401.backend.domain.clothing.entity; + +import com.itec0401.backend.domain.clothing.entity.type.weatherType; +import com.itec0401.backend.domain.coordinationclothing.entity.CoordinationClothing; +import com.itec0401.backend.domain.user.entity.User; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Entity +@Getter +@NoArgsConstructor +public class Clothing { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "clothing_id") + private Long id; + + @Enumerated(EnumType.STRING) + private weatherType weather; + + // 다른 특징들을 enum 화 할건지 테이블 만들어서 쓸 건지 결정 해야함! + private String category; + + private String subCategory; + + private String textile; + + private String pattern; + + private String baseColor; + + private String pointColor; + + @OneToMany(mappedBy = "clothing") + private List coordinationClothingList; + + @ManyToOne + @JoinColumn(name = "user_id") + private User user; + +} diff --git a/backend/src/main/java/com/itec0401/backend/domain/clothing/entity/type/weatherType.java b/backend/src/main/java/com/itec0401/backend/domain/clothing/entity/type/weatherType.java new file mode 100644 index 0000000..ac9c790 --- /dev/null +++ b/backend/src/main/java/com/itec0401/backend/domain/clothing/entity/type/weatherType.java @@ -0,0 +1,5 @@ +package com.itec0401.backend.domain.clothing.entity.type; + +public enum weatherType { + SPRING, SUMMER, AUTUMN, WINTER +} diff --git a/backend/src/main/java/com/itec0401/backend/domain/color/entity/Color.java b/backend/src/main/java/com/itec0401/backend/domain/color/entity/Color.java new file mode 100644 index 0000000..9d21305 --- /dev/null +++ b/backend/src/main/java/com/itec0401/backend/domain/color/entity/Color.java @@ -0,0 +1,29 @@ +package com.itec0401.backend.domain.color.entity; + +import com.itec0401.backend.domain.usercolor.entity.UserColor; +import com.itec0401.backend.global.BaseEntity; +import jakarta.persistence.*; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Entity +@Getter +@NoArgsConstructor +public class Color extends BaseEntity { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "color_id") + private Long id; + + private String color; + + @OneToMany(mappedBy = "color") + private List userColors; + + @Builder + public Color(String color) { + this.color = color; + } +} diff --git a/backend/src/main/java/com/itec0401/backend/domain/color/repository/ColorRepository.java b/backend/src/main/java/com/itec0401/backend/domain/color/repository/ColorRepository.java new file mode 100644 index 0000000..fc0081c --- /dev/null +++ b/backend/src/main/java/com/itec0401/backend/domain/color/repository/ColorRepository.java @@ -0,0 +1,10 @@ +package com.itec0401.backend.domain.color.repository; + +import com.itec0401.backend.domain.color.entity.Color; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface ColorRepository extends JpaRepository { + Optional findByColor(String color); +} diff --git a/backend/src/main/java/com/itec0401/backend/domain/color/service/ColorService.java b/backend/src/main/java/com/itec0401/backend/domain/color/service/ColorService.java new file mode 100644 index 0000000..6992f01 --- /dev/null +++ b/backend/src/main/java/com/itec0401/backend/domain/color/service/ColorService.java @@ -0,0 +1,13 @@ +package com.itec0401.backend.domain.color.service; + +import com.itec0401.backend.domain.color.entity.Color; +import com.itec0401.backend.domain.color.repository.ColorRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Optional; + + +public interface ColorService { + Optional findColorByName(String color); +} diff --git a/backend/src/main/java/com/itec0401/backend/domain/color/service/ColorServiceImpl.java b/backend/src/main/java/com/itec0401/backend/domain/color/service/ColorServiceImpl.java new file mode 100644 index 0000000..18495ce --- /dev/null +++ b/backend/src/main/java/com/itec0401/backend/domain/color/service/ColorServiceImpl.java @@ -0,0 +1,22 @@ +package com.itec0401.backend.domain.color.service; + +import com.itec0401.backend.domain.color.entity.Color; +import com.itec0401.backend.domain.color.repository.ColorRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class ColorServiceImpl implements ColorService { + private final ColorRepository colorRepository; + + // Color 이름으로 color 객체 찾기 + @Override + public Optional findColorByName(String color) { + return colorRepository.findByColor(color); + } + + // Color 초기 값 생성은 관리자가 DB에 직접 넣기! +} diff --git a/backend/src/main/java/com/itec0401/backend/domain/coordination/entity/Coordination.java b/backend/src/main/java/com/itec0401/backend/domain/coordination/entity/Coordination.java new file mode 100644 index 0000000..199ffc3 --- /dev/null +++ b/backend/src/main/java/com/itec0401/backend/domain/coordination/entity/Coordination.java @@ -0,0 +1,31 @@ +package com.itec0401.backend.domain.coordination.entity; + +import com.itec0401.backend.domain.coordinationclothing.entity.CoordinationClothing; +import com.itec0401.backend.domain.user.entity.User; +import com.itec0401.backend.global.BaseEntity; +import jakarta.persistence.*; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Entity +@Getter +@NoArgsConstructor +public class Coordination extends BaseEntity { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "coordination_id") + private Long id; + + private Boolean liked; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id", nullable = false) + private User user; + + @OneToMany(mappedBy = "coordination") + private List coordinationClothingList; + + +} diff --git a/backend/src/main/java/com/itec0401/backend/domain/coordinationclothing/entity/CoordinationClothing.java b/backend/src/main/java/com/itec0401/backend/domain/coordinationclothing/entity/CoordinationClothing.java new file mode 100644 index 0000000..6fcdcd1 --- /dev/null +++ b/backend/src/main/java/com/itec0401/backend/domain/coordinationclothing/entity/CoordinationClothing.java @@ -0,0 +1,23 @@ +package com.itec0401.backend.domain.coordinationclothing.entity; + +import com.itec0401.backend.domain.clothing.entity.Clothing; +import com.itec0401.backend.domain.coordination.entity.Coordination; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor +public class CoordinationClothing { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne + @JoinColumn(name = "clothing_id") + private Clothing clothing; + + @ManyToOne + @JoinColumn(name = "coordination_id") + private Coordination coordination; +} diff --git a/backend/src/main/java/com/itec0401/backend/domain/style/entity/Style.java b/backend/src/main/java/com/itec0401/backend/domain/style/entity/Style.java new file mode 100644 index 0000000..c0d98a5 --- /dev/null +++ b/backend/src/main/java/com/itec0401/backend/domain/style/entity/Style.java @@ -0,0 +1,29 @@ +package com.itec0401.backend.domain.style.entity; + +import com.itec0401.backend.domain.userstyle.entity.UserStyle; +import com.itec0401.backend.global.BaseEntity; +import jakarta.persistence.*; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Entity +@Getter +@NoArgsConstructor +public class Style extends BaseEntity { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "style_id") + private Long id; + + private String style; + + @OneToMany(mappedBy = "style") + private List userStyles; + + @Builder + public Style(String style){ + this.style = style; + } +} diff --git a/backend/src/main/java/com/itec0401/backend/domain/style/repository/StyleRepository.java b/backend/src/main/java/com/itec0401/backend/domain/style/repository/StyleRepository.java new file mode 100644 index 0000000..84bd772 --- /dev/null +++ b/backend/src/main/java/com/itec0401/backend/domain/style/repository/StyleRepository.java @@ -0,0 +1,10 @@ +package com.itec0401.backend.domain.style.repository; + +import com.itec0401.backend.domain.style.entity.Style; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface StyleRepository extends JpaRepository { + Optional