Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…o refactor/#392
  • Loading branch information
LJH098 committed Jul 17, 2024
1 parent f97145c commit 2b35566
Show file tree
Hide file tree
Showing 12 changed files with 186 additions and 146 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/devWorkflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ name: testAndDeploy_dev

on:
pull_request:
branches:
- develop
types:
- closed

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/prodWorkflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ jobs:
key: ${{ secrets.SSH_KEY }}
script: |
cd backend-deploy/BE/exceed
sudo docker-compose -f docker-compose-prod.yml down
sudo docker compose down
sudo docker pull ${{ secrets.DOCKER_HUB_USER_NAME }}/gaebaljip-prod:latest
sudo docker-compose --env-file .env.prod -f docker-compose-prod.yml up -d
sudo docker image prune -a -f
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,20 @@

import java.util.List;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;

import com.gaebaljip.exceed.application.domain.meal.MealType;
import com.gaebaljip.exceed.common.ValidationMessage;
import com.gaebaljip.exceed.common.annotation.Enum;
import com.gaebaljip.exceed.common.dto.EatMealFoodDTO;

import lombok.Builder;

public record EatMealRequest(
List<EatMealFoodDTO> eatMealFoodDTOS,
@Valid List<EatMealFoodDTO> eatMealFoodDTOS,
@Enum(enumClass = MealType.class) String mealType,
String fileName) {
@NotBlank(message = "파일명을 " + ValidationMessage.NOT_BLANK) String fileName) {
@Builder
public EatMealRequest {}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,47 @@
package com.gaebaljip.exceed.application.port.in.meal;

import java.util.List;

import com.gaebaljip.exceed.adapter.in.meal.request.EatMealRequest;
import com.gaebaljip.exceed.application.domain.meal.MealType;
import com.gaebaljip.exceed.common.dto.EatMealFoodDTO;
import com.gaebaljip.exceed.adapter.in.meal.request.EatMealRequest;

import com.gaebaljip.exceed.common.exception.meal.InvalidGException;
import com.gaebaljip.exceed.common.exception.meal.InvalidMultipleAndGException;
import com.gaebaljip.exceed.common.exception.meal.InvalidMultipleException;
import lombok.Builder;

import java.util.List;

@Builder
public record EatMealCommand(
List<EatMealFoodDTO> eatMealFoodDTOS, Long memberId, MealType mealType) {

public EatMealCommand {
eatMealFoodDTOS.forEach(
dto -> {
if ((dto.multiple() != null && dto.g() != null)
|| (dto.multiple() == null && dto.g() == null)) {
throw InvalidMultipleAndGException.EXCEPTION;
}
if (dto.multiple() != null) {
validateMultiple(dto.multiple());
}
if (dto.g() != null) {
validateG(dto.g());
}
});
}

private void validateMultiple(double multiple) {
if (multiple <= 0 || multiple > 100) {
throw InvalidMultipleException.EXECPTION;
}
}

private void validateG(int g) {
if (g <= 0) {
throw InvalidGException.EXCEPTION;
}
}

public static EatMealCommand of(EatMealRequest request, Long memberId) {
return EatMealCommand.builder()
.eatMealFoodDTOS(request.eatMealFoodDTOS())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
import com.gaebaljip.exceed.application.port.out.meal.MealFoodPort;
import com.gaebaljip.exceed.application.port.out.meal.MealPort;
import com.gaebaljip.exceed.application.port.out.member.MemberPort;
import com.gaebaljip.exceed.common.exception.meal.InvalidGException;
import com.gaebaljip.exceed.common.exception.meal.InvalidMultipleAndGException;
import com.gaebaljip.exceed.common.exception.meal.InvalidMultipleException;

import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -47,7 +45,6 @@ public class EatMealService implements EatMealUsecase {
@Override
@Transactional
public Long execute(EatMealCommand command) {
validateGAndMultiple(command);
List<FoodEntity> foodEntities =
foodPort.queryAllEntities(
command.eatMealFoodDTOS().stream()
Expand All @@ -62,34 +59,4 @@ public Long execute(EatMealCommand command) {
foodEntities, mealEntity, command.eatMealFoodDTOS()));
return mealEntity.getId();
}

private void validateGAndMultiple(EatMealCommand command) {
command.eatMealFoodDTOS()
.forEach(
dto -> {
if ((dto.multiple() != null && dto.g() != null)
|| (dto.multiple() == null && dto.g() == null)) {
throw InvalidMultipleAndGException.EXCEPTION;
}
if (dto.multiple() != null) {
validateMultiple(dto.multiple());
}
if (dto.g() != null) {
validateG(dto.g());
}
});
}

private void validateMultiple(double multiple) {
if (multiple <= 0 || multiple > 100) {
throw InvalidMultipleException.EXECPTION;
}
}

private void validateG(int g) {
if (g <= 0) {
throw InvalidGException.EXCEPTION;
}
}
// todo EatMealCommand에 옮기기
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ public class ValidationMessage {
public static final String NOT_NULL = "입력해 주세요";
public static final String NOT_BLANK = "입력해 주세요";
public static final String MIN_0 = "0이상 입력해 주세요";

public static final String ENUM_SUFFIX = "는 올바르지 않은 값입니다.";
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import com.gaebaljip.exceed.common.ValidationMessage;

public class EnumValidator implements ConstraintValidator<Enum, String> {

private Enum annotation;
Expand All @@ -25,7 +27,7 @@ public boolean isValid(String value, ConstraintValidatorContext context) {
}
}
}
context.buildConstraintViolationWithTemplate(value + "는 올바르지 않은 값입니다.")
context.buildConstraintViolationWithTemplate(value + ValidationMessage.ENUM_SUFFIX)
.addConstraintViolation()
.disableDefaultConstraintViolation();
return result;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
package com.gaebaljip.exceed.common.dto;

import javax.validation.constraints.NotNull;

import com.gaebaljip.exceed.common.ValidationMessage;

import lombok.Builder;

public record EatMealFoodDTO(Long foodId, Double multiple, Integer g) {
public record EatMealFoodDTO(
@NotNull(message = "음식PK를 " + ValidationMessage.NOT_NULL) Long foodId,
Double multiple,
Integer g) {

@Builder
public EatMealFoodDTO {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import java.util.List;
Expand All @@ -16,6 +17,7 @@
import com.gaebaljip.exceed.application.port.in.meal.EatMealUsecase;
import com.gaebaljip.exceed.application.port.in.meal.UploadImageUsecase;
import com.gaebaljip.exceed.common.ControllerTest;
import com.gaebaljip.exceed.common.ValidationMessage;
import com.gaebaljip.exceed.common.WithMockUser;
import com.gaebaljip.exceed.common.dto.EatMealFoodDTO;
import com.gaebaljip.exceed.adapter.in.meal.request.EatMealRequest;
Expand Down Expand Up @@ -48,4 +50,67 @@ void when_eatMeal_gNotNullAndMultipleNull_expected_returnPresignedUrl() throws E
// then
resultActions.andExpect(status().isCreated());
}

@Test
@WithMockUser
void when_eatMeal_withEmptyFileName_thenBadRequest() throws Exception {
// given
EatMealFoodDTO eatMealFoodDTO = new EatMealFoodDTO(1L, null, 100);
EatMealRequest request = new EatMealRequest(List.of(eatMealFoodDTO), "LUNCH", "");

// when
ResultActions resultActions =
mockMvc.perform(
post("/v1/meal")
.content(om.writeValueAsString(request))
.contentType(MediaType.APPLICATION_JSON));

// then
resultActions
.andExpect(status().isBadRequest())
.andExpect(jsonPath("$.error.reason").value("파일명을 " + ValidationMessage.NOT_BLANK));
}

@Test
@WithMockUser
void when_eatMeal_withInvalidMealType_thenBadRequest() throws Exception {
// given
EatMealFoodDTO eatMealFoodDTO = new EatMealFoodDTO(1L, null, 100);
EatMealRequest request =
new EatMealRequest(List.of(eatMealFoodDTO), "INVALID_MEAL_TYPE", "test.jpeg");

// when
ResultActions resultActions =
mockMvc.perform(
post("/v1/meal")
.content(om.writeValueAsString(request))
.contentType(MediaType.APPLICATION_JSON));

// then
resultActions
.andExpect(status().isBadRequest())
.andExpect(
jsonPath("$.error.reason")
.value("INVALID_MEAL_TYPE" + ValidationMessage.ENUM_SUFFIX));
}

@Test
@WithMockUser
void when_eatMeal_withNullFoodId_thenBadRequest() throws Exception {
// given
EatMealFoodDTO eatMealFoodDTO = new EatMealFoodDTO(null, null, 100);
EatMealRequest request = new EatMealRequest(List.of(eatMealFoodDTO), "LUNCH", "test.jpeg");

// when
ResultActions resultActions =
mockMvc.perform(
post("/v1/meal")
.content(om.writeValueAsString(request))
.contentType(MediaType.APPLICATION_JSON));

// then
resultActions
.andExpect(status().isBadRequest())
.andExpect(jsonPath("$.error.reason").value("음식PK를 " + ValidationMessage.NOT_NULL));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import com.gaebaljip.exceed.common.dto.TargetMealDTO;

@WebMvcTest(GetMealController.class)
class SpecificMealDTOControllerTest extends ControllerTest {
class SpecificMealControllerTest extends ControllerTest {

@MockBean private GetMaintainMealUsecase getMaintainMealUsecase;

Expand Down

This file was deleted.

Loading

0 comments on commit 2b35566

Please sign in to comment.