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] 그룹 도메인 구현 #33

Open
wants to merge 15 commits into
base: develop
Choose a base branch
from
Open

[feat] 그룹 도메인 구현 #33

wants to merge 15 commits into from

Conversation

jsoonworld
Copy link
Member

🚀 What’s this PR about?

  • 작업 내용 요약:
    • 그룹 도메인을 구현하였습니다.
    • 그룹 도메인 관련 VO들을 추가하고, 테스트 코드를 작성하였습니다.

🛠️ What’s been done?

  • 주요 변경사항:
    • 그룹 생성 시 필요한 초대 코드 로직을 구현하였습니다.
    • 그룹 도메인 관련 VO(Value Object)를 추가하였습니다.
    • 그룹 이름 검증을 위한 정규식을 활용한 화이트 리스트 방식을 도입하였습니다.

🧪 Testing Details

  • 테스트 코드 및 결과:
    • 그룹 도메인 관련 테스트 코드를 작성하여 로직의 정확성을 검증하였습니다.
    • 모든 테스트가 정상적으로 통과함을 확인하였습니다.

👀 Checkpoints for Reviewers

  • 리뷰 시 확인할 사항:
    • 그룹 이름 검증 방식(정규식을 활용한 화이트 리스트)이 적절하게 구현되었는지 검토 부탁드립니다.
    • 테스트 코드에서 로직이 충분히 검증되고 있는지 확인 부탁드립니다.

🎯 Related Issues

- SecureRandom을 사용하여 초대 코드를 무작위로 생성하도록 구현
- InviteCodePolicy를 통해 코드 길이 및 허용 문자 검증
- 생성된 코드가 정책을 따르는지 검증하는 로직 추가
- GroupInvitationCode로 변환하여 반환
- 그룹 초대 코드 검증 관련 예외 코드 추가
  - 초대 코드가 비어 있는 경우
  - 초대 코드의 길이가 6글자가 아닌 경우
  - 초대 코드에 알파벳 대문자와 숫자 이외의 문자가 포함된 경우

- 그룹 이름 검증 관련 예외 코드 추가
  - 그룹 이름이 비어 있는 경우
  - 그룹 이름의 길이가 30자를 초과하는 경우
  - 그룹 이름에 허용되지 않은 문자가 포함된 경우

- 그룹 멤버 수 검증 관련 예외 코드 추가
  - 초기 그룹 멤버 수가 음수일 경우
  - 그룹 멤버 수가 음수로 감소할 경우
  - 그룹 멤버 수가 최대 50명을 초과할 경우

- 모든 예외 메시지에 `[GROUP ERROR]` 접두사 추가
- GroupErrorCode를 활용한 예외 메시지 관리
- 런타임 예외(RuntimeException)를 상속하여 예외 처리 용이
- 예외 발생 시 GroupErrorCode의 메시지를 포함하도록 구현
- SecureRandom을 빈으로 등록하여 무작위 코드 생성 지원
- 기본 초대 코드 정책(DefaultInviteCodePolicy) 빈 등록
- InviteCodeGenerator를 빈으로 등록하여 DI 가능하도록 설정
- 초대 코드의 기본 길이를 6자로 설정
- 허용 가능한 문자로 대문자 A-Z 및 숫자 0-9 지정
- 유효성 검사 로직 추가 (길이 6자, 허용 문자만 포함 여부 확인)
- BaseTimeEntity를 상속하여 생성 및 수정 시간 자동 관리
- 그룹 ID(groupId)를 기본 키로 설정 (AUTO_INCREMENT)
- 초대 코드(GroupInvitationCode), 그룹 이름(GroupName), 프로필 이미지 키(GroupProfileImageKey), 멤버 수(GroupMemberCount)를 임베디드 값 객체로 저장
- 그룹 생성자에서 기본 멤버 수를 1명으로 설정
- 정적 팩토리 메서드 `Group.of()` 추가하여 객체 생성을 명확하게 표현
- 초대 코드의 길이를 반환하는 `codeLength()` 메서드 정의
- 허용 가능한 문자 목록을 반환하는 `allowedCharacters()` 메서드 정의
- 초대 코드 유효성을 검증하는 `validate(String code)` 메서드 정의
- 구현체에서 다양한 초대 코드 정책을 적용할 수 있도록 인터페이스 분리
- 초대 코드를 `@Embeddable` 값 객체로 정의하여 JPA에서 사용 가능하도록 설정
- 코드 길이를 6자로 제한하는 `CODE_LENGTH` 상수 추가
- 대문자 A-Z 및 숫자 0-9만 허용하는 `ALLOWED_CHARACTERS` 생성
- `validate()` 메서드를 통해 초대 코드의 유효성을 검증
  - 비어 있지 않은지 확인 (`validateNotEmpty`)
  - 길이가 정확히 6자인지 확인 (`validateLength`)
  - 허용된 문자(A-Z, 0-9)만 포함하는지 확인 (`validateCharacters`)
