Skip to content
Merged
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 build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,10 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.13'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-api:2.8.13'

implementation 'org.springframework.boot:spring-boot-starter-validation'
// QueryDSL : OpenFeign
implementation "io.github.openfeign.querydsl:querydsl-jpa:7.0"
implementation "io.github.openfeign.querydsl:querydsl-core:7.0"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.example.umc_9th.domain.converter;

import com.example.umc_9th.domain.mission.dto.res.MissionResponseDTO;
import com.example.umc_9th.domain.mission.entity.Mission;
import com.example.umc_9th.domain.mission.mapping.UserMission;

public class MissionConverter {

public static MissionResponseDTO.ChallengeMissionResultDTO toChallengeMissionResultDTO(
UserMission userMission
) {
Mission mission = userMission.getMission();

return MissionResponseDTO.ChallengeMissionResultDTO.builder()
.userMissionId(userMission.getId())
.missionId(mission.getId())
.missionTitle(mission.getTitle())
.missionDescription(mission.getDescription())
.storeName(mission.getStore().getName())
.points(mission.getPoints())
.status(userMission.getStatus())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
package com.example.umc_9th.domain.store.mapping;
package com.example.umc_9th.domain.food.entity;


import com.example.umc_9th.domain.store.Store;
import com.example.umc_9th.domain.store.entity.Store;
import com.example.umc_9th.grobal.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

import java.util.List;

@Entity
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class FoodCategory {
public class FoodCategory extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.example.umc_9th.domain.food.entity;

import com.example.umc_9th.domain.member.entity.Member;
import com.example.umc_9th.grobal.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class MemberFood extends BaseEntity {

@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 = "food_category_id")
private FoodCategory foodCategory;


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.example.umc_9th.domain.food.exception;

import com.example.umc_9th.grobal.apiPayload.code.BaseErrorCode;
import com.example.umc_9th.grobal.apiPayload.exception.GeneralException;


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

import com.example.umc_9th.grobal.apiPayload.code.BaseErrorCode;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.http.HttpStatus;

@Getter
@AllArgsConstructor
public enum FoodErrorCode implements BaseErrorCode {

NOT_FOUND(HttpStatus.NOT_FOUND,
"FOOD404_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,10 @@
package com.example.umc_9th.domain.food.repository;

import com.example.umc_9th.domain.food.entity.FoodCategory;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface FoodRepository extends JpaRepository<FoodCategory, Long> {
List<FoodCategory> findAllByIdIn(List<Long> ids);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.example.umc_9th.domain.food.repository;

import com.example.umc_9th.domain.food.entity.MemberFood;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MemberFoodRepository extends JpaRepository<MemberFood, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.example.umc_9th.domain.member.controller;

import com.example.umc_9th.domain.member.dto.req.MemberReqDTO;
import com.example.umc_9th.domain.member.dto.res.MemberResDTO;
import com.example.umc_9th.domain.member.exception.code.MemberSuccessCode;
import com.example.umc_9th.domain.member.service.MemberService;
import com.example.umc_9th.grobal.apiPayload.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
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 MemberService memberService;

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

//로그인
@PostMapping("/login")
public ApiResponse<MemberResDTO.LoginDTO> login(
@RequestBody MemberReqDTO.LoginDTO dto
) {
return ApiResponse.success(MemberSuccessCode.FOUND, memberService.login(dto));
}

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

import com.example.umc_9th.domain.member.dto.req.MemberReqDTO;
import com.example.umc_9th.domain.member.dto.res.MemberResDTO;
import com.example.umc_9th.domain.member.entity.Member;

public class MemberConverter {

public static Member toMember(MemberReqDTO.JoinDTO dto) {
return Member.builder()
.email(dto.email())
.password(dto.password())
.phoneNumber(dto.phoneNumber())
.name(dto.name())
.gender(dto.gender())
.birthDate(dto.birthDate())
.address(dto.address())
.status(dto.status())
.points(0)
.build();
}

public static MemberResDTO.JoinDTO toJoinDTO(Member member) {
return MemberResDTO.JoinDTO.builder()
.memberId(member.getMemberId())
.createAt(member.getCreatedAt())
.build();
}
}



Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.example.umc_9th.domain.member.dto.req;

import com.example.umc_9th.domain.member.Gender;

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

public class MemberReqDTO {

public record JoinDTO(
String email, // 추가
String password, // 추가
String phoneNumber,
String name,
Gender gender,
LocalDate birthDate,
String address,
boolean status,
// 선호 음식 카테고리
List<Long>preferCategory
){}

public record LoginDTO(
String email,
String password
){}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.example.umc_9th.domain.member.dto.res;

import lombok.Builder;

import java.time.LocalDateTime;

public class MemberResDTO {

@Builder
public record JoinDTO(
Long memberId,
LocalDateTime createAt
){}

@Builder
public record LoginDTO(
Long memberId,
String accessToken,
String refreshToken,
LocalDateTime loginAt
){}

}
30 changes: 12 additions & 18 deletions src/main/java/com/example/umc_9th/domain/member/entity/Member.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package com.example.umc_9th.domain.member.entity;

import com.example.umc_9th.domain.food.entity.MemberFood;
import com.example.umc_9th.domain.member.Gender;
import com.example.umc_9th.grobal.BaseEntity;
import jakarta.persistence.*;
import lombok.*;


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

@Entity
@Getter
Expand Down Expand Up @@ -46,26 +49,17 @@ public class Member extends BaseEntity {
@Column(nullable = false, length = 255)
private String password; // 비밀번호 (VARCHAR(255))

@Column(length = 255)
String accessToken;

@Column(length = 255)
String refreshToken;

// 회원의 선호 카테고리 목록 (1:N 관계)
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL)
private List<MemberFood> memberPreferList = new ArrayList<>();


//양방향 고려

// @OneToOne(fetch = FetchType.LAZY) // 동의 테이블과 1:1 관계 매핑
// @JoinColumn(name = "agree_id")
// private Agree agree;
//
// @OneToMany(fetch = FetchType.LAZY) // 리뷰 테이블 N:1 관계 매핑
// @JoinColumn(name = "review_id")
// private List<Review> reviews;
//
// @OneToMany(fetch = FetchType.LAZY) // 미션 테이블 N:1 관계 매핑
// @JoinColumn(name = "userMission_id")
// private List<UserMission> userMissions ;
//
////Lazy : 프록시 객체로 채워두고 실제로 그 연관된 엔티티의 데이터를 사용하는 시점
// @OneToOne(fetch = FetchType.LAZY) // 지역 테이블과 1:1 관계 매핑
// @JoinColumn(name = "region_id")
// private Region Region;



Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.umc_9th.domain.member.exception;

import com.example.umc_9th.grobal.apiPayload.code.BaseErrorCode;
import com.example.umc_9th.grobal.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,21 @@
package com.example.umc_9th.domain.member.exception.code;

import com.example.umc_9th.grobal.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,22 @@
package com.example.umc_9th.domain.member.exception.code;

import com.example.umc_9th.grobal.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
Expand Up @@ -14,5 +14,6 @@ public interface MemberRepository extends JpaRepository<Member, Long> {
Optional<Member> findById(Long id);


Optional<Member> findByEmail(String email);

}
Loading