Skip to content

Feature/#148 교직원 회원가입 로직 분리#150

Open
JJimini wants to merge 5 commits into
developfrom
Feature/#148-교직원_회원가입_로직_분리

Hidden character warning

The head ref may contain hidden characters: "Feature/#148-\uad50\uc9c1\uc6d0_\ud68c\uc6d0\uac00\uc785_\ub85c\uc9c1_\ubd84\ub9ac"
Open

Feature/#148 교직원 회원가입 로직 분리#150
JJimini wants to merge 5 commits into
developfrom
Feature/#148-교직원_회원가입_로직_분리

Conversation

@JJimini
Copy link
Copy Markdown
Collaborator

@JJimini JJimini commented Jun 6, 2026

🔥 연관된 이슈

close: #148

📜 작업 내용

  • 기존 회원가입은 학생 기준 단일 흐름이었음
  • 회원가입 시 memberType(STUDENT / STAFF)을 받아 유형별로 가입 로직을 분리
  • 교직원은 사전 등록된 교직원 정보(StaffInfo)와 대조하여, 일치하는 정보의 권한으로 가입
  1. 도메인 추가
  • StaffInfo 엔티티 신규 생성 (id, name, email, role)
    • role은 MemberRoleType 재사용 (교수/직원 대상)
  • StaffInfoRepository 추가 (findByEmailAndName)
  1. 가입 요청 DTO
  • SignUpRequest에 memberType 필드 추가 (String)
  1. 가입 로직 분리 (MemberCommandService.signUp)
  • 공통: 이메일 인증 검증 → 비밀번호 인코딩 → 인증키 삭제
  • STUDENT: 기존 흐름 유지 (가짜회원 전환 / 팀리더 정보 업데이트 / 신규가입
    ROLE_학생)
  • STAFF: StaffInfo를 이메일+이름으로 대조
    • 일치하면 해당 role로 신규가입
    • 일치하는 정보 없으면 예외 발생 (가짜회원/팀리더 전환 분기 없음)

💬 리뷰 요구사항

  • 일단 데이터 넣는 거는 저희가 정보 받으면 한 번에 넣는 방향으로 생각하고 있습니다.
  • 후속 작업으로 관리자가 교직원 정보를 저장할 수 있는 기능을 만들어 볼까 생각은 하고 있습니다.
    • 다만 파일 업로드 기능은 제공하지 않고 직접 입력하는 방향을 고려하고 있습니다.
  • 또 후속 작업으로 소셜 로그인도 위 기획에 맞게 수정이 필요합니다!

✨ 기타

  • 1시인데 배고파요

@JJimini JJimini requested review from myeowon, pykido and sjmoon00 June 6, 2026 15:50
@JJimini JJimini self-assigned this Jun 6, 2026
@JJimini JJimini added the 🔍 기능 수정 기능 일부 수정 (오류 수정, 기획 변경 등) label Jun 6, 2026
@sjmoon00 sjmoon00 requested a review from Copilot June 8, 2026 09:07
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

회원가입 요청에 memberType(STUDENT/STAFF)를 추가해 학생/교직원 가입 흐름을 분리하고, 교직원은 사전 등록된 StaffInfo(이름+이메일)와 매칭되는 권한으로 가입되도록 확장한 PR입니다.

Changes:

  • SignUpRequestmemberType 추가 및 문서/RestDocs 테스트 케이스 확장
  • StaffInfo 도메인/리포지토리 추가 및 MemberCommandService.signUp() 학생/교직원 분기 처리
  • DB 초기 스키마(schema.sql)에 staff_info 테이블 추가 및 예외 타입 확장

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/main/java/com/opus/opus/modules/member/application/MemberCommandService.java memberType 기반 학생/교직원 가입 로직 분리 및 StaffInfo 매칭 가입 추가
src/main/java/com/opus/opus/modules/member/application/dto/request/SignUpRequest.java memberType 필드 및 검증(@NotNull/@pattern) 추가
src/main/java/com/opus/opus/modules/member/domain/StaffInfo.java StaffInfo 엔티티 신규 추가
src/main/java/com/opus/opus/modules/member/domain/dao/StaffInfoRepository.java StaffInfo 조회 리포지토리(findByEmailAndName) 추가
src/main/java/com/opus/opus/modules/member/exception/MemberExceptionType.java NOT_FOUND_STAFF_INFO 예외 타입 추가
src/main/resources/schema.sql staff_info 테이블 DDL 추가
src/main/java/com/opus/opus/docs/asciidoc/member.adoc 학생/교직원 회원가입 문서 분리 및 실패 케이스 추가
src/test/java/com/opus/opus/restdocs/docs/MemberApiDocsTest.java 학생/교직원 회원가입 RestDocs 스니펫 및 실패 케이스 추가
src/test/java/com/opus/opus/member/StaffInfoFixture.java StaffInfo 테스트 픽스처 신규 추가
src/test/java/com/opus/opus/member/application/MemberCommandServiceTest.java 학생/교직원 가입 동작 및 권한 검증 테스트 추가/정리

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +212 to +226
private void signUpStaff(final SignUpRequest request, final String encodingPassword) {
final StaffInfo staffInfo = staffInfoRepository.findByEmailAndName(request.email(), request.name())
.orElseThrow(() -> new MemberException(NOT_FOUND_STAFF_INFO));

memberConvenience.checkIsDuplicateEmail(request.email());
memberConvenience.checkIsDuplicateStudentId(request.studentId());

memberRepository.save(Member.generalMember()
.name(request.name())
.studentId(request.studentId())
.email(request.email())
.password(encodingPassword)
.roles(Set.of(staffInfo.getRole()))
.build());
}
Comment on lines +144 to +150
CREATE TABLE `staff_info` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`role` enum('ROLE_학생','ROLE_관리자','ROLE_교수','ROLE_직원','ROLE_외부멘토') NOT NULL,
PRIMARY KEY (`id`)
);
Copy link
Copy Markdown
Contributor

@pykido pykido left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!

가짜 회원 여부 로직 분기 처리가 깔끔하게 잘되어있네요!!! 👍👍👍👍👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔍 기능 수정 기능 일부 수정 (오류 수정, 기획 변경 등)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE] 교직원 회원가입 로직 분리

3 participants