- 정적 팩토리 메서드 `from(String code)` 제공
- 코드 값을 반환하는 `value()` 메서드 추가
- 초대 코드를 문자열로 반환하는 `toString()` 오버라이드
- `@Embeddable`을 사용하여 JPA 내장 타입으로 설정
- 최대 멤버 수를 50명으로 제한하는 `MAX_MEMBERS` 상수 추가
- `from(Long count)` 정적 팩토리 메서드를 통해 객체 생성
  - 초기 멤버 수가 음수일 경우 예외 발생 (`validateInitial`)
- 멤버 수 증가/감소 기능 제공
  - `increase()`: 멤버 수 1 증가 (`validateChange`로 검증)
  - `decrease()`: 멤버 수 1 감소 (`validateChange`로 검증)
- 유효성 검사 추가
  - 멤버 수가 음수일 경우 예외 발생 (`validateNonNegative`)
  - 멤버 수가 최대 50명을 초과할 경우 예외 발생 (`validateMaxLimit`)
- 멤버 수를 문자열로 변환하는 `toString()` 오버라이드
- `@Embeddable`을 사용하여 JPA 내장 타입으로 설정
- 한글, 영문(대소문자), 숫자만 허용하는 정규식 패턴 적용 (`NAME_PATTERN`)
- `from(String name)` 정적 팩토리 메서드를 통해 객체 생성
- 유효성 검사 로직 추가:
  - `validateEmpty()`: 그룹 이름이 `null`이거나 공백일 경우 예외 발생
  - `validateLength()`: 그룹 이름의 길이가 30자를 초과할 경우 예외 발생
  - `validatePattern()`: 허용되지 않은 문자가 포함된 경우 예외 발생
- 그룹 이름을 반환하는 `value()` 메서드 추가
- 문자열 변환을 위한 `toString()` 오버라이드
- `@Embeddable`을 사용하여 JPA 내장 타입으로 설정
- 프로필 이미지 키를 저장하는 `key` 필드 추가
- `from(String key)` 정적 팩토리 메서드를 통해 객체 생성
  - `null` 값이 입력될 경우 기본 생성자를 사용하여 `null` 저장
- 프로필 이미지 키 값을 반환하는 `value()` 메서드 추가
- 문자열 변환을 위한 `toString()` 오버라이드
- 성공 케이스
  - 유효한 초대 코드(6자리 영문 대문자 + 숫자 조합) 생성 테스트

- 실패 케이스
  - 초대 코드가 `null` 또는 비어 있는 경우 예외 발생 검증
  - 초대 코드의 길이가 6자가 아닌 경우 예외 발생 검증
  - 초대 코드에 허용되지 않은 문자(특수 문자, 공백 포함) 포함 시 예외 발생 검증
  - 초대 코드에 소문자가 포함된 경우 예외 발생 검증
- 성공 케이스
  - 초기 멤버 수가 0인 경우 객체 정상 생성 검증
  - 멤버 수 증가 시 정상적으로 값이 증가하는지 검증
  - 멤버 수 감소 시 정상적으로 값이 감소하는지 검증

- 실패 케이스
  - 멤버 수가 음수가 될 경우 예외 발생 검증
  - 멤버 수가 최대값(50명)을 초과할 경우 예외 발생 검증
  - 초기값이 음수인 경우 예외 발생 검증
- 성공 케이스
  - 유효한 그룹 이름으로 객체 정상 생성 검증 (한글, 영문, 숫자 조합 허용)

- 실패 케이스
  - 그룹 이름이 `null` 또는 비어 있는 경우 예외 발생 검증
  - 그룹 이름의 길이가 30자를 초과하는 경우 예외 발생 검증
  - 그룹 이름에 특수 문자가 포함된 경우 예외 발생 검증
  - 그룹 이름에 공백이 포함된 경우 예외 발생 검증
@jsoonworld jsoonworld added ✨ feat Something isn't working 🐋 장순 🐋 This issue or pull request already exists labels Feb 12, 2025
@jsoonworld jsoonworld requested a review from 0-tae February 12, 2025 09:38
@jsoonworld jsoonworld self-assigned this Feb 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ feat Something isn't working 🐋 장순 🐋 This issue or pull request already exists
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant