From 2be34e02e34456c6986144dab13701377f4a0721 Mon Sep 17 00:00:00 2001 From: lukehongg Date: Fri, 27 Jan 2023 13:20:26 +0900 Subject: [PATCH 1/2] #7 --- .../server/customer/model/Customer.java | 8 +++++ .../customer/service/CustomerService.java | 10 ++++++ .../server/exception/GlobalException.java | 1 + .../history/controller/HistoryController.java | 33 +++++++++++++++++-- .../server/history/model/History.java | 24 +++++++++----- .../server/history/model/HistoryRequest.java | 8 ++++- .../server/history/model/HistoryResponse.java | 33 +++++++++++++++++++ .../history/service/HistoryService.java | 23 +++++++++++++ .../greenpoint/server/store/model/Store.java | 2 +- .../server/store/service/StoreService.java | 15 +++++++++ 10 files changed, 145 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/greenpoint/server/history/model/HistoryResponse.java diff --git a/src/main/java/com/greenpoint/server/customer/model/Customer.java b/src/main/java/com/greenpoint/server/customer/model/Customer.java index fd0970b..c823052 100644 --- a/src/main/java/com/greenpoint/server/customer/model/Customer.java +++ b/src/main/java/com/greenpoint/server/customer/model/Customer.java @@ -42,4 +42,12 @@ public class Customer extends BaseEntity { private int totalPoint; + public void addpoint(int savedPoint) { + this.point = this.point + savedPoint; + this.totalPoint = this.totalPoint + savedPoint; + } + + public void usepoint(int usedPoint) { + this.point = this.point - usedPoint; + } } diff --git a/src/main/java/com/greenpoint/server/customer/service/CustomerService.java b/src/main/java/com/greenpoint/server/customer/service/CustomerService.java index 3639a70..fd61b44 100644 --- a/src/main/java/com/greenpoint/server/customer/service/CustomerService.java +++ b/src/main/java/com/greenpoint/server/customer/service/CustomerService.java @@ -1,7 +1,17 @@ package com.greenpoint.server.customer.service; +import com.greenpoint.server.customer.model.Customer; +import com.greenpoint.server.customer.repository.CustomerRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class CustomerService { + + @Autowired + private CustomerRepository customerRepository; + public Customer findById(Long customerId) { + Customer customer = customerRepository.findById(customerId).get(); + return customer; + } } diff --git a/src/main/java/com/greenpoint/server/exception/GlobalException.java b/src/main/java/com/greenpoint/server/exception/GlobalException.java index 16a5061..592995d 100644 --- a/src/main/java/com/greenpoint/server/exception/GlobalException.java +++ b/src/main/java/com/greenpoint/server/exception/GlobalException.java @@ -1,6 +1,7 @@ package com.greenpoint.server.exception; +import lombok.NoArgsConstructor; import org.springframework.http.HttpStatus; public class GlobalException extends RuntimeException { diff --git a/src/main/java/com/greenpoint/server/history/controller/HistoryController.java b/src/main/java/com/greenpoint/server/history/controller/HistoryController.java index ffdc0f7..88ba476 100644 --- a/src/main/java/com/greenpoint/server/history/controller/HistoryController.java +++ b/src/main/java/com/greenpoint/server/history/controller/HistoryController.java @@ -1,12 +1,41 @@ package com.greenpoint.server.history.controller; +import com.greenpoint.server.history.model.History; +import com.greenpoint.server.history.model.HistoryRequest; +import com.greenpoint.server.history.model.HistoryResponse; +import com.greenpoint.server.history.service.HistoryService; +import com.greenpoint.server.store.model.Store; +import com.greenpoint.server.store.service.StoreService; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @RestController @RequiredArgsConstructor @RequestMapping("/api") public class HistoryController { + @Autowired + private HistoryService historyService; + @Autowired + private StoreService storeService; + + + @GetMapping(value = "/history/{token}") + public ResponseEntity> findAllHistoryByCustomer(){ + + + } + + + @PostMapping(value="/history") + public ResponseEntity addHistory(@RequestBody HistoryRequest request){ + Store store = storeService.findById(request.getStoreId()); + Long res = historyService.create(History.from(store, request)); + return ResponseEntity.ok(res); + } + } diff --git a/src/main/java/com/greenpoint/server/history/model/History.java b/src/main/java/com/greenpoint/server/history/model/History.java index dfaa5d3..5575f35 100644 --- a/src/main/java/com/greenpoint/server/history/model/History.java +++ b/src/main/java/com/greenpoint/server/history/model/History.java @@ -4,18 +4,16 @@ import com.greenpoint.server.common.BaseEntity; import com.greenpoint.server.customer.model.Customer; import com.greenpoint.server.store.model.Store; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.Where; import javax.persistence.*; +import java.time.LocalDateTime; @Entity @Getter -@Setter +@Builder @NoArgsConstructor @AllArgsConstructor @Where(clause = "deleted = false") @@ -25,9 +23,7 @@ public class History extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - private String kakaoToken; -// @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) -// private Customer customer; + private Long customerId; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) private Store store; @@ -35,4 +31,16 @@ public class History extends BaseEntity { private int savedPoint; private int usedPoint; + + public static History from(Store store, HistoryRequest request){ + return History.builder() + .customerId(request.getCustomerId()) + .store(store) + .cost(request.getCost()) + .savedPoint(request.getSavedPoint()) + .usedPoint(request.getUsedPoint()) + .build(); + } + + } diff --git a/src/main/java/com/greenpoint/server/history/model/HistoryRequest.java b/src/main/java/com/greenpoint/server/history/model/HistoryRequest.java index 1114792..6487b6e 100644 --- a/src/main/java/com/greenpoint/server/history/model/HistoryRequest.java +++ b/src/main/java/com/greenpoint/server/history/model/HistoryRequest.java @@ -1,12 +1,18 @@ package com.greenpoint.server.history.model; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -@Setter + @Getter @NoArgsConstructor +@AllArgsConstructor public class HistoryRequest { + private Long customerId; private Long storeId; + private int cost; + private int savedPoint; + private int usedPoint; } diff --git a/src/main/java/com/greenpoint/server/history/model/HistoryResponse.java b/src/main/java/com/greenpoint/server/history/model/HistoryResponse.java new file mode 100644 index 0000000..715d705 --- /dev/null +++ b/src/main/java/com/greenpoint/server/history/model/HistoryResponse.java @@ -0,0 +1,33 @@ +package com.greenpoint.server.history.model; + +import com.greenpoint.server.store.model.Store; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.CascadeType; +import javax.persistence.FetchType; +import javax.persistence.ManyToOne; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class HistoryResponse { + + private String storeName; + private int savedPoint; + private int usedPoint; + private int currentPoint; + + public HistoryResponse from(History history){ + return HistoryResponse.builder() + .storeName(history.getStore().getName()) + .savedPoint(history.getSavedPoint()) + .usedPoint(history.getUsedPoint()) + .currentPoint(history.) + .build(); + } + +} diff --git a/src/main/java/com/greenpoint/server/history/service/HistoryService.java b/src/main/java/com/greenpoint/server/history/service/HistoryService.java index 14c8b42..0b7c02e 100644 --- a/src/main/java/com/greenpoint/server/history/service/HistoryService.java +++ b/src/main/java/com/greenpoint/server/history/service/HistoryService.java @@ -1,7 +1,30 @@ package com.greenpoint.server.history.service; +import com.greenpoint.server.customer.model.Customer; +import com.greenpoint.server.customer.service.CustomerService; +import com.greenpoint.server.history.model.History; +import com.greenpoint.server.history.repository.HistoryRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service public class HistoryService { + + @Autowired + private HistoryRepository historyRepository; + + @Autowired + private CustomerService customerService; + + @Transactional + public Long create(History history){ + History res = historyRepository.save(history); + Customer customer = customerService.findById(history.getCustomerId()); + customer.addpoint(history.getSavedPoint()); + customer.usepoint(history.getUsedPoint()); + return res.getId(); + } + + } diff --git a/src/main/java/com/greenpoint/server/store/model/Store.java b/src/main/java/com/greenpoint/server/store/model/Store.java index fca2a7a..87a523f 100644 --- a/src/main/java/com/greenpoint/server/store/model/Store.java +++ b/src/main/java/com/greenpoint/server/store/model/Store.java @@ -28,7 +28,7 @@ public class Store extends BaseEntity{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - private String storeID; + private String loginID; private String password; private String category; private String name; diff --git a/src/main/java/com/greenpoint/server/store/service/StoreService.java b/src/main/java/com/greenpoint/server/store/service/StoreService.java index caf03dd..0e4602a 100644 --- a/src/main/java/com/greenpoint/server/store/service/StoreService.java +++ b/src/main/java/com/greenpoint/server/store/service/StoreService.java @@ -1,7 +1,22 @@ package com.greenpoint.server.store.service; +import com.greenpoint.server.exception.GlobalException; +import com.greenpoint.server.store.model.Store; +import com.greenpoint.server.store.repository.StoreRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service public class StoreService { + + @Autowired + private StoreRepository storeRepository; + + + @Transactional(readOnly = true) + public Store findById(Long storeId) { + Store ret = storeRepository.findById(storeId).get(); + return ret; + } } From 9ed7fd3b30066f872474ca86b20861e1ae71b62c Mon Sep 17 00:00:00 2001 From: lukehongg Date: Fri, 27 Jan 2023 18:04:48 +0900 Subject: [PATCH 2/2] history API --- build.gradle | 1 - .../auth/controller/UserController.java | 48 ++-- .../server/auth/model/OauthToken.java | 2 +- .../auth/repository/UserRepository.java | 20 +- .../server/auth/service/UserService.java | 214 +++++++++--------- .../greenpoint/server/common/BaseEntity.java | 1 + .../server/customer/model/Customer.java | 9 +- .../repository/CustomerRepository.java | 4 + .../customer/service/CustomerService.java | 21 +- .../history/controller/HistoryController.java | 17 +- .../server/history/model/History.java | 2 +- .../server/history/model/HistoryResponse.java | 6 +- .../history/repository/HistoryRepository.java | 8 + .../history/service/HistoryService.java | 16 +- .../level/controller/LevelController.java | 16 ++ .../greenpoint/server/level/model/Level.java | 12 +- .../server/level/model/LevelRequest.java | 14 ++ .../server/level/service/LevelService.java | 14 ++ .../point/controller/PointController.java | 43 +++- .../greenpoint/server/point/model/Point.java | 18 +- .../server/point/model/PointRequest.java | 15 ++ .../point/repository/PointRepository.java | 6 + .../server/point/service/PointService.java | 41 ++++ .../store/controller/StoreController.java | 39 +++- .../greenpoint/server/store/model/Store.java | 29 ++- .../server/store/model/StoreRequest.java | 18 ++ .../server/store/service/StoreService.java | 33 ++- src/main/resources/application.yml | 27 --- 28 files changed, 484 insertions(+), 210 deletions(-) create mode 100644 src/main/java/com/greenpoint/server/level/model/LevelRequest.java create mode 100644 src/main/java/com/greenpoint/server/point/model/PointRequest.java create mode 100644 src/main/java/com/greenpoint/server/store/model/StoreRequest.java delete mode 100644 src/main/resources/application.yml diff --git a/build.gradle b/build.gradle index c74cfbb..efd66f2 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,6 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.3' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3' implementation 'com.auth0:java-jwt:4.2.1' diff --git a/src/main/java/com/greenpoint/server/auth/controller/UserController.java b/src/main/java/com/greenpoint/server/auth/controller/UserController.java index 681c49c..4ce40a9 100644 --- a/src/main/java/com/greenpoint/server/auth/controller/UserController.java +++ b/src/main/java/com/greenpoint/server/auth/controller/UserController.java @@ -1,24 +1,24 @@ -package com.greenpoint.server.auth.controller; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/api") -public class UserController { - @Autowired - private UserService userService; - - @GetMapping("/oauth/token") - public OauthToken getLogin(@RequestParam("code") String code) { - - OauthToken oauthToken = userService.getAccessToken(code); - - return oauthToken; - } - -} -} +//package com.greenpoint.server.auth.controller; +// +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.web.bind.annotation.GetMapping; +//import org.springframework.web.bind.annotation.RequestMapping; +//import org.springframework.web.bind.annotation.RequestParam; +//import org.springframework.web.bind.annotation.RestController; +// +//@RestController +//@RequestMapping("/api") +//public class UserController { +// @Autowired +// private UserService userService; +// +// @GetMapping("/oauth/token") +// public OauthToken getLogin(@RequestParam("code") String code) { +// +// OauthToken oauthToken = userService.getAccessToken(code); +// +// return oauthToken; +// } +// +// +//} diff --git a/src/main/java/com/greenpoint/server/auth/model/OauthToken.java b/src/main/java/com/greenpoint/server/auth/model/OauthToken.java index fc2f356..7f0e83f 100644 --- a/src/main/java/com/greenpoint/server/auth/model/OauthToken.java +++ b/src/main/java/com/greenpoint/server/auth/model/OauthToken.java @@ -12,5 +12,5 @@ public class OauthToken { //(1) private String scope; private int refresh_token_expires_in; -}} +} diff --git a/src/main/java/com/greenpoint/server/auth/repository/UserRepository.java b/src/main/java/com/greenpoint/server/auth/repository/UserRepository.java index 208995e..3d654b5 100644 --- a/src/main/java/com/greenpoint/server/auth/repository/UserRepository.java +++ b/src/main/java/com/greenpoint/server/auth/repository/UserRepository.java @@ -1,10 +1,10 @@ -package com.greenpoint.server.auth.repository; - -import com.greenpoint.server.customer.model.Customer; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface UserRepository extends JpaRepository { - public Customer findByKakao_Token(String kakaoToken); -// public Customer findByUserCode(String userCode); -} - +//package com.greenpoint.server.auth.repository; +// +//import com.greenpoint.server.customer.model.Customer; +//import org.springframework.data.jpa.repository.JpaRepository; +// +//public interface UserRepository extends JpaRepository { +// public Customer findByKakao_Token(String kakaoToken); +//// public Customer findByUserCode(String userCode); +//} +// diff --git a/src/main/java/com/greenpoint/server/auth/service/UserService.java b/src/main/java/com/greenpoint/server/auth/service/UserService.java index 068381f..44e3991 100644 --- a/src/main/java/com/greenpoint/server/auth/service/UserService.java +++ b/src/main/java/com/greenpoint/server/auth/service/UserService.java @@ -1,123 +1,123 @@ -package com.greenpoint.server.auth.service; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.greenpoint.server.auth.model.KakaoProfile; -import com.greenpoint.server.auth.repository.UserRepository; -import com.greenpoint.server.customer.model.Customer; -import com.greenpoint.server.customer.repository.CustomerRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.client.RestTemplate; - -@Service -public class UserService { - @Autowired - CustomerRepository customerRepository; - -// public OauthToken getAccessToken(String code) { +//package com.greenpoint.server.auth.service; +// +//import com.fasterxml.jackson.core.JsonProcessingException; +//import com.fasterxml.jackson.databind.ObjectMapper; +//import com.greenpoint.server.auth.model.KakaoProfile; +//import com.greenpoint.server.auth.repository.UserRepository; +//import com.greenpoint.server.customer.model.Customer; +//import com.greenpoint.server.customer.repository.CustomerRepository; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.http.HttpEntity; +//import org.springframework.http.HttpHeaders; +//import org.springframework.http.HttpMethod; +//import org.springframework.http.ResponseEntity; +//import org.springframework.stereotype.Service; +//import org.springframework.util.LinkedMultiValueMap; +//import org.springframework.util.MultiValueMap; +//import org.springframework.web.client.RestTemplate; +// +//@Service +//public class UserService { +// @Autowired +// CustomerRepository customerRepository; +// +//// public OauthToken getAccessToken(String code) { +//// RestTemplate rt = new RestTemplate(); +//// +//// HttpHeaders headers = new HttpHeaders(); +//// headers.add("Content-type", "application/x-www-form-urlencoded;charset=utf-8"); +//// +//// //(4) +//// MultiValueMap params = new LinkedMultiValueMap<>(); +//// params.add("grant_type", "authorization_code"); +//// params.add("client_id", "{클라이언트 앱 키}"); +//// params.add("redirect_uri", "{리다이렉트 uri}"); +//// params.add("code", code); +//// params.add("client_secret", "{시크릿 키}"); // 생략 가능! +//// +//// //(5) +//// HttpEntity> kakaoTokenRequest = +//// new HttpEntity<>(params, headers); +//// +//// //(6) +//// ResponseEntity accessTokenResponse = rt.exchange( +//// "https://kauth.kakao.com/oauth/token", +//// HttpMethod.POST, +//// kakaoTokenRequest, +//// String.class +//// ); +//// +//// //(7) +//// ObjectMapper objectMapper = new ObjectMapper(); +//// OauthToken oauthToken = null; +//// try { +//// oauthToken = objectMapper.readValue(accessTokenResponse.getBody(), OauthToken.class); +//// } catch (JsonProcessingException e) { +//// e.printStackTrace(); +//// } +//// +//// return oauthToken; //(8) +//// } +// +// public Customer saveUser(String token) { +// +// //(1) +// Customer customer; +// +// KaKaoprofile profile = findProfile(token); +// //(2) +// Customer user = customerRepository.findByNickname(profile.getKakao_account().getEmail()); +// +// //(3) +// if(user == null) { +// user = User.builder() +// .kakaoId(profile.getId()) +// //(4) +// .kakaoProfileImg(profile.getKakao_account().getProfile().getProfile_image_url()) +// .kakaoNickname(profile.getKakao_account().getProfile().getNickname()) +// .kakaoEmail(profile.getKakao_account().getEmail()) +// //(5) +// .userRole("ROLE_USER").build(); +// +// userRepository.save(user); +// } +// +// return user; +// } +// +// public KakaoProfile findProfile(String token) { +// +// //(1-2) // RestTemplate rt = new RestTemplate(); // +// //(1-3) // HttpHeaders headers = new HttpHeaders(); +// headers.add("Authorization", "Bearer " + token); //(1-4) // headers.add("Content-type", "application/x-www-form-urlencoded;charset=utf-8"); // -// //(4) -// MultiValueMap params = new LinkedMultiValueMap<>(); -// params.add("grant_type", "authorization_code"); -// params.add("client_id", "{클라이언트 앱 키}"); -// params.add("redirect_uri", "{리다이렉트 uri}"); -// params.add("code", code); -// params.add("client_secret", "{시크릿 키}"); // 생략 가능! -// -// //(5) -// HttpEntity> kakaoTokenRequest = -// new HttpEntity<>(params, headers); -// -// //(6) -// ResponseEntity accessTokenResponse = rt.exchange( -// "https://kauth.kakao.com/oauth/token", +// //(1-5) +// HttpEntity> kakaoProfileRequest = +// new HttpEntity<>(headers); +// +// //(1-6) +// // Http 요청 (POST 방식) 후, response 변수에 응답을 받음 +// ResponseEntity kakaoProfileResponse = rt.exchange( +// "https://kapi.kakao.com/v2/user/me", // HttpMethod.POST, -// kakaoTokenRequest, +// kakaoProfileRequest, // String.class // ); // -// //(7) +// //(1-7) // ObjectMapper objectMapper = new ObjectMapper(); -// OauthToken oauthToken = null; +// KakaoProfile kakaoProfile = null; // try { -// oauthToken = objectMapper.readValue(accessTokenResponse.getBody(), OauthToken.class); +// kakaoProfile = objectMapper.readValue(kakaoProfileResponse.getBody(), KakaoProfile.class); // } catch (JsonProcessingException e) { // e.printStackTrace(); // } // -// return oauthToken; //(8) +// return kakaoProfile; // } - - public Customer saveUser(String token) { - - //(1) - Customer customer; - - KaKaoprofile profile = findProfile(token); - //(2) - Customer user = customerRepository.findByNickname(profile.getKakao_account().getEmail()); - - //(3) - if(user == null) { - user = User.builder() - .kakaoId(profile.getId()) - //(4) - .kakaoProfileImg(profile.getKakao_account().getProfile().getProfile_image_url()) - .kakaoNickname(profile.getKakao_account().getProfile().getNickname()) - .kakaoEmail(profile.getKakao_account().getEmail()) - //(5) - .userRole("ROLE_USER").build(); - - userRepository.save(user); - } - - return user; - } - - public KakaoProfile findProfile(String token) { - - //(1-2) - RestTemplate rt = new RestTemplate(); - - //(1-3) - HttpHeaders headers = new HttpHeaders(); - headers.add("Authorization", "Bearer " + token); //(1-4) - headers.add("Content-type", "application/x-www-form-urlencoded;charset=utf-8"); - - //(1-5) - HttpEntity> kakaoProfileRequest = - new HttpEntity<>(headers); - - //(1-6) - // Http 요청 (POST 방식) 후, response 변수에 응답을 받음 - ResponseEntity kakaoProfileResponse = rt.exchange( - "https://kapi.kakao.com/v2/user/me", - HttpMethod.POST, - kakaoProfileRequest, - String.class - ); - - //(1-7) - ObjectMapper objectMapper = new ObjectMapper(); - KakaoProfile kakaoProfile = null; - try { - kakaoProfile = objectMapper.readValue(kakaoProfileResponse.getBody(), KakaoProfile.class); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - - return kakaoProfile; - } - -} +// +//} diff --git a/src/main/java/com/greenpoint/server/common/BaseEntity.java b/src/main/java/com/greenpoint/server/common/BaseEntity.java index 7ef0f09..800c768 100644 --- a/src/main/java/com/greenpoint/server/common/BaseEntity.java +++ b/src/main/java/com/greenpoint/server/common/BaseEntity.java @@ -19,6 +19,7 @@ @NoArgsConstructor @Getter public abstract class BaseEntity { + @CreatedDate @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") @Column(updatable = false) diff --git a/src/main/java/com/greenpoint/server/customer/model/Customer.java b/src/main/java/com/greenpoint/server/customer/model/Customer.java index 1817640..348f8d5 100644 --- a/src/main/java/com/greenpoint/server/customer/model/Customer.java +++ b/src/main/java/com/greenpoint/server/customer/model/Customer.java @@ -18,14 +18,13 @@ @NoArgsConstructor @AllArgsConstructor @Where(clause = "deleted = false") -@SQLDelete(sql = "UPDATE customer SET deleted = true Where kakaoToken = ?") +@SQLDelete(sql = "UPDATE customer SET deleted = true Where id = ?") public class Customer extends BaseEntity { -// @Id -// @GeneratedValue(strategy = GenerationType.IDENTITY) -// private Long id; - @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(unique = true) private String kakaoToken; private String name; diff --git a/src/main/java/com/greenpoint/server/customer/repository/CustomerRepository.java b/src/main/java/com/greenpoint/server/customer/repository/CustomerRepository.java index 57eb7bb..b08ddad 100644 --- a/src/main/java/com/greenpoint/server/customer/repository/CustomerRepository.java +++ b/src/main/java/com/greenpoint/server/customer/repository/CustomerRepository.java @@ -3,6 +3,10 @@ import com.greenpoint.server.customer.model.Customer; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; public interface CustomerRepository extends JpaRepository { + + @Query("select c from Customer c where c.id = :customerId") + Customer findWithId(Long customerId); } diff --git a/src/main/java/com/greenpoint/server/customer/service/CustomerService.java b/src/main/java/com/greenpoint/server/customer/service/CustomerService.java index fd61b44..6c0c6ae 100644 --- a/src/main/java/com/greenpoint/server/customer/service/CustomerService.java +++ b/src/main/java/com/greenpoint/server/customer/service/CustomerService.java @@ -4,14 +4,29 @@ import com.greenpoint.server.customer.repository.CustomerRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service public class CustomerService { + @Autowired - private CustomerRepository customerRepository; - public Customer findById(Long customerId) { - Customer customer = customerRepository.findById(customerId).get(); + private static CustomerRepository customerRepository; + + @Transactional(readOnly = true) + public Customer findOne(Long customerId) { + Customer customer = customerRepository.findWithId(customerId); return customer; } + @Transactional + public Customer findById(Long cid){ + Customer ret = this.findOne(cid); + return ret; + } + + @Transactional(readOnly = true) + public Customer findWithId(Long customerId) { + Customer ret = customerRepository.findWithId(customerId); + return ret; + } } diff --git a/src/main/java/com/greenpoint/server/history/controller/HistoryController.java b/src/main/java/com/greenpoint/server/history/controller/HistoryController.java index 88ba476..e9f67f9 100644 --- a/src/main/java/com/greenpoint/server/history/controller/HistoryController.java +++ b/src/main/java/com/greenpoint/server/history/controller/HistoryController.java @@ -1,5 +1,7 @@ package com.greenpoint.server.history.controller; +import com.greenpoint.server.customer.model.Customer; +import com.greenpoint.server.customer.service.CustomerService; import com.greenpoint.server.history.model.History; import com.greenpoint.server.history.model.HistoryRequest; import com.greenpoint.server.history.model.HistoryResponse; @@ -23,18 +25,21 @@ public class HistoryController { @Autowired private StoreService storeService; + @Autowired + private CustomerService customerService; - @GetMapping(value = "/history/{token}") - public ResponseEntity> findAllHistoryByCustomer(){ - - + @GetMapping(value = "/history/{id}") + public ResponseEntity> findAllById(@PathVariable Long customerId){ + List res = historyService.findAllById(customerId); + return ResponseEntity.ok(res); } @PostMapping(value="/history") public ResponseEntity addHistory(@RequestBody HistoryRequest request){ - Store store = storeService.findById(request.getStoreId()); - Long res = historyService.create(History.from(store, request)); + Customer customer = customerService.findWithId(request.getCustomerId()); + Store store = storeService.findStoreById(request.getStoreId()); + Long res = historyService.create(History.from(store, request), customer); return ResponseEntity.ok(res); } diff --git a/src/main/java/com/greenpoint/server/history/model/History.java b/src/main/java/com/greenpoint/server/history/model/History.java index 5575f35..0b5486b 100644 --- a/src/main/java/com/greenpoint/server/history/model/History.java +++ b/src/main/java/com/greenpoint/server/history/model/History.java @@ -33,7 +33,7 @@ public class History extends BaseEntity { public static History from(Store store, HistoryRequest request){ - return History.builder() + return History.builder() .customerId(request.getCustomerId()) .store(store) .cost(request.getCost()) diff --git a/src/main/java/com/greenpoint/server/history/model/HistoryResponse.java b/src/main/java/com/greenpoint/server/history/model/HistoryResponse.java index 715d705..b7761ae 100644 --- a/src/main/java/com/greenpoint/server/history/model/HistoryResponse.java +++ b/src/main/java/com/greenpoint/server/history/model/HistoryResponse.java @@ -1,5 +1,7 @@ package com.greenpoint.server.history.model; +import com.greenpoint.server.customer.model.Customer; +import com.greenpoint.server.customer.service.CustomerService; import com.greenpoint.server.store.model.Store; import lombok.AllArgsConstructor; import lombok.Builder; @@ -21,12 +23,12 @@ public class HistoryResponse { private int usedPoint; private int currentPoint; - public HistoryResponse from(History history){ + + public static HistoryResponse from(History history){ return HistoryResponse.builder() .storeName(history.getStore().getName()) .savedPoint(history.getSavedPoint()) .usedPoint(history.getUsedPoint()) - .currentPoint(history.) .build(); } diff --git a/src/main/java/com/greenpoint/server/history/repository/HistoryRepository.java b/src/main/java/com/greenpoint/server/history/repository/HistoryRepository.java index 1ac26c3..05cef3d 100644 --- a/src/main/java/com/greenpoint/server/history/repository/HistoryRepository.java +++ b/src/main/java/com/greenpoint/server/history/repository/HistoryRepository.java @@ -2,7 +2,15 @@ import com.greenpoint.server.history.model.History; +import com.greenpoint.server.history.model.HistoryResponse; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.Arrays; +import java.util.List; public interface HistoryRepository extends JpaRepository { + + @Query("select h from History h where h.customerId = :cid") + List findAllById(Long cid); } diff --git a/src/main/java/com/greenpoint/server/history/service/HistoryService.java b/src/main/java/com/greenpoint/server/history/service/HistoryService.java index 0b7c02e..807afce 100644 --- a/src/main/java/com/greenpoint/server/history/service/HistoryService.java +++ b/src/main/java/com/greenpoint/server/history/service/HistoryService.java @@ -3,28 +3,34 @@ import com.greenpoint.server.customer.model.Customer; import com.greenpoint.server.customer.service.CustomerService; import com.greenpoint.server.history.model.History; +import com.greenpoint.server.history.model.HistoryResponse; import com.greenpoint.server.history.repository.HistoryRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; +import java.util.stream.Collectors; + @Service public class HistoryService { @Autowired private HistoryRepository historyRepository; - @Autowired - private CustomerService customerService; + @Transactional - public Long create(History history){ + public Long create(History history, Customer customer){ History res = historyRepository.save(history); - Customer customer = customerService.findById(history.getCustomerId()); customer.addpoint(history.getSavedPoint()); customer.usepoint(history.getUsedPoint()); return res.getId(); } - + @Transactional + public List findAllById(Long customerId) { + List histories = historyRepository.findAllById(customerId); + return histories.stream().map(HistoryResponse::from).collect(Collectors.toList()); + } } diff --git a/src/main/java/com/greenpoint/server/level/controller/LevelController.java b/src/main/java/com/greenpoint/server/level/controller/LevelController.java index 38ba87b..7410af7 100644 --- a/src/main/java/com/greenpoint/server/level/controller/LevelController.java +++ b/src/main/java/com/greenpoint/server/level/controller/LevelController.java @@ -1,6 +1,13 @@ package com.greenpoint.server.level.controller; +import com.greenpoint.server.level.model.Level; +import com.greenpoint.server.level.model.LevelRequest; +import com.greenpoint.server.level.service.LevelService; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -9,4 +16,13 @@ @RequestMapping("/api") public class LevelController { + @Autowired + private LevelService levelService; + + @PostMapping(value="/level") + public ResponseEntity create(@RequestBody LevelRequest request){ + Level res = levelService.create(Level.from(request)); + return ResponseEntity.ok(res); + } + } diff --git a/src/main/java/com/greenpoint/server/level/model/Level.java b/src/main/java/com/greenpoint/server/level/model/Level.java index 51329f3..49fe403 100644 --- a/src/main/java/com/greenpoint/server/level/model/Level.java +++ b/src/main/java/com/greenpoint/server/level/model/Level.java @@ -2,10 +2,7 @@ import com.greenpoint.server.common.BaseEntity; import com.greenpoint.server.customer.model.Customer; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.Where; @@ -14,6 +11,7 @@ @Entity @Getter @Setter +@Builder @NoArgsConstructor @AllArgsConstructor @Where(clause = "deleted = false") @@ -26,4 +24,10 @@ public class Level extends BaseEntity{ private String name; private String image; + public static Level from(LevelRequest request) { + return Level.builder() + .name(request.getName()) + .image(request.getImage()) + .build(); + } } diff --git a/src/main/java/com/greenpoint/server/level/model/LevelRequest.java b/src/main/java/com/greenpoint/server/level/model/LevelRequest.java new file mode 100644 index 0000000..e5abfc2 --- /dev/null +++ b/src/main/java/com/greenpoint/server/level/model/LevelRequest.java @@ -0,0 +1,14 @@ +package com.greenpoint.server.level.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class LevelRequest { + public String name; + public String image; +} diff --git a/src/main/java/com/greenpoint/server/level/service/LevelService.java b/src/main/java/com/greenpoint/server/level/service/LevelService.java index 11263d3..019f290 100644 --- a/src/main/java/com/greenpoint/server/level/service/LevelService.java +++ b/src/main/java/com/greenpoint/server/level/service/LevelService.java @@ -1,7 +1,21 @@ package com.greenpoint.server.level.service; +import com.greenpoint.server.level.model.Level; +import com.greenpoint.server.level.repository.LevelRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service public class LevelService { + + @Autowired + private LevelRepository levelRepository; + + @Transactional + public Level create(Level level){ + Level ret = levelRepository.save(level); + return ret; + } + } diff --git a/src/main/java/com/greenpoint/server/point/controller/PointController.java b/src/main/java/com/greenpoint/server/point/controller/PointController.java index 26e2171..e8dadcc 100644 --- a/src/main/java/com/greenpoint/server/point/controller/PointController.java +++ b/src/main/java/com/greenpoint/server/point/controller/PointController.java @@ -1,12 +1,51 @@ package com.greenpoint.server.point.controller; +import com.greenpoint.server.point.model.Point; +import com.greenpoint.server.point.model.PointRequest; +import com.greenpoint.server.point.service.PointService; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.xml.ws.Response; +import java.util.List; @RestController @RequiredArgsConstructor @RequestMapping("/api") public class PointController { + @Autowired + private PointService pointService; + + @GetMapping(value = "/point") + public ResponseEntity> findAll(){ + return ResponseEntity.ok(pointService.findAll()); + } + + @GetMapping(value = "/point/{sid}") + public ResponseEntity> findAllByStore(@PathVariable Long sid){ + List res = pointService.findAllByStore(sid); + return ResponseEntity.ok(pointService.findAll()); + } + + @PostMapping(value="/point") + public ResponseEntity create(@RequestBody PointRequest request){ + Long res = pointService.create(Point.from(request)); + return ResponseEntity.ok(res); + } + + @PatchMapping(value = "/point/{id}") + public ResponseEntity update(@PathVariable Long id, @RequestBody PointRequest request){ + Point res = pointService.update(id, request); + return ResponseEntity.ok(res); + } + + @DeleteMapping(value = "/point/{id}") + public void delete(@PathVariable Long id){ + pointService.delete(id); + } + + } diff --git a/src/main/java/com/greenpoint/server/point/model/Point.java b/src/main/java/com/greenpoint/server/point/model/Point.java index 9716314..c1353b4 100644 --- a/src/main/java/com/greenpoint/server/point/model/Point.java +++ b/src/main/java/com/greenpoint/server/point/model/Point.java @@ -2,10 +2,7 @@ import com.greenpoint.server.common.BaseEntity; import com.greenpoint.server.store.model.Store; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.Where; @@ -14,6 +11,7 @@ @Entity @Getter @Setter +@Builder @NoArgsConstructor @AllArgsConstructor @Where(clause = "deleted = false") @@ -30,4 +28,16 @@ public class Point extends BaseEntity{ private String name; private int weight; + public static Point from(PointRequest request){ + return Point.builder() + .storeId(request.getStoreId()) + .name(request.getName()) + .weight(request.getWeight()) + .build(); + } + + public void update(PointRequest request) { + this.name = request.getName(); + this.weight = request.getWeight(); + } } diff --git a/src/main/java/com/greenpoint/server/point/model/PointRequest.java b/src/main/java/com/greenpoint/server/point/model/PointRequest.java new file mode 100644 index 0000000..7474421 --- /dev/null +++ b/src/main/java/com/greenpoint/server/point/model/PointRequest.java @@ -0,0 +1,15 @@ +package com.greenpoint.server.point.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class PointRequest { + private Long storeId; + private String name; + private int weight; +} diff --git a/src/main/java/com/greenpoint/server/point/repository/PointRepository.java b/src/main/java/com/greenpoint/server/point/repository/PointRepository.java index a66451b..7dbbc3b 100644 --- a/src/main/java/com/greenpoint/server/point/repository/PointRepository.java +++ b/src/main/java/com/greenpoint/server/point/repository/PointRepository.java @@ -3,6 +3,12 @@ import com.greenpoint.server.point.model.Point; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; public interface PointRepository extends JpaRepository { + @Query("select p from Point p where p.storeId = :sid") + List findAllByStore(Long sid); + } diff --git a/src/main/java/com/greenpoint/server/point/service/PointService.java b/src/main/java/com/greenpoint/server/point/service/PointService.java index e8f1750..2ba4c84 100644 --- a/src/main/java/com/greenpoint/server/point/service/PointService.java +++ b/src/main/java/com/greenpoint/server/point/service/PointService.java @@ -1,7 +1,48 @@ package com.greenpoint.server.point.service; +import com.greenpoint.server.point.model.Point; +import com.greenpoint.server.point.model.PointRequest; +import com.greenpoint.server.point.repository.PointRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; @Service public class PointService { + + @Autowired + private PointRepository pointRepository; + + private Point findOne(Long id){ + return pointRepository.findById(id).get(); + } + + @Transactional + public Point update(Long id, PointRequest request) { + Point res = pointRepository.findById(id).get(); + res.update(request); + return res; + } + @Transactional + public Long create(Point point){ + pointRepository.save(point); + return point.getId(); + } + @Transactional(readOnly = true) + public List findAll() { + return pointRepository.findAll(); + } + + @Transactional + public void delete(Long id) { + pointRepository.delete(this.findOne(id)); + } + + @Transactional(readOnly = true) + public List findAllByStore(Long storeid) { + List res = pointRepository.findAllByStore(storeid); + return res; + } } diff --git a/src/main/java/com/greenpoint/server/store/controller/StoreController.java b/src/main/java/com/greenpoint/server/store/controller/StoreController.java index e87af01..e3f071b 100644 --- a/src/main/java/com/greenpoint/server/store/controller/StoreController.java +++ b/src/main/java/com/greenpoint/server/store/controller/StoreController.java @@ -1,11 +1,46 @@ package com.greenpoint.server.store.controller; +import com.greenpoint.server.store.model.Store; +import com.greenpoint.server.store.model.StoreRequest; +import com.greenpoint.server.store.service.StoreService; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.xml.ws.Response; +import java.util.List; @RestController @RequiredArgsConstructor +@CrossOrigin @RequestMapping("/api") public class StoreController { + + @Autowired + private StoreService storeService; + + @GetMapping(value="/store") + public ResponseEntity> findAll(){ + List res = storeService.findAll(); + return ResponseEntity.ok(res); + } + @PostMapping(value="/store") + public ResponseEntity create(@RequestBody StoreRequest request){ + Store res = storeService.create(Store.from(request)); + return ResponseEntity.ok(res); + } + @PatchMapping(value="/store/{id}") + public ResponseEntity update(@PathVariable Long id, @RequestBody StoreRequest request){ + Store res = storeService.update(id, request); + return ResponseEntity.ok(res); + } + @DeleteMapping(value="/store/{id}") + public void delete(@PathVariable Long id){ + storeService.delete(id); + } + + + + } diff --git a/src/main/java/com/greenpoint/server/store/model/Store.java b/src/main/java/com/greenpoint/server/store/model/Store.java index 87a523f..9a1893e 100644 --- a/src/main/java/com/greenpoint/server/store/model/Store.java +++ b/src/main/java/com/greenpoint/server/store/model/Store.java @@ -5,10 +5,7 @@ import com.greenpoint.server.history.model.History; import com.greenpoint.server.menu.model.Menu; import com.greenpoint.server.point.model.Point; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.Where; @@ -19,11 +16,12 @@ @Entity @Getter @Setter +@Builder @NoArgsConstructor @AllArgsConstructor @Where(clause = "deleted = false") @SQLDelete(sql = "UPDATE store SET deleted = true Where id = ?") -public class Store extends BaseEntity{ +public class Store extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -36,5 +34,26 @@ public class Store extends BaseEntity{ private double latitude; private double longitude; + public static Store from(StoreRequest request){ + return Store.builder() + .loginID(request.getLoginID()) + .password(request.getPassword()) + .category(request.getCategory()) + .name(request.getName()) + .image(request.getImage()) + .latitude(request.getLatitude()) + .longitude(request.getLongitude()) + .build(); + } + + public void update(StoreRequest request) { + this.category = request.getCategory(); + this.image = request.getImage(); + this.loginID = request.getLoginID(); + this.name = request.getName(); + this.password = request.getPassword(); + this.latitude = request.getLatitude(); + this.longitude = request.getLongitude(); + } } diff --git a/src/main/java/com/greenpoint/server/store/model/StoreRequest.java b/src/main/java/com/greenpoint/server/store/model/StoreRequest.java new file mode 100644 index 0000000..0825d1a --- /dev/null +++ b/src/main/java/com/greenpoint/server/store/model/StoreRequest.java @@ -0,0 +1,18 @@ +package com.greenpoint.server.store.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class StoreRequest { + private String loginID; + private String password; + private String category; + private String name; + private String image; + private double latitude; + private double longitude; +} diff --git a/src/main/java/com/greenpoint/server/store/service/StoreService.java b/src/main/java/com/greenpoint/server/store/service/StoreService.java index 0e4602a..be35561 100644 --- a/src/main/java/com/greenpoint/server/store/service/StoreService.java +++ b/src/main/java/com/greenpoint/server/store/service/StoreService.java @@ -2,11 +2,14 @@ import com.greenpoint.server.exception.GlobalException; import com.greenpoint.server.store.model.Store; +import com.greenpoint.server.store.model.StoreRequest; import com.greenpoint.server.store.repository.StoreRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service public class StoreService { @@ -15,8 +18,36 @@ public class StoreService { @Transactional(readOnly = true) - public Store findById(Long storeId) { + public Store findStoreById(Long storeId) { Store ret = storeRepository.findById(storeId).get(); return ret; } + + @Transactional(readOnly = true) + public List findAll() { + List ret = storeRepository.findAll(); + return ret; + } + + @Transactional + public Store create(Store store) { + Store ret = storeRepository.save(store); + return ret; + } + + @Transactional + public void delete(Long id) { + storeRepository.deleteById(id); + } + + @Transactional + public Store update(Long id, StoreRequest request) { + Store ret = this.findOne(id); + ret.update(request); + return ret; + } + + private Store findOne(Long id) { + return storeRepository.findById(id).get(); + } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml deleted file mode 100644 index d9a7e92..0000000 --- a/src/main/resources/application.yml +++ /dev/null @@ -1,27 +0,0 @@ -#spring: -# security: -# oauth2: -# client: -# registration: -# kakao: -# client-id: d83c4df2ae52b5f2a42c9b5f776e4178 -# redirect-uri: localhost:8080/main -# client-authentication-method: POST -# client-secret: Qq1yGZKo245VNijN1h17EwjABCk5ZpzQ -# authorization-grant-type: authorization_code -# scope: -# - profile_nickname -# - profile_image -# provider: -# kakao: -# authorization-uri: https://kauth.kakao.com/oauth/authorize -# token-uri: https://kauth.kakao.com/oauth/token -# user-info-uri: https://kapi.kakao.com/v2/user/me -# user-name-attribute: id -#jwt: -# token: -# secret-key: Qq1yGZKo245VNijN1h17EwjABCk5ZpzQ -# access-token: -# expire-length: 1800000 -# refresh-token: -# expire-length: 1209600000 \ No newline at end of file