Skip to content

Commit

Permalink
feat: 구매자 회원가입 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
kamser0415 committed Oct 22, 2024
1 parent 86b8669 commit 30575db
Show file tree
Hide file tree
Showing 15 changed files with 493 additions and 16 deletions.
53 changes: 52 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ plugins {
id 'org.springframework.boot' version '3.3.1'
id 'io.spring.dependency-management' version '1.1.5'
id 'checkstyle'
id 'jacoco'
}

checkstyle {
maxWarnings = 0
configFile = file("${rootDir}/naver-checkstyle-rules.xml")
configProperties = ["suppressionFile": "${rootDir}/naver-checkstyle-suppressions.xml"]
toolVersion = "8.24"
toolVersion('10.3.1')
}

compileJava.options.encoding = 'UTF-8'
Expand All @@ -32,8 +33,58 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
// ORM JPA
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// RDBMS H2
runtimeOnly 'com.h2database:h2'
// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}

tasks.named('test') {
useJUnitPlatform()
finalizedBy jacocoTestReport
}

//jacoco
jacoco {
toolVersion = "0.8.11"
reportsDirectory = layout.buildDirectory.dir('customJacocoReportDir')
}

jacocoTestReport {
dependsOn test
finalizedBy 'jacocoTestCoverageVerification'

reports {
xml.required = false
csv.required = false
html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
}
}

jacocoTestCoverageVerification {
violationRules {
rule {
enabled = true

element = 'CLASS'

includes = ['shop.sendbox.sendbox.*']
excludes = ['shop.sendbox.sendbox.SendboxApplication']

limit {
counter = 'BRANCH'
value = 'COVEREDRATIO'
minimum = 0.70
}

limit {
counter = 'LINE'
value = 'COVEREDRATIO'
minimum = 0.70
}
}
}
}
30 changes: 30 additions & 0 deletions src/main/java/shop/sendbox/sendbox/buyer/ApiResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package shop.sendbox.sendbox.buyer;

import org.springframework.http.HttpStatus;

import lombok.Getter;

@Getter
public class ApiResponse<T> {

private final int statusCode;
private final HttpStatus status;
private final String message;
private final T data;

private ApiResponse(HttpStatus status, String message, T data) {
this.statusCode = status.value();
this.data = data;
this.status = status;
this.message = message;
}

public static <T> ApiResponse<T> of(HttpStatus status, String message, T data) {
return new ApiResponse<>(status, message, data);
}

public static <T> ApiResponse<T> ok(T data) {
return new ApiResponse<>(HttpStatus.OK, HttpStatus.OK.name(), data);
}

}
64 changes: 64 additions & 0 deletions src/main/java/shop/sendbox/sendbox/buyer/Buyer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package shop.sendbox.sendbox.buyer;

import java.time.LocalDateTime;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Buyer {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long buyerId;
private String email;
private String password;
private String name;
private String phoneNumber;
private Long addressId;
private String buyerStatus;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private String createdBy;
private String updatedBy;
private String deleteYN;

@Builder
private Buyer(String email, String password, String name, String phoneNumber, LocalDateTime createdAt,
String createdBy, String deleteYN, String buyerStatus, Long addressId) {
this.email = email;
this.password = password;
this.name = name;
this.phoneNumber = phoneNumber;
this.addressId = addressId;
this.buyerStatus = buyerStatus;
this.createdAt = createdAt;
this.updatedAt = createdAt;
this.createdBy = createdBy;
this.updatedBy = createdBy;
this.deleteYN = deleteYN;
}

public static Buyer create(String email, String password, String name, String phoneNumber, LocalDateTime createdAt,
String createdBy) {
return Buyer.builder()
.email(email)
.password(password)
.name(name)
.phoneNumber(phoneNumber)
.createdAt(createdAt)
.createdBy(createdBy)
.deleteYN("N")
.buyerStatus("ACTIVE")
.build();
}

}
23 changes: 23 additions & 0 deletions src/main/java/shop/sendbox/sendbox/buyer/BuyerController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package shop.sendbox.sendbox.buyer;

