Skip to content

Commit

Permalink
골 추가 로직 구현 및 테스트 (#4)
Browse files Browse the repository at this point in the history
* feat: 골 도메인 및 레포지토리 추가

* feat: 골 추가 기능 로직 구현

* feat: 골 시작일, 종료일 타입 포맷 로직 구현

* test: 골 추가 로직 테스트 성공

* feat: 전역 예외처리 객체 추가

* refactor: 빌더 및 개행 수정

* refactor: 객체 생성자 빌더로 수정

* feat: 404, 500 페이지에 대한 예외처리

* feat: 골 팀 도메인 클래스 생성 및 연관관계 매핑

* feat: 골 팀 생성 로직

* feat: return 개행 추가

* feat: 골 팀에 골 정보 저장하는 로직

* feat: 골에 골 팀 정보 업데이트

* refactor: 사용하지 않는 패키지 삭제

* test: 골 팀 등록 포함해 골 추가 테스트 통과

* feat: 골 등록시 발생하는 예외사항 처리

* feat: 사용하지 않는 패키지 정리

* chore: 테스트에 사용할 lombok 의존성 추가

* fix: 골 등록 시 시작날짜, 종료날짜, 골 날짜 수가 null값으로 들어가는 오류 수정

* feat: 요청 dto 및 응답 dto 생성

* feat: 요청 dto 및 응답 dto 생성

* refactor: goal 데이터 구조 변경에 따른 builder 구조 변경

* feat: 골 생성 요청 dto 및 응답 dto 생성

* refactor: 컨벤션 수정

* feat: rest docs 위한 util 추가

* feat: 골 추가

* feat: 골 추가 컨트롤러 테스트 통과

* feat: 골 추가 시 필요한 유저 정보 추가

* feat: 발생할 수 있는 예외 처리

* rename: 골 생성 성공 테스트명 변경

* feat: 골 팀 리스트 유효성 검증 추가

* refactor: 필요하지 않은 예외 던지기 삭제

* fix: 예외처리시 조건 수정

* test: 골 생성시 예외처리에 대한 실패 테스트

* feat: 골 팀 레포지토리 생성 및 저장하는 코드 추가

* refactor: 골 팀 cascadeType 변경

* refactor: controller와 client 사이의 dto에 JsonProperty 추가

* chore: java test fixtures 추가

* feat: 생성자 from 메서드 추가

* feat: goal 검색 결과 컨트롤러로 전달하는 dto 추가

* feat: goal 도메인 수정

* feat: controller와 client가 주고받는 goal dto들 수정

* feat: 골 저장 및 골 팀 저장 메서드 수정

* fix: 컨벤션 수정

* feat: 골 팀 도메인 수정

* refactor: 컨벤션 수정

* feat: CustomException을 위한 블루밍 글로벌 익셉션 생성

* feat: 날짜 포맷 파싱 커스텀 익셉션

* refactor: 골 유효성 검증 메서드 리팩토링

* refactor: 골 생성 컨트롤러 예외처리 리팩토링

* feat: 골 추가에 대한 예외처리

* feat: 골 추가에 대한 예외처리

* feat: 골 도메인 삭제여부 컬럼명 변경

* feat: 날짜 포맷 파싱 예외처리

* feat: 예외 메시지 enum 처리

* refactor: 골 생성 컨트롤러 리팩토링

* refactor: 골 생성 컨트롤러 리팩토링

* refactor: 골 생성 시 예외처리 테스트 리팩토링

* refactor: 골 생성시 예외처리 리팩토링

* refactor: 골 생성시 예외처리 리팩토링

* feat: 골 추가 컨트롤러 테스트

* feat: JsonProperty명 수정

* refactor: 변수 설정 변경

* test: 골 생성 테스트 통과

* refactor: 현재 불필요한 골 레포지토리에 대한 테스트 클래스 삭제

* refactor: 컨벤션 및 로직 수정사항 수정 완료

* refactor: 날짜 데이터 형식 포맷 추가

* refactor: 메서드 파라미터 final로 설정

* style: when & then 표기 통일

* ci: #8 git submodule을 통한 개발 환경 설정 파일 추가 (#10)

* ci: #16 Github Actions를 이용한 자동 검증 및 자동 배포 추가 (#17)

* ci: CD 스크립트 추가

* chore: JaCoCo 설정 추가

* chore: SonarCloud 설정 추가

* ci: CI 스크립트 추가

* ci: jacocoTestCoverage를 수행하도록 수정

* ci: SonarCloud 설정 추가

* ci: 서브모듈 설정 추가

* ci: 테스트를 위해 sonarcloud 설정 제거

* ci: 테스트를 위한 리소스 파일 추가

* ci: SonarCloud 설정 추가

* fix: �Github Actions에서 CD 스크립트에서 오류가 나는 문제 해결 (#22)

* ci: 서브모듈을 위한 토큰 정보 수정

* ci: 서브모듈 위치 변경

* feat: #5 소셜 로그인 기능 추가 (#6)

* feat: oauth 타입 추가

* feat: 카카오를 통한 사용자 정보 요청 기능 추가

* feat: oauth 아이디와 타입을 통해 사용자 조회 기능 추가

* feat: jwt 토큰 생성 및 추출 기능 추가

* feat: 인증 서비스 추가

* feat: 소셜을 통한 로그인 컨트롤러 추가

* docs: 문서 최신화

* feat: 사용자 삭제 필드 추가 및 사용자가 삭제되지 않은 사용자 여부 조회 메서드 추가

* feat: jwt 토큰으로 통한 로그인 기능 추가

* style: 메서드 오탈자 수정

* refactor: 카카오 정보 받기에서 닉네임 제거

* feat: refresh 토큰을 통해 access 토큰을 생성하는 기능 추가

* feat: refresh 토큰을 통해 access 토큰을 생성 컨트롤러 추가

* feat: 사용자 정보 조회 기능 추가

* test: 테스트 설정 수정

* feat: 사용자 정보 조회 컨트롤러 추가

* feat: 테마 색상 추가

* feat: 테마 색상 목록 조회 기능 추가

* refactor: 서비스 트랜잭션 readOnly 옵션 추가

* test: 테마 색상 테스트 추가

* feat: 테마 색상 목록 조회 컨트롤러 추가

* refactor: 사용자 도메인에서 테마 색상을 사용하도록 수정

* feat: 사용자 정보 수정 기능 추가

* feat: 사용자 정보 수정 기능 컨트롤러 추가

* rename: 파일명 수정

* test: 사용자 정보 수정 예외 테스트 추가

* test: 테스트 시 타입도 검증되도록 수정

* docs: 버전에 대한 문서 추가

* docs: api 문서 최신화

* feat: auditing을 통한 사용자 정보 생성 및 마지막 수정 시간 필드 추가

* test: 컨벤션에 따라 nested 제거

* test: 컨벤션에 따라 fixture 패키지 제거

* rename: 예외 dto 패키지 추가

* refactor: 로그 레벨 변경

* refactor: 예외 메시지에 대해 enum 클래스로 관리하도록 수정

* fix: auditing을 위한 configuration 추가

* test: autowire로 수정

* fix: 로그인 시 문제가 생기는 부분 수정

- 이메일 nullable이 가능하도록 수정
- JwtProperties의 변수명이 잘못된 문제 수정

* fix: 잘못된 HTTP Method 수정

- AuthenticationController의 요청들을 모두 POST로 변경

* fix: 누락된 transactional 설정 추가

* docs: api 문서 최신화

* test: 오탈자 수정

* fix: 색상 코드가 없는 부분에 대한 문제 해결 및 잘못된 반환 처리에 대한 문제 해결

- 사용자 정보 수정 시 색상 이름으로 수정한 후 사용자 정보 반환 시 코드로 반환해야 하는 데, 색상 이름으로 반환하도록 한 문제에 대한 테스트도 수정

* fix: 이메일이 자동으로 입력되지 않는 문제 해결

* chore: h2 콘솔을 위한 라이브러리 추가

* ci: 서브모듈 업데이트

* test: 실패하는 테스트 해결

EnableJpaAuditing에 대한 configuration 클래스를 import 하도록 수정

* refactor: 통일성을 위한 URL 수정

* test: 불필요한 필드 제거

* docs: api 문서 최신화

* test: 사용자 서비스 클래스의 불충분한 테스트 추가

* refacotr: 동일한 의미의 예외 병합

* refactor: 불필요한 코드 제거

* test: 인증 서비스 클래스의 불충분한 테스트 추가

* style: 메서드 네이밍 컨벤션 적용

* chore: 테스트에 사용할 lombok 의존성 추가

* ci: 브랜치 최신화 및 충돌 해결

* refactor: 사용하지 않는 메서드 삭제

* refactor: requestDto에서 골 아이디 삭제

* ci: 브랜치 최신화 및 충돌 해결

* ci: 브랜치 최신화 및 충돌 해결

* feat: 골 관리자 추가

* test: 골 관리자 추가에 따른 테스트 코드 리팩토링

* test: 골 관리자 추가에 따른 테스트 코드 리팩토링

* test: 골 관리자 추가에 따른 테스트 코드 리팩토링

* feat: 골 조회 기능 추가

* refactor: 도메인 및 dto 변수명 수정

* refactor: Exception 파일 수정

* refactor: 필요없는 파일 삭제

* refactor: dto 및 도메인 필드명 수정

* refactor: dto 및 도메인 필드명 수정

* refactor: 골 기간에 대한 필드 Value Object로 수정

* refactor: 골 날짜수 에러 메시지 수정

* feat: 골 추가 시 예외처리 추가

* refactor: 골 기간을 Value Object로 변경하면서 생긴 수정사항 수정

* docs: api 문서 최신화

* refactor: dto 변수 type 변경

* refactor: 날짜 데이터 파싱

* test: 단일 골 조회 테스트 성공

* docs: api 문서화 업데이트

* refactor: 사용자 id가 유효한지 확인하는 로직 리팩토링

* test: 골 추가 관련 예외처리 테스트 완료

* test: 골 단일 조회 관련 예외처리 테스트 완료

* refactor: 컨벤션에 따른 dto명 수정

* refactor: 골 제목 길이 제한

* refactor: 골 메모 null 값 허용하지 않고 빈값이 들어가도록 설정

* refactor: 현재 진행 중인 골 날짜 수 필드 생성

* test: 현재 진행중인 골 필드 생성 후 테스트

* refactor: 단일 골 상세조회 dto명 수정

* docs: api 문서화 업데이트

* refactor: 단일 골 조회에서 골 참여자 이름 및 색상 정보까지 조회하도록 수정

* test: 단일 골 조회에서 골 참여자 정보까지 조회 테스트

* docs: api 문서 업데이트

* feat: 현재 로그인한 사용자가 참여한 모든 골 조회

* test: 현재 로그인한 사용자가 참여한 모든 골 조회 테스트

* docs: api 문서 최신화 업데이트

* refactor: 현재 진행중인 골 날짜수가 전체 골 날짜수를 넘지 않도록 수정

* refactor: 골 생성 및 골 기간 설정 예외처리 수정

* test: 골 생성 및 골 기간 설정 예외처리 테스트

* style: 개행 컨벤션 수정

* docs: api 문서 최신화

* refactor: 컨벤션에 맞게 수정

* refactor: 골 기간 유효성 검증 리팩토링

* refactor: 컨벤션에 맞게 수정

* refactor: 날짜 데이터 검증 추가

* feat: 연관관계 편의 메서드 추가

* refactor: 골 조회 쿼리 수정

* refactor: 골 관련 dto 구조 수정

* refactor: 컨벤션 및 쿼리 수정에 따른 기타 수정

* refactor: 컨벤션에 따른 메서드명 수정

* refactor: 컨벤션에 따른 수정

* fix: 현재 로그인한 사용자가 참여중인 골 목록 조회 테스트 오류 수정

* fix: 현재 로그인한 사용자가 참여중인 골 목록 조회 테스트 오류 수정

* feat: 골 참여자 목록이 5명 초과인 경우 골 생성 불가

* refactor: 브랜치 최신화에 따른 수정

* test: 골 참여자 리스트 5명 초과시 골 생성 불가 테스트

* refactor: 컨벤션에 따른 수정

* refactor: 컨벤션에 따른 수정

* refactor: 컨벤션에 따른 수정

* refactor: 컨벤션에 따른 수정

* fix: 날짜 검증에 따른 테스트 오류 수정

* docs: api 문서 최신화

---------

Co-authored-by: 제이미 <[email protected]>
  • Loading branch information
jhsseonn and JJ503 authored Jan 21, 2024
1 parent 65ebbb7 commit 6501619
Show file tree
Hide file tree
Showing 35 changed files with 3,279 additions and 6 deletions.
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ dependencies {
// lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok:1.18.24'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.24'

// rest docs
asciidoctorExt 'org.springframework.restdocs:spring-restdocs-asciidoctor'
Expand Down
3 changes: 3 additions & 0 deletions src/docs/asciidoc/docs.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,6 @@ include::themecolor.adoc[]

== 친구
include::friend.adoc[]

== 골
include::goal.adoc[]
17 changes: 17 additions & 0 deletions src/docs/asciidoc/goal.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
=== 새로운 골 추가
==== 요청
operation::goal-controller-test/골_생성을_요청하면_새로운_골을_생성한다[snippets='http-request,request-headers,request-fields']
==== 응답
operation::goal-controller-test/골_생성을_요청하면_새로운_골을_생성한다[snippets='http-response,response-body']

=== 단일 골 정보 조회
==== 요청
operation::goal-controller-test/골_아이디로_조회하면_해당_골의_정보를_반환한다[snippets='http-request,path-parameters,request-headers']
==== 응답
operation::goal-controller-test/골_아이디로_조회하면_해당_골의_정보를_반환한다[snippets='http-response,response-body,response-fields']

=== 현재 로그인한 사용자가 참여한 모든 골 조회
==== 요청
operation::goal-controller-test/현재_로그인한_사용자가_참여한_모든_골을_조회한다[snippets='http-request,request-headers']
==== 응답
operation::goal-controller-test/현재_로그인한_사용자가_참여한_모든_골을_조회한다[snippets='http-response,response-body,response-fields']
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,16 @@ public enum ExceptionMessage {
ALREADY_REQUESTED_FRIEND("이미 친구를 요청한 사용자입니다."),
NOT_FOUND_FRIEND_REQUEST("해당 친구 요청을 조회할 수 없습니다."),
FRIEND_ACCEPTANCE_FORBIDDEN("친구 요청을 수락할 권한이 없습니다."),
DELETE_FRIEND_FORBIDDEN("친구를 삭제할 권한이 없습니다.");
DELETE_FRIEND_FORBIDDEN("친구를 삭제할 권한이 없습니다."),

// 골 추가
GOAL_NOT_FOUND("골 정보를 찾을 수 없습니다."),
GOAL_TEAM_NOT_FOUND("골 팀 정보를 찾을 수 없습니다."),
INVALID_GOAL_START_DAY("시작 날짜가 현재 날짜 이전입니다."),
INVALID_GOAL_END_DAY("종료 날짜가 현재 날짜 이전입니다."),
INVALID_GOAL_PERIOD("시작 날짜가 종료 날짜 이후입니다."),
INVALID_GOAL_DAYS("골 날짜 수가 범위 밖입니다.(범위: 1~100)"),
INVALID_USERS_SIZE("골에 참여하는 친구가 5명 초과입니다.");

private final String message;
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
import com.backend.blooming.friend.application.exception.DeleteFriendForbiddenException;
import com.backend.blooming.friend.application.exception.FriendAcceptanceForbiddenException;
import com.backend.blooming.friend.application.exception.NotFoundFriendRequestException;
import com.backend.blooming.goal.application.exception.InvalidGoalException;
import com.backend.blooming.goal.application.exception.NotFoundGoalException;
import com.backend.blooming.goal.application.exception.NotFoundGoalTeamException;
import com.backend.blooming.themecolor.domain.exception.UnsupportedThemeColorException;
import com.backend.blooming.user.application.exception.NotFoundUserException;
import org.springframework.http.HttpHeaders;
Expand Down Expand Up @@ -109,6 +112,36 @@ public ResponseEntity<ExceptionResponse> handleNotFoundUserException(
.body(new ExceptionResponse(exception.getMessage()));
}

@ExceptionHandler(InvalidGoalException.class)
public ResponseEntity<ExceptionResponse> handleInvalidGoalException(
final InvalidGoalException exception
) {
logger.warn(String.format(LOG_MESSAGE_FORMAT, exception.getClass().getSimpleName(), exception.getMessage()));

return ResponseEntity.status(HttpStatus.FORBIDDEN)
.body(new ExceptionResponse(exception.getMessage()));
}

@ExceptionHandler(NotFoundGoalException.class)
public ResponseEntity<ExceptionResponse> handleNotFoundGoalException(
final NotFoundGoalException exception
) {
logger.warn(String.format(LOG_MESSAGE_FORMAT, exception.getClass().getSimpleName(), exception.getMessage()));

return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new ExceptionResponse(exception.getMessage()));
}

@ExceptionHandler(NotFoundGoalTeamException.class)
public ResponseEntity<ExceptionResponse> handleNotFoundGoalTeamException(
final NotFoundGoalTeamException exception
) {
logger.warn(String.format(LOG_MESSAGE_FORMAT, exception.getClass().getSimpleName(), exception.getMessage()));

return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new ExceptionResponse(exception.getMessage()));
}

@ExceptionHandler(AlreadyRequestedFriendException.class)
public ResponseEntity<ExceptionResponse> handleAlreadyRequestedFriendException(
final AlreadyRequestedFriendException exception
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package com.backend.blooming.goal.application;

import com.backend.blooming.goal.application.dto.CreateGoalDto;
import com.backend.blooming.goal.application.dto.ReadAllGoalDto;
import com.backend.blooming.goal.application.dto.ReadGoalDetailDto;
import com.backend.blooming.goal.application.exception.NotFoundGoalException;
import com.backend.blooming.goal.domain.Goal;
import com.backend.blooming.goal.infrastructure.repository.GoalRepository;
import com.backend.blooming.user.application.exception.NotFoundUserException;
import com.backend.blooming.user.domain.User;
import com.backend.blooming.user.infrastructure.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
@RequiredArgsConstructor
public class GoalService {

private final GoalRepository goalRepository;
private final UserRepository userRepository;

public Long createGoal(final CreateGoalDto createGoalDto) {
final Goal goal = persistGoal(createGoalDto);

return goal.getId();
}

private Goal persistGoal(final CreateGoalDto createGoalDto) {
final User user = getValidUser(createGoalDto.managerId());
final List<User> users = createGoalDto.teamUserIds()
.stream()
.map(this::getValidUser)
.toList();

final Goal goal = Goal.builder()
.name(createGoalDto.name())
.memo(createGoalDto.memo())
.startDate(createGoalDto.startDate())
.endDate(createGoalDto.endDate())
.managerId(user.getId())
.users(users)
.build();

return goalRepository.save(goal);
}

private User getValidUser(final Long userId) {
return userRepository.findByIdAndDeletedIsFalse(userId)
.orElseThrow(NotFoundUserException::new);
}

@Transactional(readOnly = true)
public ReadGoalDetailDto readGoalDetailById(final Long goalId) {
final Goal goal = goalRepository.findByIdAndDeletedIsFalse(goalId)
.orElseThrow(NotFoundGoalException::new);

return ReadGoalDetailDto.from(goal);
}

@Transactional(readOnly = true)
public ReadAllGoalDto readAllGoalByUserId(final Long userId) {
final List<Goal> goals = goalRepository.findAllByUserIdAndDeletedIsFalse(userId);

return ReadAllGoalDto.from(goals);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.backend.blooming.goal.application.dto;

import com.backend.blooming.goal.presentation.dto.request.CreateGoalRequest;

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

public record CreateGoalDto(
String name,
String memo,
LocalDate startDate,
LocalDate endDate,
Long managerId,
List<Long> teamUserIds
) {

public static CreateGoalDto of(
final CreateGoalRequest request,
final Long managerId) {
return new CreateGoalDto(
request.name(),
request.memo(),
request.startDate(),
request.endDate(),
managerId,
request.teamUserIds()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.backend.blooming.goal.application.dto;

import com.backend.blooming.goal.domain.Goal;
import com.backend.blooming.goal.domain.GoalTeam;
import com.backend.blooming.themecolor.domain.ThemeColor;

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

public record ReadAllGoalDto(List<GoalInfoDto> goalInfoDtos) {

public static ReadAllGoalDto from(final List<Goal> goals) {
final List<GoalInfoDto> goalInfoDtos = goals.stream()
.map(GoalInfoDto::from)
.toList();

return new ReadAllGoalDto(goalInfoDtos);
}

public record GoalInfoDto(
Long id,
String name,
LocalDate startDate,
LocalDate endDate,
long days,
List<GoalTeamWithUserInfoDto> goalTeamWithUserInfoDtos) {

public static GoalInfoDto from(final Goal goal) {
final List<GoalTeamWithUserInfoDto> goalTeamWithUserInfoDtos = goal.getTeams()
.stream()
.map(GoalTeamWithUserInfoDto::from)
.toList();

return new GoalInfoDto(
goal.getId(),
goal.getName(),
goal.getGoalTerm().getStartDate(),
goal.getGoalTerm().getEndDate(),
goal.getGoalTerm().getDays(),
goalTeamWithUserInfoDtos
);
}

public record GoalTeamWithUserInfoDto(Long id, String name, ThemeColor color) {

public static GoalTeamWithUserInfoDto from(final GoalTeam goalTeam) {
return new GoalTeamWithUserInfoDto(
goalTeam.getUser().getId(),
goalTeam.getUser().getName(),
goalTeam.getUser().getColor()
);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.backend.blooming.goal.application.dto;

import com.backend.blooming.goal.domain.Goal;
import com.backend.blooming.goal.domain.GoalTeam;
import com.backend.blooming.themecolor.domain.ThemeColor;

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

public record ReadGoalDetailDto(
Long id,
String name,
String memo,
LocalDate startDate,
LocalDate endDate,
long days,
Long managerId,
List<GoalTeamWithUserInfoDto> GoalTeamWithUserInfo
) {

public static ReadGoalDetailDto from(final Goal goal) {
final List<GoalTeamWithUserInfoDto> goalTeamWithUserInfoDtos = goal.getTeams()
.stream()
.map(GoalTeamWithUserInfoDto::from)
.toList();

return new ReadGoalDetailDto(
goal.getId(),
goal.getName(),
goal.getMemo(),
goal.getGoalTerm().getStartDate(),
goal.getGoalTerm().getEndDate(),
goal.getGoalTerm().getDays(),
goal.getManagerId(),
goalTeamWithUserInfoDtos
);
}

public record GoalTeamWithUserInfoDto(Long id, String name, ThemeColor color, String statusMessage) {

public static GoalTeamWithUserInfoDto from(final GoalTeam goalTeam) {
return new GoalTeamWithUserInfoDto(
goalTeam.getId(),
goalTeam.getUser().getName(),
goalTeam.getUser().getColor(),
goalTeam.getUser().getStatusMessage()
);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.backend.blooming.goal.application.exception;

import com.backend.blooming.exception.BloomingException;
import com.backend.blooming.exception.ExceptionMessage;

public class InvalidGoalException extends BloomingException {

private InvalidGoalException(final ExceptionMessage exceptionMessage) {
super(exceptionMessage);
}

public static class InvalidInvalidGoalStartDay extends InvalidGoalException {

public InvalidInvalidGoalStartDay() {
super(ExceptionMessage.INVALID_GOAL_START_DAY);
}
}

public static class InvalidInvalidGoalEndDay extends InvalidGoalException {

public InvalidInvalidGoalEndDay() {
super(ExceptionMessage.INVALID_GOAL_END_DAY);
}
}

public static class InvalidInvalidGoalPeriod extends InvalidGoalException {

public InvalidInvalidGoalPeriod() {
super(ExceptionMessage.INVALID_GOAL_PERIOD);
}
}

public static class InvalidInvalidGoalDays extends InvalidGoalException {

public InvalidInvalidGoalDays() {
super(ExceptionMessage.INVALID_GOAL_DAYS);
}
}

public static class InvalidInvalidUsersSize extends InvalidGoalException {

public InvalidInvalidUsersSize() {
super(ExceptionMessage.INVALID_GOAL_DAYS);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.backend.blooming.goal.application.exception;

import com.backend.blooming.exception.BloomingException;
import com.backend.blooming.exception.ExceptionMessage;

public class NotFoundGoalException extends BloomingException {

public NotFoundGoalException() {
super(ExceptionMessage.GOAL_NOT_FOUND);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.backend.blooming.goal.application.exception;

import com.backend.blooming.exception.BloomingException;
import com.backend.blooming.exception.ExceptionMessage;

public class NotFoundGoalTeamException extends BloomingException {

public NotFoundGoalTeamException() {
super(ExceptionMessage.GOAL_NOT_FOUND);
}
}
Loading

0 comments on commit 6501619

Please sign in to comment.