Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions umc9th/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,6 @@ out/

### VS Code ###
.vscode/

# Spring Boot application configuration
application.yml
33 changes: 33 additions & 0 deletions umc9th/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,41 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

// QueryDSL : OpenFeign
implementation "io.github.openfeign.querydsl:querydsl-jpa:7.0"
implementation "io.github.openfeign.querydsl:querydsl-core:7.0"
annotationProcessor "io.github.openfeign.querydsl:querydsl-apt:7.0:jpa"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"

// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.13'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-api:2.8.13'

// Validation
implementation 'org.springframework.boot:spring-boot-starter-validation'
}

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

// QueryDSL 관련 설정
// generated/querydsl 폴더 생성 & 삽입
def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile

// 소스 세트에 생성 경로 추가 (구체적인 경로 지정)
sourceSets {
main.java.srcDirs += [ querydslDir ]
}

// 컴파일 시 생성 경로 지정
tasks.withType(JavaCompile).configureEach {
options.generatedSourceOutputDirectory.set(querydslDir)
}

// clean 태스크에 생성 폴더 삭제 로직 추가
clean.doLast {
file(querydslDir).deleteDir()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.example.umc9th.domain.member.controller;

import com.example.umc9th.domain.member.dto.MemberReqDTO;
import com.example.umc9th.domain.member.dto.MemberResDTO;
import com.example.umc9th.domain.member.exception.code.MemberSuccessCode;
import com.example.umc9th.domain.member.service.command.MemberCommandService;
import com.example.umc9th.global.apiPayload.ApiResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class MemberController {

private final MemberCommandService memberCommandService;

// 회원가입
@PostMapping("/sign-up")
public ApiResponse<MemberResDTO.JoinDTO> signUp(
@RequestBody @Valid MemberReqDTO.JoinDTO dto
){
return ApiResponse.onSuccess(MemberSuccessCode.FOUND, memberCommandService.signup(dto));
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.example.umc9th.domain.member.converter;

import com.example.umc9th.domain.member.dto.MemberReqDTO;
import com.example.umc9th.domain.member.dto.MemberResDTO;
import com.example.umc9th.domain.member.entity.Member;

public class MemberConverter {

// Entity -> DTO
public static MemberResDTO.JoinDTO toJoinDTO(
Member member
){
return MemberResDTO.JoinDTO.builder()
.memberId(member.getId())
.createAt(member.getCreatedAt())
.build();
}

// DTO -> Entity
public static Member toMember(MemberReqDTO.JoinDTO dto) {
return Member.builder()
.name(dto.name())
.birth(dto.birth())
.address(dto.address())
.gender(dto.gender())
.email(dto.email())
.password(dto.password())
.phone(dto.phone())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.example.umc9th.domain.member.dto;

import com.example.umc9th.domain.member.enums.Gender;
import com.example.umc9th.global.annotation.ExistFoods;

import java.time.LocalDate;
import java.util.List;

public class MemberReqDTO {

public record JoinDTO(
String name,
Gender gender,
LocalDate birth,
String address,
String email,
String password,
String phone,
@ExistFoods
List<Long> preferCategory
){}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.example.umc9th.domain.member.dto;

import lombok.Builder;

import java.time.LocalDateTime;

public class MemberResDTO {

@Builder
public record JoinDTO(
Long memberId,
LocalDateTime createAt
){}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ public class Interest {
@Enumerated(EnumType.STRING)
private FoodName name;

//연관 관계
@OneToMany(mappedBy = "interest")
private List<MemberInterest> memberInterests = new ArrayList<>();
// //연관 관계
// @OneToMany(mappedBy = "interest")
// private List<MemberInterest> memberInterests = new ArrayList<>();


}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.example.umc9th.domain.member.enums.Gender;
import com.example.umc9th.global.entity.BaseEntity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.*;
import java.time.LocalDate;
Expand Down Expand Up @@ -47,11 +48,13 @@ public class Member extends BaseEntity {
@Column(name = "status")
private boolean status;

//연관 관계
@OneToMany(mappedBy = "member")
private List<MemberInterest> memberInterests = new ArrayList<>();
// //연관 관계
// @OneToMany(mappedBy = "member")
// @JsonIgnore
// private List<MemberInterest> memberInterests = new ArrayList<>();

@OneToMany(mappedBy = "member")
private List<MemberTerm> memberTerms = new ArrayList<>();
// @OneToMany(mappedBy = "member")
// @JsonIgnore
// private List<MemberTerm> memberTerms = new ArrayList<>();

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package com.example.umc9th.domain.member.enums;

public enum FoodName {
A, B, C, D, E, F;
KOREAN, JAPAN, CHINA;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.umc9th.domain.member.exception;

import com.example.umc9th.global.apiPayload.code.BaseErrorCode;
import com.example.umc9th.global.apiPayload.exception.GeneralException;

public class InterestException extends GeneralException {
public InterestException(BaseErrorCode code) {
super(code);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.umc9th.domain.member.exception;

import com.example.umc9th.global.apiPayload.code.BaseErrorCode;
import com.example.umc9th.global.apiPayload.exception.GeneralException;

public class MemberException extends GeneralException {
public MemberException(BaseErrorCode code) {
super(code);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.example.umc9th.domain.member.exception.code;

import com.example.umc9th.global.apiPayload.code.BaseErrorCode;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.http.HttpStatus;

@Getter
@AllArgsConstructor
public enum InterestErrorCode implements BaseErrorCode {

NOT_FOUND(HttpStatus.NOT_FOUND,
"INTERSET404_1",
"해당 관심음식을 찾지 못했습니다."),
;

private final HttpStatus status;
private final String code;
private final String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.example.umc9th.domain.member.exception.code;

import com.example.umc9th.global.apiPayload.code.BaseSuccessCode;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.http.HttpStatus;

@Getter
@AllArgsConstructor
public enum InterestSuccessCode implements BaseSuccessCode {

FOUND(HttpStatus.OK,
"INTEREST200_1",
"성공적으로 관심음식를 조회했습니다."),
;

private final HttpStatus status;
private final String code;
private final String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.example.umc9th.domain.member.exception.code;

import com.example.umc9th.global.apiPayload.code.BaseErrorCode;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.http.HttpStatus;

@Getter
@AllArgsConstructor
public enum MemberErrorCode implements BaseErrorCode {

NOT_FOUND(HttpStatus.NOT_FOUND,
"MEMBER404_1",
"해당 사용자를 찾지 못했습니다."),
;

private final HttpStatus status;
private final String code;
private final String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.example.umc9th.domain.member.exception.code;

import com.example.umc9th.global.apiPayload.code.BaseSuccessCode;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.http.HttpStatus;

@Getter
@AllArgsConstructor
public enum MemberSuccessCode implements BaseSuccessCode {

FOUND(HttpStatus.OK,
"MEMBER200_1",
"성공적으로 사용자를 조회했습니다."),
;

private final HttpStatus status;
private final String code;
private final String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.example.umc9th.domain.member.repository;

import com.example.umc9th.domain.member.entity.Interest;
import org.springframework.data.jpa.repository.JpaRepository;

public interface InterestRepository extends JpaRepository<Interest, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.example.umc9th.domain.member.repository;

import com.example.umc9th.domain.member.entity.MemberInterest;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MemberInterestRepository extends JpaRepository<MemberInterest, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.example.umc9th.domain.member.repository;

import com.example.umc9th.domain.member.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;

public interface MemberRepository extends JpaRepository<Member, Long> {
Optional<Member> findByIdAndStatusIsTrue(Long memberId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.umc9th.domain.member.service.command;

import com.example.umc9th.domain.member.dto.MemberReqDTO;
import com.example.umc9th.domain.member.dto.MemberResDTO;

public interface MemberCommandService {
public MemberResDTO.JoinDTO signup(
MemberReqDTO.JoinDTO dto
);
}
Loading