import java.time.LocalDateTime;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
public class BuyerController {
private final BuyerService buyerService;

@PostMapping("/buyers")
public ApiResponse<BuyerResponse> signUp(BuyerCreateRequest buyerCreateRequest) {

final LocalDateTime now = LocalDateTime.now();
BuyerResponse buyerResponse = buyerService.signUp(buyerCreateRequest.toServiceRequest(), now);
return ApiResponse.ok(buyerResponse);
}

}
30 changes: 30 additions & 0 deletions src/main/java/shop/sendbox/sendbox/buyer/BuyerCreateRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package shop.sendbox.sendbox.buyer;

import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public class BuyerCreateRequest {

private String email;
private String password;
private String name;
private String phoneNumber;
private Long addressId;
private String createdBy;

public BuyerCreateRequest(String email, String password, String name, String phoneNumber, Long addressId,
String createdBy) {
this.email = email;
this.password = password;
this.name = name;
this.phoneNumber = phoneNumber;
this.addressId = addressId;
this.createdBy = createdBy;
}

public BuyerRequest toServiceRequest() {
return new BuyerRequest(email, password, name, phoneNumber, addressId, createdBy);
}
}
6 changes: 6 additions & 0 deletions src/main/java/shop/sendbox/sendbox/buyer/BuyerRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package shop.sendbox.sendbox.buyer;

import org.springframework.data.jpa.repository.JpaRepository;

public interface BuyerRepository extends JpaRepository<Buyer, Long> {
}
11 changes: 11 additions & 0 deletions src/main/java/shop/sendbox/sendbox/buyer/BuyerRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package shop.sendbox.sendbox.buyer;

public record BuyerRequest(
String email,
String password,
String name,
String phoneNumber,
Long addressId,
String createdBy
) {
}
33 changes: 33 additions & 0 deletions src/main/java/shop/sendbox/sendbox/buyer/BuyerResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package shop.sendbox.sendbox.buyer;

import lombok.Builder;
import lombok.Getter;

@Getter
public class BuyerResponse {

private final Long buyerId;
private final String email;
private final String name;
private final String phoneNumber;
private final String buyerStatus;

@Builder
private BuyerResponse(Long buyerId, String email, String name, String phoneNumber, String buyerStatus) {
this.buyerId = buyerId;
this.email = email;
this.name = name;
this.phoneNumber = phoneNumber;
this.buyerStatus = buyerStatus;
}

public static BuyerResponse of(Buyer buyer) {
return BuyerResponse.builder()
.buyerId(buyer.getBuyerId())
.email(buyer.getEmail())
.name(buyer.getName())
.phoneNumber(buyer.getPhoneNumber())
.buyerStatus(buyer.getBuyerStatus())
.build();
}
}
21 changes: 21 additions & 0 deletions src/main/java/shop/sendbox/sendbox/buyer/BuyerService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package shop.sendbox.sendbox.buyer;

import java.time.LocalDateTime;

import org.springframework.stereotype.Service;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class BuyerService {

private final BuyerRepository buyerRepository;

public BuyerResponse signUp(final BuyerRequest buyerRequest, final LocalDateTime createdAt) {
Buyer buyer = Buyer.create(buyerRequest.email(), buyerRequest.password(), buyerRequest.name(),
buyerRequest.phoneNumber(), createdAt, buyerRequest.createdBy());
final Buyer savedBuyer = buyerRepository.save(buyer);
return BuyerResponse.of(savedBuyer);
}
}

This file was deleted.

27 changes: 27 additions & 0 deletions src/test/java/shop/sendbox/sendbox/buyer/ApiResponseTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package shop.sendbox.sendbox.buyer;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpStatus;

class ApiResponseTest {

@Test
@DisplayName("ApiResponse는 응답코드,메세지,데이터를 입력받아 생성한다.")
void create() {
// given
HttpStatus statusCode = HttpStatus.OK;
String message = "success";
String data = "data";
// when
ApiResponse<String> apiResponse = ApiResponse.of(statusCode, message, data);

// then
Assertions.assertThat(apiResponse.getStatusCode()).isEqualTo(statusCode.value());
Assertions.assertThat(apiResponse.getStatus()).isEqualTo(statusCode);
Assertions.assertThat(apiResponse.getMessage()).isEqualTo(message);
Assertions.assertThat(apiResponse.getData()).isEqualTo(data);
}

}
Loading

0 comments on commit 30575db

Please sign in to comment.