Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
c1f727a
#50 (build.gradle) oauth2 의존성 추가
tae0u0 Dec 28, 2024
54ad45c
#50 Mockito, wireMock 의존성 추가
tae0u0 Dec 30, 2024
fe30275
#50 충돌나는 공통 클래스 병합
tae0u0 Dec 30, 2024
1a1d5d7
#54 (AccountController) 사업자 정보 검증, 사장 회원가입 api 구현
tae0u0 Jan 3, 2025
c92461a
#54 (dto) 사업자 정보 검증 및 회원가입 dto 구현
tae0u0 Jan 3, 2025
9da9f18
#54 (AccountController) 사업자 정보 검증, 사장 회원가입 api 구현
tae0u0 Jan 3, 2025
e39df4e
#54 (Location) 사업장 위치(Location) 엔티티 생성
tae0u0 Jan 3, 2025
8f81871
#54 (Repository) AuthRepository를 AccountRepository로 병합 및 LocationRepo…
tae0u0 Jan 3, 2025
53a7702
#54 (Service) 사업자 정보 검증 및 회원가입 서비스 구현
tae0u0 Jan 3, 2025
f14de3f
#54 (application.properties) 사업자 정보 검증 openApi 설정
tae0u0 Jan 3, 2025
fb024d4
#54 (RestTemplateConfig) RestTemplate 빈 등록
tae0u0 Jan 3, 2025
789dd4d
#54 (VendorProperties) 사업자 정보 검증 api 속성 클래스 생성
tae0u0 Jan 3, 2025
ba1effb
#54 (ErrorCode) 유효하지 않은 사업자 정보 검증 결과 에러 코드 생성
tae0u0 Jan 3, 2025
37456df
#54 Business 도메인 location을 String -> Location 타입 엔티티 변경으로 인한 수정
tae0u0 Jan 3, 2025
79c0bc1
#54 컨벤션 수정
tae0u0 Jan 3, 2025
6eeaf54
#54 (AccountServiceTest) 사업자 등록 정보 검증 및 중복 id 검증 테스트 코드 작성
tae0u0 Jan 4, 2025
0691cd2
.
tae0u0 Jan 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ plugins {
id 'java'
id 'org.springframework.boot' version '3.3.5'
id 'io.spring.dependency-management' version '1.1.6'
id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}

group = 'com.example'
Expand All @@ -28,7 +27,6 @@ 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-data-mongodb'
implementation 'org.springframework.boot:spring-boot-starter-websocket'

compileOnly 'org.projectlombok:lombok'
// runtimeOnly 'com.mysql:mysql-connector-j'
Expand All @@ -54,6 +52,7 @@ dependencies {

// SMTP
implementation 'org.springframework.boot:spring-boot-starter-mail'

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

// JWT
Expand Down Expand Up @@ -88,6 +87,15 @@ dependencies {
//객체 간 매핑 처리
implementation 'org.modelmapper:modelmapper:3.1.0'


// OAUTH2
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

// MOCKITO
testImplementation "org.mockito:mockito-core:3.+"

//WIREMOCK (외부 의존성 테스트용)
implementation 'org.wiremock.integrations:wiremock-spring-boot:3.3.0'
}

tasks.named('test') {
Expand All @@ -114,4 +122,4 @@ sourceSets {
srcDirs = ['src/test/java']
}
}
}
}
2 changes: 1 addition & 1 deletion gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

43 changes: 43 additions & 0 deletions src/main/generated/com/example/api/account/entity/QLocation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.example.api.account.entity;

import static com.querydsl.core.types.PathMetadataFactory.*;

import com.querydsl.core.types.dsl.*;

import com.querydsl.core.types.PathMetadata;
import javax.annotation.processing.Generated;
import com.querydsl.core.types.Path;


/**
* QLocation is a Querydsl query type for Location
*/
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QLocation extends EntityPathBase<Location> {

private static final long serialVersionUID = -590127238L;

public static final QLocation location = new QLocation("location");

public final StringPath address = createString("address");

public final StringPath detailAddress = createString("detailAddress");

public final NumberPath<Long> id = createNumber("id", Long.class);

public final StringPath zipcode = createString("zipcode");

public QLocation(String variable) {
super(Location.class, forVariable(variable));
}

public QLocation(Path<? extends Location> path) {
super(path.getType(), path.getMetadata());
}

public QLocation(PathMetadata metadata) {
super(Location.class, metadata);
}

}

