diff --git a/potato-field/build.gradle b/potato-field/build.gradle index 2936c12..6c3761c 100644 --- a/potato-field/build.gradle +++ b/potato-field/build.gradle @@ -25,9 +25,17 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'io.jsonwebtoken:jjwt-api:0.11.5' + runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5' + runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5' + runtimeOnly 'com.h2database:h2' compileOnly 'org.projectlombok:lombok' 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' } diff --git a/potato-field/src/main/java/com/tools/potato_field/PotatoFieldApplication.java b/potato-field/src/main/java/com/tools/potato_field/PotatoFieldApplication.java index 713061c..d295b4a 100644 --- a/potato-field/src/main/java/com/tools/potato_field/PotatoFieldApplication.java +++ b/potato-field/src/main/java/com/tools/potato_field/PotatoFieldApplication.java @@ -6,9 +6,6 @@ @SpringBootApplication public class PotatoFieldApplication { - // jy test -// sy test~~ - // sh test public static void main(String[] args) { SpringApplication.run(PotatoFieldApplication.class, args); } diff --git a/potato-field/src/main/java/com/tools/potato_field/SecurityConfig.java b/potato-field/src/main/java/com/tools/potato_field/SecurityConfig.java new file mode 100644 index 0000000..3a9047e --- /dev/null +++ b/potato-field/src/main/java/com/tools/potato_field/SecurityConfig.java @@ -0,0 +1,17 @@ +package com.tools.potato_field; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +@Configuration +public class SecurityConfig { + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } + + // 기타 보안 설정... +} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/controller/MemberController.java b/potato-field/src/main/java/com/tools/potato_field/controller/MemberController.java deleted file mode 100644 index 9248d47..0000000 --- a/potato-field/src/main/java/com/tools/potato_field/controller/MemberController.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.tools.potato_field.controller; - -import com.tools.potato_field.entity.member; -import com.tools.potato_field.service.MemberService; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@RestController -@RequestMapping("/members") -public class MemberController { - private final MemberService memberService; - - public MemberController(MemberService memberService) { - this.memberService = memberService; - } - - @PostMapping - public Member registerMember(@RequestBody Member member) { - return memberService.registerMember(member); - } - - @GetMapping("/{id}") - public Member getMember(@PathVariable Long id) { - return memberService.findMember(id); - } - - @GetMapping - public List getAllMembers() { - return memberService.findAllMembers(); - } - - @DeleteMapping("/{id}") - public void deleteMember(@PathVariable Long id) { - memberService.deleteMember(id); - } -} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/entity/Delivery.java b/potato-field/src/main/java/com/tools/potato_field/delivery/Delivery.java similarity index 90% rename from potato-field/src/main/java/com/tools/potato_field/entity/Delivery.java rename to potato-field/src/main/java/com/tools/potato_field/delivery/Delivery.java index 5024747..292b13c 100644 --- a/potato-field/src/main/java/com/tools/potato_field/entity/Delivery.java +++ b/potato-field/src/main/java/com/tools/potato_field/delivery/Delivery.java @@ -1,6 +1,6 @@ package com.tools.potato_field.entity; -import javax.persistence.*; +import jakarta.persistence.*; import lombok.Data; @Entity diff --git a/potato-field/src/main/java/com/tools/potato_field/controller/DeliveryController.java b/potato-field/src/main/java/com/tools/potato_field/delivery/DeliveryController.java similarity index 100% rename from potato-field/src/main/java/com/tools/potato_field/controller/DeliveryController.java rename to potato-field/src/main/java/com/tools/potato_field/delivery/DeliveryController.java diff --git a/potato-field/src/main/java/com/tools/potato_field/repository/DeliveryRepository.java b/potato-field/src/main/java/com/tools/potato_field/delivery/DeliveryRepository.java similarity index 100% rename from potato-field/src/main/java/com/tools/potato_field/repository/DeliveryRepository.java rename to potato-field/src/main/java/com/tools/potato_field/delivery/DeliveryRepository.java diff --git a/potato-field/src/main/java/com/tools/potato_field/service/DeliveryService.java b/potato-field/src/main/java/com/tools/potato_field/delivery/DeliveryService.java similarity index 100% rename from potato-field/src/main/java/com/tools/potato_field/service/DeliveryService.java rename to potato-field/src/main/java/com/tools/potato_field/delivery/DeliveryService.java diff --git a/potato-field/src/main/java/com/tools/potato_field/dto/LoginRequest.java b/potato-field/src/main/java/com/tools/potato_field/dto/LoginRequest.java new file mode 100644 index 0000000..cf935c5 --- /dev/null +++ b/potato-field/src/main/java/com/tools/potato_field/dto/LoginRequest.java @@ -0,0 +1,9 @@ +package com.tools.potato_field.dto; + +import lombok.Data; + +@Data +public class LoginRequest { + private String email; + private String password; +} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/entity/Category.java b/potato-field/src/main/java/com/tools/potato_field/entity/Category.java new file mode 100644 index 0000000..a7f920a --- /dev/null +++ b/potato-field/src/main/java/com/tools/potato_field/entity/Category.java @@ -0,0 +1,15 @@ +package com.tools.potato_field.entity; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +@Entity +public class Category { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String placeName; +} diff --git a/potato-field/src/main/java/com/tools/potato_field/entity/Category_1.java b/potato-field/src/main/java/com/tools/potato_field/entity/Category_1.java new file mode 100644 index 0000000..b1b7bcf --- /dev/null +++ b/potato-field/src/main/java/com/tools/potato_field/entity/Category_1.java @@ -0,0 +1,15 @@ +package com.tools.potato_field.entity; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +@Entity +public class Category_1 { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String genderName; +} diff --git a/potato-field/src/main/java/com/tools/potato_field/entity/Item.java b/potato-field/src/main/java/com/tools/potato_field/entity/Item.java deleted file mode 100644 index 8d02dfd..0000000 --- a/potato-field/src/main/java/com/tools/potato_field/entity/Item.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.tools.potato_field.entity; - -import javax.persistence.*; -import lombok.Data; - -@Entity -@Data -public class Item { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - private String name; - private double price; - private int stockQuantity; -} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/entity/Member.java b/potato-field/src/main/java/com/tools/potato_field/entity/Member.java deleted file mode 100644 index 280f459..0000000 --- a/potato-field/src/main/java/com/tools/potato_field/entity/Member.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.tools.potato_field.entity; - -import javax.persistence.*; -import lombok.Data; - -@Entity -@Data -public class Member { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - private String username; - private String password; - private String email; - private String address; -} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/entity/Order.java b/potato-field/src/main/java/com/tools/potato_field/entity/Order.java deleted file mode 100644 index 6a349c8..0000000 --- a/potato-field/src/main/java/com/tools/potato_field/entity/Order.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.ex01.service; - -import javax.persistence.*; -import lombok.Data; -import java.time.LocalDateTime; - -@Entity -@Data -public class Order { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @ManyToOne - @JoinColumn(name = "member_id") - private Member member; - - private LocalDateTime orderDate; -} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/item/Item.java b/potato-field/src/main/java/com/tools/potato_field/item/Item.java new file mode 100644 index 0000000..4c41e59 --- /dev/null +++ b/potato-field/src/main/java/com/tools/potato_field/item/Item.java @@ -0,0 +1,23 @@ +package com.tools.potato_field.item; + +import com.tools.potato_field.entity.Member; +import jakarta.persistence.*; +import lombok.Data; + +@Entity +@Data +public class Item { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String itemName; + private String itemURL; + private Integer iconNumber; + private Long id2; + + @ManyToOne + @JoinColumn(name = "member_id") + private Member member; + + // Getters and Setters +} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/controller/ItemController.java b/potato-field/src/main/java/com/tools/potato_field/item/ItemController.java similarity index 89% rename from potato-field/src/main/java/com/tools/potato_field/controller/ItemController.java rename to potato-field/src/main/java/com/tools/potato_field/item/ItemController.java index 57105d1..eb6674d 100644 --- a/potato-field/src/main/java/com/tools/potato_field/controller/ItemController.java +++ b/potato-field/src/main/java/com/tools/potato_field/item/ItemController.java @@ -1,7 +1,7 @@ package com.tools.potato_field.controller; -import com.tools.potato_field.entity.Item; -import com.tools.potato_field.service.ItemService; +import com.tools.potato_field.item.Item; +import com.tools.potato_field.item.ItemService; import org.springframework.web.bind.annotation.*; import java.util.List; diff --git a/potato-field/src/main/java/com/tools/potato_field/repository/ItemRepository.java b/potato-field/src/main/java/com/tools/potato_field/item/ItemRepository.java similarity index 60% rename from potato-field/src/main/java/com/tools/potato_field/repository/ItemRepository.java rename to potato-field/src/main/java/com/tools/potato_field/item/ItemRepository.java index e6f1028..991065d 100644 --- a/potato-field/src/main/java/com/tools/potato_field/repository/ItemRepository.java +++ b/potato-field/src/main/java/com/tools/potato_field/item/ItemRepository.java @@ -1,6 +1,5 @@ -package com.tools.potato_field.repository; +package com.tools.potato_field.item; -import com.tools.potato_field.entity.Item; import org.springframework.data.jpa.repository.JpaRepository; public interface ItemRepository extends JpaRepository { diff --git a/potato-field/src/main/java/com/tools/potato_field/service/ItemService.java b/potato-field/src/main/java/com/tools/potato_field/item/ItemService.java similarity index 79% rename from potato-field/src/main/java/com/tools/potato_field/service/ItemService.java rename to potato-field/src/main/java/com/tools/potato_field/item/ItemService.java index 0d0bd28..1cb55f7 100644 --- a/potato-field/src/main/java/com/tools/potato_field/service/ItemService.java +++ b/potato-field/src/main/java/com/tools/potato_field/item/ItemService.java @@ -1,10 +1,8 @@ -package com.tools.potato_field.service; +package com.tools.potato_field.item; -import com.tools.potato_field.entity.Item; -import com.tools.potato_field.repository.ItemRepository; +import jakarta.transaction.Transactional; import org.springframework.stereotype.Service; -import javax.transaction.Transactional; import java.util.List; @Service diff --git a/potato-field/src/main/java/com/tools/potato_field/member/Member.java b/potato-field/src/main/java/com/tools/potato_field/member/Member.java new file mode 100644 index 0000000..66e9e0a --- /dev/null +++ b/potato-field/src/main/java/com/tools/potato_field/member/Member.java @@ -0,0 +1,32 @@ +package com.tools.potato_field.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "members") +public class Member { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, unique = true) + private String email; + + @Column(nullable = false) + private String password; + + private String name; + + private String address; + + // 추가적인 필드들 (예: 생년월일, 전화번호 등) +} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/member/MemberController.java b/potato-field/src/main/java/com/tools/potato_field/member/MemberController.java new file mode 100644 index 0000000..8a56985 --- /dev/null +++ b/potato-field/src/main/java/com/tools/potato_field/member/MemberController.java @@ -0,0 +1,48 @@ +package com.tools.potato_field.controller; + +import com.tools.potato_field.entity.Member; +import com.tools.potato_field.service.MemberService; +import com.tools.potato_field.dto.LoginRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/members") +public class MemberController { + + private final MemberService memberService; + + @Autowired + public MemberController(MemberService memberService) { + this.memberService = memberService; + } + + @PostMapping("/register") + public ResponseEntity registerMember(@RequestBody Member member) { + return ResponseEntity.ok(memberService.registerMember(member)); + } + + @GetMapping("/{id}") + public ResponseEntity getMember(@PathVariable Long id) { + return ResponseEntity.ok(memberService.findMember(id)); + } + + @GetMapping + public ResponseEntity> getAllMembers() { + return ResponseEntity.ok(memberService.findAllMembers()); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteMember(@PathVariable Long id) { + memberService.deleteMember(id); + return ResponseEntity.ok().build(); + } + + @PostMapping("/login") + public ResponseEntity loginMember(@RequestBody LoginRequest loginRequest) { + return ResponseEntity.ok(memberService.loginMember(loginRequest.getEmail(), loginRequest.getPassword())); + } +} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/repository/MemberRepository.java b/potato-field/src/main/java/com/tools/potato_field/member/MemberRepository.java similarity index 61% rename from potato-field/src/main/java/com/tools/potato_field/repository/MemberRepository.java rename to potato-field/src/main/java/com/tools/potato_field/member/MemberRepository.java index ef6715a..ea2a577 100644 --- a/potato-field/src/main/java/com/tools/potato_field/repository/MemberRepository.java +++ b/potato-field/src/main/java/com/tools/potato_field/member/MemberRepository.java @@ -2,6 +2,11 @@ import com.tools.potato_field.entity.Member; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import java.util.Optional; + +@Repository public interface MemberRepository extends JpaRepository { -} + Optional findByEmail(String email); +} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/member/MemberService.java b/potato-field/src/main/java/com/tools/potato_field/member/MemberService.java new file mode 100644 index 0000000..371583f --- /dev/null +++ b/potato-field/src/main/java/com/tools/potato_field/member/MemberService.java @@ -0,0 +1,52 @@ +package com.tools.potato_field.service; + +import com.tools.potato_field.entity.Member; +import com.tools.potato_field.repository.MemberRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class MemberService { + + private final MemberRepository memberRepository; + private final PasswordEncoder passwordEncoder; + + @Autowired + public MemberService(MemberRepository memberRepository, PasswordEncoder passwordEncoder) { + this.memberRepository = memberRepository; + this.passwordEncoder = passwordEncoder; + } + + public Member registerMember(Member member) { + if (memberRepository.findByEmail(member.getEmail()).isPresent()) { + throw new RuntimeException("Email is already in use"); + } + member.setPassword(passwordEncoder.encode(member.getPassword())); + return memberRepository.save(member); + } + + public Member findMember(Long id) { + return memberRepository.findById(id) + .orElseThrow(() -> new RuntimeException("Member not found")); + } + + public List findAllMembers() { + return memberRepository.findAll(); + } + + public void deleteMember(Long id) { + memberRepository.deleteById(id); + } + + public Member loginMember(String email, String password) { + Member member = memberRepository.findByEmail(email) + .orElseThrow(() -> new RuntimeException("Member not found")); + if (!passwordEncoder.matches(password, member.getPassword())) { + throw new RuntimeException("Invalid password"); + } + return member; + } +} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/order/Order.java b/potato-field/src/main/java/com/tools/potato_field/order/Order.java new file mode 100644 index 0000000..c7dbb06 --- /dev/null +++ b/potato-field/src/main/java/com/tools/potato_field/order/Order.java @@ -0,0 +1,26 @@ +package com.tools.potato_field.entity; + +import jakarta.persistence.*; +import lombok.Data; +import java.time.LocalDateTime; + +@Entity +@Data +@Table(name = "orders") // 'order'는 예약어이므로 'orders'로 사용 +public class Order { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "item_id") + private Item item; + + private LocalDateTime orderDate; + + private String orderStatus; +} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/controller/OrderController.java b/potato-field/src/main/java/com/tools/potato_field/order/OrderController.java similarity index 93% rename from potato-field/src/main/java/com/tools/potato_field/controller/OrderController.java rename to potato-field/src/main/java/com/tools/potato_field/order/OrderController.java index 65c1748..1391510 100644 --- a/potato-field/src/main/java/com/tools/potato_field/controller/OrderController.java +++ b/potato-field/src/main/java/com/tools/potato_field/order/OrderController.java @@ -27,4 +27,6 @@ public Order getOrder(@PathVariable Long id) { @GetMapping public List getAllOrders() { - return orderService + return orderService.findAllOrders(); + } +} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/order/OrderRepository.java b/potato-field/src/main/java/com/tools/potato_field/order/OrderRepository.java new file mode 100644 index 0000000..788e3f8 --- /dev/null +++ b/potato-field/src/main/java/com/tools/potato_field/order/OrderRepository.java @@ -0,0 +1,18 @@ +package com.tools.potato_field.repository; + +import com.tools.potato_field.entity.Order; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface OrderRepository extends JpaRepository { + // 회원 ID로 주문 목록 조회 + List findByMemberId(Long memberId); + + // 주문 상태로 주문 목록 조회 + List findByOrderStatus(String orderStatus); + + // 추가적인 쿼리 메서드들을 필요에 따라 정의할 수 있습니다. +} \ No newline at end of file diff --git a/potato-field/src/main/java/com/tools/potato_field/service/OrderService.java b/potato-field/src/main/java/com/tools/potato_field/order/OrderService.java similarity index 100% rename from potato-field/src/main/java/com/tools/potato_field/service/OrderService.java rename to potato-field/src/main/java/com/tools/potato_field/order/OrderService.java diff --git a/potato-field/src/main/java/com/tools/potato_field/repository/OrderRepository.java b/potato-field/src/main/java/com/tools/potato_field/repository/OrderRepository.java deleted file mode 100644 index 8e5bb4f..0000000 --- a/potato-field/src/main/java/com/tools/potato_field/repository/OrderRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.tools.potato_field.repository; - -import com.tools.potato_field.entity.Order; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface OrderRepository extends JpaRepository { -} diff --git a/potato-field/src/main/java/com/tools/potato_field/service/MemberService.java b/potato-field/src/main/java/com/tools/potato_field/service/MemberService.java deleted file mode 100644 index 4302aa5..0000000 --- a/potato-field/src/main/java/com/tools/potato_field/service/MemberService.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.tools.potato_field.service; - -import com.tools.potato_field.entity.Member; -import com.tools.potato_field.repository.MemberRepository; -import org.springframework.stereotype.Service; - -import javax.transaction.Transactional; -import java.util.List; - -@Service -@Transactional -public class MemberService { - private final MemberRepository memberRepository; - - public MemberService(MemberRepository memberRepository) { - this.memberRepository = memberRepository; - } - - public Member registerMember(Member member) { - return memberRepository.save(member); - } - - public Member findMember(Long id) { - return memberRepository.findById(id).orElseThrow(() -> new RuntimeException("Member not found")); - } - - public List findAllMembers() { - return memberRepository.findAll(); - } - - public void deleteMember(Long id) { - memberRepository.deleteById(id); - } -} - diff --git a/potato-field/src/main/resources/application.properties b/potato-field/src/main/resources/application.properties deleted file mode 100644 index d6a83d9..0000000 --- a/potato-field/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -spring.application.name=potato-field diff --git a/potato-field/src/main/resources/application.yml b/potato-field/src/main/resources/application.yml new file mode 100644 index 0000000..3a9ece4 --- /dev/null +++ b/potato-field/src/main/resources/application.yml @@ -0,0 +1,23 @@ +spring: + application: + name: potato-field + datasource: + url: jdbc:h2:mem:testdb + driver-class-name: org.h2.Driver + username: sa + password: + jpa: + database-platform: org.hibernate.dialect.H2Dialect + hibernate: + ddl-auto: update + show-sql: true + h2: + console: + enabled: true + path: /h2-console + jwt: + secret: yourSecretKey + expiration: 86400000 # 24 hours + +server: + port: 8080 \ No newline at end of file