Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FEAT : 회원, 식당, 미션 CRUD 작성, (미션9, 10) #6

Open
wants to merge 1 commit into
base: 머피
Choose a base branch
from
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
9 changes: 5 additions & 4 deletions 머피_오현배/spring/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,17 @@ 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-validation'
//Swagger
implementation 'org.springdoc:springdoc-openapi-ui:1.6.15'
implementation 'io.springfox:springfox-swagger2:2.9.2'
implementation 'io.springfox:springfox-swagger-ui:2.9.2'

compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('bootBuildImage') {
builder = 'paketobuildpacks/builder-jammy-base:latest'
}

tasks.named('test') {
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing
public class Application {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@ public static <T> ApiResponse<T> of(BaseCode code, T result) {
}

public static <T> ApiResponse<T> onFailure(String code, String message, T data) {
return new ApiResponse<>(true, code, message, data);
return new ApiResponse<>(false, code, message, data);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,17 @@ public enum ErrorStatus implements BaseErrorCode {

TEMP_EXCEPTION(HttpStatus.BAD_REQUEST, "TEMP4001", "이거는 테스트"),

FOOD_CATEGORY_NOT_FOUND(HttpStatus.NOT_FOUND, "FOOD_CATEGORY4001", "음식 카테고리가 없습니다.");

FOOD_CATEGORY_NOT_FOUND(HttpStatus.NOT_FOUND, "FOOD_CATEGORY4001", "음식 카테고리가 없습니다."),

TOWN_NOT_FOUND(HttpStatus.NOT_FOUND, "TOWN4001", "해당 지역이 존재하지 않습니다."),

MISSION_NOT_FOUND(HttpStatus.NOT_FOUND, "MISSION4001", "해당 미션이 존재하지 않습니다."),

RESTAURANT_NOT_FOUND(HttpStatus.NOT_FOUND, "RESTAURANT4001", "해당 식당이 존재하지 않습니다."),

PAGE_NOT_NEGATIVE(HttpStatus.BAD_REQUEST, "PAGE4001", "페이지 번호는 음수일 수 없습니다.");


private final HttpStatus httpStatus;
private final String code;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package umc.spring.apiPayload.exception.handler;

import umc.spring.apiPayload.code.BaseErrorCode;
import umc.spring.apiPayload.exception.GeneralException;

public class FoodCategoryHandler extends GeneralException {

public FoodCategoryHandler(BaseErrorCode code) {
super(code);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package umc.spring.apiPayload.exception.handler;

import umc.spring.apiPayload.code.BaseErrorCode;
import umc.spring.apiPayload.exception.GeneralException;

public class RestaurantHandler extends GeneralException {
public RestaurantHandler(BaseErrorCode code) {
super(code);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package umc.spring.config;


import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI UMCstudyAPI() {
Info info = new Info()
.title("UMC Server WorkBook API")
.description("UMC Server WorkBook API 명세서")
.version("1.0.0");

String jwtSchemeName = "JWT TOKEN";
// API 요청헤더에 인증정보 포함
SecurityRequirement securityRequirement = new SecurityRequirement().addList(jwtSchemeName);
// SecuritySchemes 등록
Components components = new Components()
.addSecuritySchemes(jwtSchemeName, new SecurityScheme()
.name(jwtSchemeName)
.type(SecurityScheme.Type.HTTP) // HTTP 방식
.scheme("bearer")
.bearerFormat("JWT"));

return new OpenAPI()
.addServersItem(new Server().url("/"))
.info(info)
.addSecurityItem(securityRequirement)
.components(components);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package umc.spring.converter;

import umc.spring.domain.Category;
import umc.spring.domain.mapping.MemberCategory;

import java.util.List;
import java.util.stream.Collectors;

public class MemberCategoryConverter {
public static List<MemberCategory> toMemberCategoryList(List<Category> categoryList) {
return categoryList.stream()
.map(category ->
MemberCategory.builder()
.category(category)
.build()
).collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package umc.spring.converter;

import umc.spring.domain.Member;
import umc.spring.domain.enums.Gender;
import umc.spring.web.dto.MemberRequestDTO;
import umc.spring.web.dto.MemberResponseDTO;

import java.time.LocalDateTime;
import java.util.ArrayList;

public class MemberConverter {
public static MemberResponseDTO.JoinResultDTO toJoinResultDTO(Member member) {
return MemberResponseDTO.JoinResultDTO.builder()
.memberID(member.getId())
.createdAt(LocalDateTime.now())
.build();
}

public static Member toMember(MemberRequestDTO.JoinDTO joinDTO) {
Gender gender = null;
switch (joinDTO.getGender()) {
case 1:
gender = Gender.MALE;
break;
case 2:
gender = Gender.FEMALE;
break;
case 3:
gender = Gender.NONE;
break;
}
return Member.builder()
.address(joinDTO.getAddress())
.email(joinDTO.getEmail())
.gender(gender)
.name(joinDTO.getName())
.birth(String.format("%04d-%02d-%02d", joinDTO.getBirthYear(), joinDTO.getBirthMonth(), joinDTO.getBirthDay()))
.memberCategoryList(new ArrayList<>())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package umc.spring.converter;

import org.springframework.data.domain.Page;
import umc.spring.domain.Mission;
import umc.spring.domain.Restaurant;
import umc.spring.domain.mapping.MissionParticipation;
import umc.spring.web.dto.MissionParticipationRequestDTO;
import umc.spring.web.dto.MissionParticipationResponseDTO;
import umc.spring.web.dto.MissionRequestDTO;
import umc.spring.web.dto.MissionResponseDTO;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class MissionConverter {
public static Mission toMission(MissionRequestDTO.RegisterMission registerMissionDTO) {
return Mission.builder()
.deadline(registerMissionDTO.getDeadline())
.description(registerMissionDTO.getDescription())
.reward(registerMissionDTO.getReward())
.missionParticipationList(new ArrayList<>())
.build();
}

public static MissionResponseDTO.RegisterMissionResult toRegisterMissionResult(Mission mission) {
return MissionResponseDTO.RegisterMissionResult
.builder()
.missionId(mission.getId())
.createdAt(LocalDateTime.now())
.build();
}
public static MissionParticipation toMissionParticipation(MissionParticipationRequestDTO.ChallengeMission challengeMissionDTO) {
return MissionParticipation.builder()
.status(challengeMissionDTO.getMissionStatus())
.build();
}

public static MissionParticipationResponseDTO.ChallengeMissionResultDTO toChallengeMissionResultDTO(MissionParticipation missionParticipation) {
return MissionParticipationResponseDTO.ChallengeMissionResultDTO
.builder()
.missionParticipationId(missionParticipation.getId())
.build();
}


public static MissionParticipationResponseDTO.MyMissionDTO toGetMyMissionDTO(MissionParticipation missionParticipation) {
//todo fetch join으로 한번에 가져오게 수정
Mission mission = missionParticipation.getMission();
Restaurant restaurant = mission.getRestaurant();

return MissionParticipationResponseDTO.MyMissionDTO
.builder()
.restaurantName(restaurant.getName())
.restaurantCategoryName(restaurant.getCategory().getName())
.description(mission.getDescription())
.reward(mission.getReward())
.deadline(mission.getDeadline().toLocalDate())
.build();
}

public static MissionParticipationResponseDTO.MyMissionListDTO toGetMyMissionListDTO(Page<MissionParticipation> missionParticipationList) {
List<MissionParticipationResponseDTO.MyMissionDTO> missionList = missionParticipationList.stream()
.map(MissionConverter::toGetMyMissionDTO).collect(Collectors.toList());

return MissionParticipationResponseDTO.MyMissionListDTO
.builder()
.missionList(missionList)
.isFirst(missionParticipationList.isFirst())
.isLast(missionParticipationList.isLast())
.totalPage(missionParticipationList.getTotalPages())
.totalElements(missionParticipationList.getTotalElements())
.listSize(missionList.size())
.build();
}

public static MissionResponseDTO.MissionPreviewDTO missionPreviewDTO(Mission mission) {
return MissionResponseDTO.MissionPreviewDTO.builder()
.restaurantName(mission.getRestaurant().getName())
.restaurantCategoryName(mission.getRestaurant().getCategory().getName())
.description(mission.getDescription())
.reward(mission.getReward())
.createdAt(mission.getCreatedAt().toLocalDate())
.build();
}

public static MissionResponseDTO.MissionPreviewListDTO missionPreviewListDTO(Page<Mission> missionList) {
List<MissionResponseDTO.MissionPreviewDTO> missionPreviewListDTO = missionList.stream()
.map(MissionConverter::missionPreviewDTO)
.collect(Collectors.toList());

return MissionResponseDTO.MissionPreviewListDTO
.builder()
.isFirst(missionList.isFirst())
.isLast(missionList.isLast())
.totalPage(missionList.getTotalPages())
.totalElements(missionList.getTotalElements())
.listSize(missionPreviewListDTO.size())
.missionList(missionPreviewListDTO)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package umc.spring.converter;

import umc.spring.domain.Category;
import umc.spring.domain.Restaurant;
import umc.spring.domain.Town;
import umc.spring.web.dto.RestaurantRequestDTO;
import umc.spring.web.dto.RestaurantResponseDTO;

import java.time.LocalDateTime;
import java.util.ArrayList;

public class RestaurantConverter {
public static RestaurantResponseDTO.RegisterResultDTO toRegisterResultDTO(Restaurant restaurant) {
return RestaurantResponseDTO.RegisterResultDTO.builder()
.restaurantId(restaurant.getId())
.name(restaurant.getName())
.createdAt(LocalDateTime.now())
.build();
}

public static Restaurant toRestaurant(RestaurantRequestDTO.RegisterDTO registerDTO, Category category, Town town) {
return Restaurant.builder()
.name(registerDTO.getName())
.category(category)
.town(town)
.address(registerDTO.getAddress())
.missionList(new ArrayList<>())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package umc.spring.converter;

import org.springframework.data.domain.Page;
import umc.spring.domain.Review;
import umc.spring.web.dto.ReviewRequestDTO;
import umc.spring.web.dto.ReviewResponseDTO;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

public class ReviewConverter {
public static ReviewResponseDTO.RegisterReviewResult toRegisterReviewResult (Review review) {
return ReviewResponseDTO.RegisterReviewResult
.builder()
.reviewId(review.getId())
.createdAt(LocalDateTime.now())
.build();
}

public static Review toReview(ReviewRequestDTO.WriteReviewDTO reviewDTO) {
return Review
.builder()
.description(reviewDTO.getDescription())
.grade(reviewDTO.getGrade())
.build();
}

public static ReviewResponseDTO.ReviewPreviewDTO reviewPreviewDTO(Review review) {
return ReviewResponseDTO.ReviewPreviewDTO.builder()
.ownerNickname(review.getMember().getName())
.grade(review.getGrade())
.createdAt(review.getCreatedAt().toLocalDate())
.description(review.getDescription())
.build();
}

public static ReviewResponseDTO.ReviewPreviewListDTO reviewPreviewListDTO(Page<Review> reviewList) {
List<ReviewResponseDTO.ReviewPreviewDTO> reviewPreviewListDTO = reviewList.stream()
.map(ReviewConverter::reviewPreviewDTO)
.collect(Collectors.toList());

return ReviewResponseDTO.ReviewPreviewListDTO
.builder()
.isFirst(reviewList.isFirst())
.isLast(reviewList.isLast())
.totalPage(reviewList.getTotalPages())
.totalElements(reviewList.getTotalElements())
.listSize(reviewPreviewListDTO.size())
.reviewList(reviewPreviewListDTO)
.build();
}
}
Loading