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
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.demo.domain.food.exception;

import com.example.demo.global.apiPayload.code.BaseErrorCode;
import com.example.demo.global.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,16 @@
package com.example.demo.domain.food.exception.code;

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

@Getter
@AllArgsConstructor
public enum FoodErrorCode implements BaseErrorCode {
Food_NOT_FOUND(HttpStatus.NOT_FOUND, "FOOD404","이거는 푸드 테스트");
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,8 @@
package com.example.demo.domain.food.repository;

import com.example.demo.domain.food.entity.Food;
import org.springframework.data.jpa.repository.JpaRepository;

public interface FoodRepository extends JpaRepository<Food, Long> {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.example.demo.domain.member.controller;

import com.example.demo.domain.member.dto.req.MemberReqDTO;
import com.example.demo.domain.member.dto.res.MemberResDTO;
import com.example.demo.domain.member.exception.code.MemberSuccessCode;
import com.example.demo.domain.member.service.command.MemberCommandService;
import com.example.demo.global.apiPayload.ApiResponse;
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 MemberReqDTO.JoinDTO dto
){
return ApiResponse.onSuccess(MemberSuccessCode.FOUND, memberCommandService.signup(dto));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.example.demo.domain.member.converter;

import com.example.demo.domain.member.dto.req.MemberReqDTO;
import com.example.demo.domain.member.dto.res.MemberResDTO;
import com.example.demo.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())
.detailAddress(dto.specAddress())
.gender(dto.gender())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.example.demo.domain.member.dto.req;

import com.example.demo.domain.member.enums.Address;
import com.example.demo.domain.member.enums.Gender;

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

public class MemberReqDTO {



public record JoinDTO(
String name,
Gender gender,
LocalDate birth,
Address address,
String specAddress,
List<Long> preferCategory
){}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.example.demo.domain.member.dto.res;

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
@@ -0,0 +1,10 @@
package com.example.demo.domain.member.exception;

import com.example.demo.global.apiPayload.code.BaseErrorCode;
import com.example.demo.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,18 @@
package com.example.demo.domain.member.exception.code;

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

import com.example.demo.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,8 @@
package com.example.demo.domain.member.repository;

import com.example.demo.domain.member.entity.mapping.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,11 @@
package com.example.demo.domain.member.service.command;

import com.example.demo.domain.member.dto.req.MemberReqDTO;
import com.example.demo.domain.member.dto.res.MemberResDTO;

public interface MemberCommandService {

public MemberResDTO.JoinDTO signup(
MemberReqDTO.JoinDTO dto
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package com.example.demo.domain.member.service.command;

import com.example.demo.domain.food.entity.Food;
import com.example.demo.domain.food.exception.FoodException;
import com.example.demo.domain.food.exception.code.FoodErrorCode;
import com.example.demo.domain.food.repository.FoodRepository;
import com.example.demo.domain.member.converter.MemberConverter;
import com.example.demo.domain.member.dto.req.MemberReqDTO;
import com.example.demo.domain.member.dto.res.MemberResDTO;
import com.example.demo.domain.member.entity.Member;
import com.example.demo.domain.member.entity.mapping.MemberFood;
import com.example.demo.domain.member.repository.MemberFoodRepository;
import com.example.demo.domain.member.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
@RequiredArgsConstructor
public class MemberCommandServiceImpl implements MemberCommandService {

private final MemberRepository memberRepository;
private final MemberFoodRepository memberFoodRepository;
private final FoodRepository foodRepository;

// 회원가입
@Override
@Transactional
public MemberResDTO.JoinDTO signup(
MemberReqDTO.JoinDTO dto
) {
// 사용자 생성
Member member = MemberConverter.toMember(dto);
// DB 적용
memberRepository.save(member);

// 선호 음식 존재 여부 확인
if (dto.preferCategory().size() > 1) {
List<MemberFood> memberFoodList = new ArrayList<>();

// 선호 음식 ID별 조회
for (Long id : dto.preferCategory()) {

// 음식 존재 여부 검증
Food food = foodRepository.findById(id)
.orElseThrow(() -> new FoodException(FoodErrorCode.Food_NOT_FOUND));

MemberFood memberFood = MemberFood.builder()
.member(member)
.food(food)
.build();

memberFoodList.add(memberFood);
}

//DB 적용
memberFoodRepository.saveAll(memberFoodList);
}
return MemberConverter.toJoinDTO(member);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.example.demo.domain.member.service.query;

public interface MemberQueryService {
void checkFlag(Long flag);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.example.demo.domain.member.service.query;

import com.example.demo.domain.member.exception.MemberException;
import com.example.demo.domain.member.exception.code.MemberErrorCode;
import com.example.demo.domain.test.exception.TestException;
import com.example.demo.domain.test.exception.code.TestErrorCode;

public class MemberQueryServiceImpl implements MemberQueryService {
@Override
public void checkFlag(Long flag) {
if(flag==1){
throw new MemberException(MemberErrorCode.NOT_FOUND);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.example.demo.domain.mission.controller;


import com.example.demo.domain.member.entity.mapping.MemberMission;
import com.example.demo.domain.mission.converter.MemberMissionConverter;
import com.example.demo.domain.mission.dto.req.MissionReqDTO;
import com.example.demo.domain.mission.dto.res.MissionResDTO;
import com.example.demo.domain.mission.service.command.MissionCommandService;
import com.example.demo.global.apiPayload.ApiResponse;
import com.example.demo.global.apiPayload.code.GeneralSuccessCode;
import lombok.RequiredArgsConstructor;
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;

@RestController
@RequiredArgsConstructor
@RequestMapping("/missions")
public class MissionController {

private final MissionCommandService missionCommandService;

// 미션 목록에 추가 API
@PostMapping("/add")
public ApiResponse<MissionResDTO.MissionJoinResultDto> joinMission(
@RequestBody MissionReqDTO.MissionJoinDto request) {

MemberMission memberMission = missionCommandService.joinMission(request);
GeneralSuccessCode code = GeneralSuccessCode.OK;
return ApiResponse.onSuccess(code,MemberMissionConverter.toJoinResultDto(memberMission));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.example.demo.domain.mission.converter;

import com.example.demo.domain.member.entity.Member;
import com.example.demo.domain.member.entity.mapping.MemberMission;
import com.example.demo.domain.mission.dto.res.MissionResDTO;
import com.example.demo.domain.mission.entity.Mission;

import java.time.LocalDateTime;

public class MemberMissionConverter {

public static MemberMission toEntity(Member member, Mission mission) {
return MemberMission.builder()
.member(member)
.mission(mission)
.isComplete(false) // 초기엔 성공 안함
.build();
}

public static MissionResDTO.MissionJoinResultDto toJoinResultDto(MemberMission memberMission) {
return MissionResDTO.MissionJoinResultDto.builder()
.memberMissionId(memberMission.getId())
.createdAt(LocalDateTime.now())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.example.demo.domain.mission.dto.req;

import lombok.Getter;
import org.antlr.v4.runtime.misc.NotNull;

public class MissionReqDTO {

@Getter
public static class MissionJoinDto {
@NotNull
private Long memberId;
@NotNull
private Long missionId;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.example.demo.domain.mission.dto.res;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

public class MissionResDTO {

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class MissionJoinResultDto {
private Long memberMissionId; // 생성된 매핑 ID
private LocalDateTime createdAt;
}
}
Loading