# AuctionSeats
## 소개
암표 문제를 방지하고 공연 주최자가 합법적으로 티켓을 경매로 판매할 수 있는 티켓 예매 서비스를 개발합니다.
이 서비스는 양도 불가능한 티켓을 제공하여 암표 거래를 방지하며, 비싸게 구매할 수밖에 없는 티켓을 경매를
통해 공정하게 구매할 수 있는 기회를 제공합니다.
## Code Convention
### Naver-Coding-Convention
[네이버 자바 코딩 컨벤션](https://naver.github.io/hackday-conventions-java/) 기준으로 한다.
### Entity
1. @Setter 사용 금지
엔티티 클래스에서 @Setter를 사용하지 않는 이유는 엔티티의 불변성을 유지하고, 데이터의 무결성을 보장하기
위함입니다. 엔티티의 상태를 변경할 필요가 있을 때는 명시적인 메서드를 통해서만 변경하도록 합니다.
2. @Builder 패턴
@Builder 패턴은 객체 생성 시 가독성을 높이고, 객체를 유연하게 생성할 수 있게 해줍니다. Lombok의
@Builder 어노테이션을 사용하면 빌더 패턴을 쉽게 적용할 수 있습니다.
3. 팩토리 메서드
팩토리 메서드는 객체 생성의 로직을 캡슐화하여 객체 생성을 중앙에서 관리하도록 합니다. 이를 통해
객체 생성에 대한 제어를 강화하고, 객체 생성 로직이 변경될 때 유연하게 대처할 수 있습니다.
### Response
- Custom ResultCode 사용
- Custom ResponseEntity 사용
- code : 서비스 코드값
- 도메인 첫 글자 대문자 + 0(성공) / 1 (실패) + XX ( 0~99 하위 기능) + XX (0~99 식별자값 )
예시 : 회원가입 성공 - U00100 / 실패 (아이디 중복) - U10100
로그인 성공 - U00200 / 실패 (로그인 정보 다름) - U10200
- message : 응답 메시지
- data : 응답 데이터
- api 1개당 dto 1개씩 (req, res)
- 단건 조회 `@Pathvariable` 사용
- 요청할 데이터가 1개일 경우만 해당
- 2개 이상은 Dto에 담아서 요청
## 이름 (Naming)
1. 식별자에는 영문/숫자/언더스코어만 허용
2. 한국어 발음대로의 표기 금지
3. 패키지 이름은 소문자로 구성
4. 클래스/인터페이스 이름에 대문자 카멜표기법 적용
5. 클래스 이름에 명사 사용
6. 인터페이스 이름에 명사/형용사 사용
7. 테스트 클래스는 'Test’로 끝남
8. 메서드 이름에 소문자 카멜표기법 적용
9. 메서드 이름은 동사/전치사로 시작
10. 상수는 대문자와 언더스코어로 구성
11. 변수에 소문자 카멜표기법 적용
12. 임시 변수 외에는 1 글자 이름 사용 금지
13. **static import에만 와일드 카드 허용**
## Git 규칙
- 커밋 메세지는 자세히 구분해서 작성하기
- 테스트 코드 작성 후 PR 하기
### **[PR과 커밋은 최대한 작은 단위로 쪼개기]**
PR과 커밋은 최소 작업단위를 기준으로 작으면 작을수록 좋습니다.
- 1개의 커밋에는 1개의 행위만 들어 있는게 좋습니다
- 1개의 PR에는 1개의 작업만 들어 있는게 좋습니다
### Branch 이름 규칙
- **Branch 이름 예시:** feat/#1-user-signup
### Commit 메시지 규칙
| 작업 타입 | 작업내용 |
| --- | --- |
| 🎉 init | 없던 파일을 생성함, 초기 세팅 |
| ✨ update | 해당 도메인에 새로운 기능이 생김 |
| ♻️ refactor | 코드 리팩토링 |
| 🩹 fix | 코드 수정 → 알고리즘이나 로직 같이 변경됨 |
| 🐛 bugfix | 버그 수정 |
| 🚚 move | 파일 옮김/정리 |
| 🔥 del | 기능/파일을 삭제 |
| 🍻 test | 테스트 코드를 작성 |
| 💄 style | css |
| 🙈 docs | gitignore, readme 등 문서 수정 |
| 🔨script | package.json 변경(npm 설치 등) |
| 🐻gradle | build.gradle 수정 |
- **Commit 메시지 예시:** #1 [update-유저] 회원가입 구현