회사에 대한 데이터를 저장
{
"name" : "네이버",
"nation" : "한국",
"location" : "판교"
}
회사가 있어야 채용 공고를 등록할 수 있기 때문에 회사(Company) 등록 기능 우선적으로 구현
0-1. 회사가 있어야 데이터를 등록할 수 있다.
- 회사에 대한 Entity 설계 + 저장 기능 구현
0-2. 필드가 비어있으면 안 된다.
- 필드 값이 비어있을 경우 데이터가 저장될 수 없는 테스트 구현
- 필드 값이 비어있지 않을 경우 데이터가 저장되는 테스트 구현
채용공고에 대한 데이터 저장
{
"companyId" : 1,
"position" : "백엔드 주니어 개발자",
"compensation" : 1000000,
"content" : "원티드랩에서 백엔드 주니어 개발자를 채용합니다. 자격요건은..",
"techStack" : "Python"
}
companyId에 맞는 회사를 찾아 채용 공고를 등록
1-1. 채용공고를 저장하기 전, 회사가 있는지 조회해야 한다.
R : Recruit
C : Company
Service(R) to Service(C)
의 형태가 아닌Service(R) to Repository(C)
를 의존하도록 설정- 타 도메인의 저장소를 의존하고 있기 때문에 외부에서 접근하지 못하도록
private
로 지정 - 기존
Repository
를 의존 받던 형태에서 파사드 패턴으로 리팩터링 진행
- 타 도메인의 저장소를 의존하고 있기 때문에 외부에서 접근하지 못하도록
1-2. 필드가 비어있으면 안 된다.
- 필드 값이 비어있을 경우 데이터가 저장될 수 없는 테스트 구현
- 필드 값이 비어있지 않을 경우 데이터가 저장되는 테스트 구현
1-3. 회사와 채용공고의 연관관계가 매핑되어야 한다.
- 1번 회사에서 저장한 공고는 1번 회사의
recruitList
에 저장되어야 함 - 채용공고(Recruit)에 FK로 회사(Company)의 PK를 등록
회사가 특정 번호의 채용공고 수정
- 회사 id 이외 모두 수정 가능
{
"position" : "백엔드 주니어 개발자",
"compensation" : 1500000,
"content" : "원티드랩에서 백엔드 주니어 개발자를 '적극' 채용합니다. 자격요건은..", # 변경됨
"techStack" : "Python"
}
로그인에 대한 절차는 생략하기 때문에 특정 공고에 대한 수정 요청은 누구든 할 수 있음 또한, 수정할 때에도 데이터가 비어있으면 수정되지 않도록 해야함
2-1. 채용 공고가 있어야 수정할 수 있다.
- 만약 채용 공고가 없을 경우
NotFoundException
을 던짐 - 채용 공고의 id가 존재하지 않을 경우에 대한 테스트 구현
2-2. 필드가 비어있으면 안 된다.
- 필드 값이 비어있을 경우 데이터가 저장될 수 없는 테스트 구현
- 필드 값이 비어있지 않을 경우 데이터가 저장되는 테스트 구현
DB에서 데이터 삭제
Logical(Soft) Delete가 아닌 Hard Delete 방식으로 구현
3-1. 존재하는 채용 공고만 삭제할 수 있다.
- 만약 채용 공고가 없을 경우
NotFoundException
을 던짐 - 채용 공고의 id가 존재하지 않을 경우에 대한 테스트 구현
전체 체용공고 조회
[
{
"채용공고_id" : 채용공고_id,
"회사명" : "원티드랩",
"국가" : "한국",
"지역" : "서울",
"position" : "백엔드 주니어 개발자",
"compensation" : 1500000,
"techStack" : "Python"
},
{
"채용공고_id" : 채용공고_id,
"회사명" : "네이버",
"국가" : "한국",
"지역" : "판교",
"position" : "Django 백엔드 개발자",
"compensation" : 1000000,
"techStack" : "Django"
},
...
]
4-1-1. 저장된 채용 공고를 모두 출력해야 한다.
[
{
"id":1,
"name":"원티드랩",
"nation":"한국",
"location":"판교",
"position":"백엔드 주니어 개발자",
"compensation":1000000,
"content":"원티드랩에서 백엔드 주니어 개발자를 채용합니다. 자격요건은..",
"techStack":"Python"
},
{
"id":2,
"name":"네이버",
"nation":"한국",
"location":"정자",
"position":"백엔드 시니어 개발자",
"compensation":1000000,
"content":"네이버에서 백엔드 개발자를 '적극' 채용합니다. 자격요건은..",
"techStack":"Java"
}
]
4-2-1. 키워드가 존재하면 검색한 결과를 반환한다.
[
{
"id":2,
"name":"네이버",
"nation":"한국",
"location":"정자",
"position":"백엔드 시니어 개발자",
"compensation":1000000,
"content":"네이버에서 백엔드 개발자를 '적극' 채용합니다. 자격요건은..",
"techStack":"Java"
}
]
채용 공고 상세 조회
{
"채용공고_id" : "채용공고_id",
"회사명" : "원티드랩",
"국가" : "한국",
"지역" : "서울",
"position" : "백엔드 주니어 개발자",
"compensation" : 1500000,
"techStack" : "Python",
"content" : "원티드랩에서 백엔드 주니어 개발자를 채용합니다. 자격요건은..",
"회사가올린다른채용공고" : [채용공고_id, 채용공고_id, ..] # id List **(선택사항 및 가산점요소).**
}
5-1. 존재하지 않는 채용 공고는 조회할 수 없다.
- 만약 채용 공고가 없을 경우
NotFoundException
을 던짐 - 채용 공고의 id가 존재하지 않을 경우에 대한 테스트 구현
5-2. 해당 회사가 올린 다른 채용공고를 추가적으로 포함한다. (선택 사항)
- 조회될 시점을 기준으로 해당 회사의 다른 공고들을 추가로 포함
{
"id":4,
"name":"네이버",
"nation":"한국",
"location":"분당",
"position":"백엔드 주니어 개발자",
"compensation":1000000,
"content":"네이버에서 백엔드 주니어 개발자를 채용합니다. 자격요건은..",
"techStack":"Python",
"otherList":[1,2,3]
}
채용 공고 지원
- 사용자는 1회만 지원 가능합니다.
Example)
{
"채용공고_id" : 채용공고_id,
"사용자_id" : 사용자_id
}
6-1. 사용자를 등록한다.
- 아이디(username), 비밀번호(password)를 입력하지 않은 경우에 대한 테스트 구현
- 회원가입 성공에 대한 테스트 구현
- 단, 비밀번호 암호화는 진행하지 않음
6-2. 채용 공고 지원 내역을 저장한다.
- 존재하지 않는 채용 공고에 대한 테스트 구현
- 만약 채용 공고가 없을 경우
NotFoundException
을 던짐
- 만약 채용 공고가 없을 경우
- 잘못된 값이 들어갈 경우에 대한 테스트 구현