3 changes: 2 additions & 1 deletion src/main/generated/com/example/api/domain/QBusiness.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public class QBusiness extends EntityPathBase<Business> {

public final QAccount employer;

public final StringPath location = createString("location");
public final com.example.api.account.entity.QLocation location;

public final DatePath<java.time.LocalDate> openDate = createDate("openDate", java.time.LocalDate.class);

Expand Down Expand Up @@ -65,6 +65,7 @@ public QBusiness(PathMetadata metadata, PathInits inits) {
public QBusiness(Class<? extends Business> type, PathMetadata metadata, PathInits inits) {
super(type, metadata, inits);
this.employer = inits.isInitialized("employer") ? new QAccount(forProperty("employer")) : null;
this.location = inits.isInitialized("location") ? new com.example.api.account.entity.QLocation(forProperty("location")) : null;
}

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
package com.example.api.account.controller;

import com.example.api.account.dto.EmailCodeRequest;
import com.example.api.account.dto.EmailRequest;
import com.example.api.account.dto.*;
import com.example.api.account.entity.Code;
import com.example.api.account.service.AccountService;
import com.example.api.account.dto.SignUpRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;


@RestController
@RequestMapping("/api/v1/account")
@RequiredArgsConstructor
Expand All @@ -32,9 +31,15 @@ public ResponseEntity<String> verifyEmail(@Valid @RequestBody final EmailCodeReq
return ResponseEntity.ok(successMessage);
}

@PostMapping("/sign-up")
public ResponseEntity<String> signUp(@Valid @RequestBody final SignUpRequest request) {
String successMessage = signUpService.signUp(request);
@PostMapping("/sign-up/employee")
public ResponseEntity<String> signUpEmployee(@Valid @RequestBody final SignUpEmployeeRequest request) {
String successMessage = signUpService.signUpEmployee(request);
return ResponseEntity.status(HttpStatus.CREATED).body(successMessage);
}

@PostMapping("/sign-up/employer")
public ResponseEntity<String> signUpEmployer(@Valid @RequestBody final SignUpEmployerRequest request) {
String successMessage = signUpService.signUpEmployer(request);
return ResponseEntity.status(HttpStatus.CREATED).body(successMessage);
}

Expand All @@ -50,4 +55,16 @@ public ResponseEntity<String> deleteAccount(
accountService.deleteAccount(memberId);
return ResponseEntity.ok("delete account");
}

@PostMapping("/validation/business-number")
public ResponseEntity<String> verifyBusinessNumber(@Valid @RequestBody final BusinessNumberRequest request) {
String successMessage = signUpService.verifyBusinessNumber(request);
return ResponseEntity.ok(successMessage);
}

@PostMapping("/sign-up/employer")
public ResponseEntity<String> signUpEmployer(@Valid @RequestBody final SignUpEmployerRequest request) {
String successMessage = signUpService.signUpEmployer(request);
return ResponseEntity.status(HttpStatus.CREATED).body(successMessage);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.example.api.account.dto;

import jakarta.validation.constraints.NotBlank;

public record BusinessNumberRequest(
@NotBlank
String businessRegistrationNumber,
@NotBlank
String businessName,
@NotBlank
String representationName,
@NotBlank
String businessOpenDate) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.example.api.account.dto;

import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;


public record BusinessNumberResponse(
@JsonProperty("request_cnt") int requestCount,
@JsonProperty("valid_cnt") int validCount,
@JsonProperty("status_code") String statusCode,
List<Data> data
) {
private record Data(
@JsonProperty("b_no") String businessNumber,
String valid,
@JsonProperty("request_param") RequestParam requestParam,
Status status
) {
}
private record RequestParam(
@JsonProperty("b_no") String businessNumber,
@JsonProperty("start_dt") String startDate,
@JsonProperty("p_nm") String name,
@JsonProperty("b_nm") String businessName
) {
}
private record Status(
@JsonProperty("b_no") String businessNumber,
@JsonProperty("b_stt") String businessStatus,
@JsonProperty("b_stt_cd") String businessStatusCode,
@JsonProperty("tax_type") String taxType,
@JsonProperty("tax_type_cd") String taxTypeCode,
@JsonProperty("end_dt") String endDate,
@JsonProperty("utcc_yn") String utccYn,
@JsonProperty("tax_type_change_dt") String taxTypeChangeDate,
@JsonProperty("invoice_apply_dt") String invoiceApplyDate,
@JsonProperty("rbf_tax_type") String rbfTaxType,
@JsonProperty("rbf_tax_type_cd") String rbfTaxTypeCode
) {
}

public String getValid(){
return data.get(0).valid;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@
import com.example.api.account.entity.Nationality;
import com.example.api.account.entity.UserRole;
import com.example.api.global.config.resolver.ValidEmail;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

public record SignUpRequest(
public record SignUpEmployeeRequest(
@NotBlank
String loginId,
@NotBlank
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.example.api.account.dto;

import com.example.api.account.entity.Location;
import com.example.api.account.entity.Nationality;
import com.example.api.account.entity.UserRole;
import com.example.api.global.config.resolver.ValidEmail;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

public record SignUpEmployerRequest(
@NotBlank
String loginId, // 로그인 id
@NotBlank
String password, // 비밀번호
@ValidEmail
String email, // 이메일
@NotBlank
String businessRegistrationNumber, // 사업자 번호
@NotBlank
String businessName, // 회사명
@NotBlank
String representationName, // 대표명
@NotBlank
String businessOpenDate, // 개업연월일
@NotNull
Location location,
@NotNull
Nationality nationality, // 국적
@NotNull
UserRole role, // 권한
@NotBlank
String phoneNumber // 휴대폰 번호
) {
}
28 changes: 28 additions & 0 deletions src/main/java/com/example/api/account/entity/Location.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.example.api.account.entity;

import jakarta.persistence.*;
import lombok.Getter;

@Entity
@Getter
public class Location {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "LOCATION_UNIQUE_ID")
private Long id;
@Column(name = "LOCATION_ZIPCODE")
private String zipcode;
@Column(name = "LOCATION_ADDRESS")
private String address;
@Column(name = "LOCATION_DETAIL_ADDRESS")
private String detailAddress;

public Location() {
}

public Location(String zipcode, String address, String detailAddress) {
this.zipcode = zipcode;
this.address = address;
this.detailAddress = detailAddress;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.example.api.account.repository;

import com.example.api.domain.Account;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.Optional;

Expand All @@ -10,5 +12,8 @@ public interface AccountRepository extends JpaRepository<Account, Long> {

boolean existsByEmail(String email);

@EntityGraph(attributePaths = "roles")
Optional<Account> findByEmail(String email);

Optional<Account> findUserByLoginId(String loginId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.example.api.account.repository;

import com.example.api.account.entity.Location;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface LocationRepository extends JpaRepository<Location, Long> {
}
Loading
Loading