Skip to content

Recruit 인수인계서

Jihye Wee edited this page Nov 24, 2023 · 3 revisions

Outline

모집글 모듈은 RestAPI로 통신하여 모집글의 생성, 수정, 조회, 삭제의 기본 기능을 수행하며 키워드 및 조건 검색, 지원하기, 관심프로젝트 등록 등의 기능을 제공한다. 모집글 모듈의 데이터는 mysql과 nhn object storage에 저장된다.

To-Do

유저 추적

  • 모집글 생성
  • 모집글 수정
  • 모집글 삭제
  • 모집글 전체 조회
  • 모집글 조건 조회
  • 모집글 단건 조회
  • 모집글 생성시 임시저장(정책 미정)

Tables

  • Recruit: 모집글 정보가 담기는 테이블, team과 OneToOne 관계로 teamId를 고유키로 사용
  • RecruitApplicant: 지원자 정보가 담기는 테이블, user, recruit, role을 복합키로 사용
  • RecruitFavorite: 관심프로젝트와 유저 정보가 담기는 테이블, user, recruit를 복합키로 사용
  • RecruitFile: 게시글의 첨부파일이 담기는 테이블(1스텝에서는 사용되지 않고 2스텝 정책에 따라 수정이 필요함)
  • RecruitInterview: 모집글에 함께 등록되는 지원자 대상 설문 정보가 담기는 테이블
  • RecruitRole: 모집글에 함께 등록되는 팀의 역할분담 정보가 담기는 테이블

아래는 entity에 @elementcollection으로 생성된 하위 테이블(기본적으로 OneToMnay의 관계를 가지고 있으며 cascasde.ALL과 orphan 속성을 기본으로 갖는다.)

  • Recruit_applicant_answer_list: recruit_applicant가 가지고 있는 answerList의 정보가 담겨있는 테이블
  • 'Recruit_interview_option`: interview의 객관식, 체크박스, 선형배율의 옵션 정보를 저장하는 테이블
  • Recruit_tags: 모집글에 등록된 태그 이름을 저장하는 테이블

Classes

  • Controller
    • RecruitController : RestAPI로 모집글 관련하여 통신
  • Service
    • RecruitService: 모집글 관련한 비즈니스 로직 구현
  • Repository
    • RecruitRepository: 모집글 데이터 입출력
    • RecruitApplicantRepository: 모집글 지원자 데이터 입출력
    • 'RecruitFavoriteRepository`: 관심프로젝트 데이터 입출력
  • Annotation
    • AuthorCheck: 모집글의 작성자인지 체크한다. 팀게시판에서도 사용된다.
  • Aspect
    • AuthorCheckAspect: AuthorCheck 어노테이션의 method를 가지고 있다. Authentication을 검사하여 해당 게시글의 작성자가 아니면 exception을 던진다.
  • preDefinedClass
    • Tag: 2스텝의 admin페이지가 생기기 전에 데이터 저장을 위해 생성된 클래스. admin페이지의 태그 등록 기능이 구현되면 해당 내용을 이관하고 삭제가 필요하다.
    • TagListManager: Tag 정보를 미리 담아두는 기능을 하는 클래스

Processing Logic

  • recruitService
    • createRecruit
    1. 동일한 팀 이름이 있는지 검사
    2. 팀 생성
    3. 모집게시글 생성
    4. 생성된 모집글 id 반환
    • getRecruit
      1. id로 모집글 불러오기
      2. dto 매핑하여 반환
    • applyRecruit
      1. userId(요청 userId), recruitId(parameter), role(request)을 조합하여 이전에 신청 내역 검사
      2. 이전 신청 내역이 없을시 applyRecruit 생성
    • deleteRecruit
      1. author 확인
      2. 대표이미지 삭제
      3. 해당 recruit 삭제
    • updateRecruit
      1. recruit 정보에 Interview 수정 내역을 boolean으로 request 받음
      2. 해당 정보로 recruit 업데이트 후 interview가 수정된 경우 interview clear하고 수정 interview가 수정되지 않은 경우 그대로 종료
    • getRecruit
      1. hit 수를 1회 증가
      2. recruitResponse Dto에 해당 정보 매핑하여 반환
    • getRecruitSearchList
      1. status, tag, type, place, region, due, keyword로 검색 가능
      2. JPA predicate와 criteria builder를 이용하여 위 값들이 null이 아닌 경우 조건에 맞게 동적으로 쿼리 생성
      3. sort값을 이용하여 latest, hit 두가지 기준으로 order 적용
      4. 쿼리 실행하여 전체 리스트 조회
      5. 전체 리스트를 Dto에 맞게 매핑 + 토큰이 있는 경우 리스트 각 항목에 대하여 recruitFavorite이 있는지 검사하여 있는 경우 isFavorite을 true로 매핑(토큰이 없는 경우 isFavorite을 전체 false로 매핑)
      6. pageable 적용하여 subList만들어서 page 정보와 함께 반환 pagenation시에 pageNumber가 0부터 시작함을 유의
    • changeRecruitFavorite
      1. 요청 User_id와 recruit_id로 recruitFavorite 인스턴스가 존재하는지 검사
      2. 존재하는 경우 삭제
      3. 존재하지 않는 경우 생성