Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.back.domain.member.member.controller;

import com.back.domain.member.member.dto.MemberSearchResponse;
import com.back.domain.member.member.dto.MentorUpdateRequest;
import com.back.domain.member.member.dto.MenteeUpdateRequest;
import com.back.domain.member.member.service.MemberService;
import com.back.global.rq.Rq;
import com.back.global.rsData.RsData;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/members")
@RequiredArgsConstructor
@Tag(name = "AdmMemberController", description = "๊ด€๋ฆฌ์ž ํšŒ์› ๊ด€๋ฆฌ ์ปจํŠธ๋กค๋Ÿฌ")
public class AdmMemberController {
private final MemberService memberService;
private final Rq rq;


@GetMapping("/{memberId}")
@Operation(summary = "ํšŒ์› ์ƒ์„ธ ์กฐํšŒ (๊ด€๋ฆฌ์ž)")
@PreAuthorize("hasRole('ADMIN')")
public RsData<MemberSearchResponse> getMember(@PathVariable Long memberId) {
MemberSearchResponse member = memberService.getMemberForAdmin(memberId);
return new RsData<>("200-14", "ํšŒ์› ์ƒ์„ธ ์กฐํšŒ ์„ฑ๊ณต", member);
}

@PostMapping("/{memberId}/delete")
@Operation(summary = "ํšŒ์› ์‚ญ์ œ (๊ด€๋ฆฌ์ž) - ์†Œํ”„ํŠธ ์‚ญ์ œ")
@PreAuthorize("hasRole('ADMIN')")
public RsData<Void> deleteMember(@PathVariable Long memberId) {
memberService.deleteMemberByAdmin(memberId);
return new RsData<>("200-15", "ํšŒ์› ์‚ญ์ œ ์„ฑ๊ณต");
}

@PutMapping("/{memberId}/mentor")
@Operation(summary = "๋ฉ˜ํ†  ์ •๋ณด ์ˆ˜์ • (๊ด€๋ฆฌ์ž)")
@PreAuthorize("hasRole('ADMIN')")
public RsData<Void> updateMentor(@PathVariable Long memberId, @RequestBody MentorUpdateRequest request) {
memberService.updateMemberByAdmin(memberId, null, request.nickname(), null,
request.career(), request.careerYears(), null);
return new RsData<>("200-16", "๋ฉ˜ํ†  ์ •๋ณด ์ˆ˜์ • ์„ฑ๊ณต");
}

@PutMapping("/{memberId}/mentee")
@Operation(summary = "๋ฉ˜ํ‹ฐ ์ •๋ณด ์ˆ˜์ • (๊ด€๋ฆฌ์ž)")
@PreAuthorize("hasRole('ADMIN')")
public RsData<Void> updateMentee(@PathVariable Long memberId, @RequestBody MenteeUpdateRequest request) {
memberService.updateMemberByAdmin(memberId, null, request.nickname(), null,
null, null, request.interestedField());
return new RsData<>("200-17", "๋ฉ˜ํ‹ฐ ์ •๋ณด ์ˆ˜์ • ์„ฑ๊ณต");
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.back.domain.member.member.controller;

import com.back.domain.member.member.dto.*;
import com.back.domain.member.member.dto.MenteeSignupRequest;
import com.back.domain.member.member.dto.MentorSignupVerifyRequest;
import com.back.domain.member.member.dto.MentorVerificationRequest;
import com.back.domain.member.member.dto.LoginRequest;
import com.back.domain.member.member.entity.Member;
import com.back.domain.member.member.service.MemberService;
import com.back.global.rq.Rq;
Expand All @@ -15,8 +18,8 @@
@RestController
@RequestMapping("/auth")
@RequiredArgsConstructor
@Tag(name = "MemberController", description = "ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ")
public class MemberController {
@Tag(name = "MemberAuthController", description = "ํšŒ์› ์ธ์ฆ ์ปจํŠธ๋กค๋Ÿฌ")
public class MemberAuthController {
private final MemberService memberService;
private final Rq rq;
private final EmailVerificationService emailVerificationService;
Expand Down Expand Up @@ -102,9 +105,9 @@ public RsData<Void> refresh() {
return new RsData<>("200-6", "ํ† ํฐ ๊ฐฑ์‹  ์„ฑ๊ณต");
}

@DeleteMapping("/me")
@PostMapping("/me/withdraw")
@Operation(summary = "ํšŒ์› ํƒˆํ‡ด")
public RsData<Void> deleteMember() {
public RsData<Void> withdrawMember() {
Member currentUser = rq.getActor();
memberService.deleteMember(currentUser);

Expand All @@ -115,35 +118,4 @@ public RsData<Void> deleteMember() {
return new RsData<>("200-7", "ํšŒ์› ํƒˆํ‡ด๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
}

@GetMapping("/me/mentee")
@Operation(summary = "๋ฉ˜ํ‹ฐ ๋งˆ์ดํŽ˜์ด์ง€ ์กฐํšŒ")
public RsData<MenteeMyPageResponse> getMenteeMyPage() {
Member currentUser = rq.getActor();
MenteeMyPageResponse response = memberService.getMenteeMyPage(currentUser);
return new RsData<>("200-9", "๋ฉ˜ํ‹ฐ ์ •๋ณด ์กฐํšŒ ์„ฑ๊ณต", response);
}

@PutMapping("/me/mentee")
@Operation(summary = "๋ฉ˜ํ‹ฐ ์ •๋ณด ์ˆ˜์ •")
public RsData<Void> updateMentee(@RequestBody MenteeUpdateRequest request) {
Member currentUser = rq.getActor();
memberService.updateMentee(currentUser, request);
return new RsData<>("200-10", "๋ฉ˜ํ‹ฐ ์ •๋ณด ์ˆ˜์ • ์„ฑ๊ณต");
}

@GetMapping("/me/mentor")
@Operation(summary = "๋ฉ˜ํ†  ๋งˆ์ดํŽ˜์ด์ง€ ์กฐํšŒ")
public RsData<MentorMyPageResponse> getMentorMyPage() {
Member currentUser = rq.getActor();
MentorMyPageResponse response = memberService.getMentorMyPage(currentUser);
return new RsData<>("200-11", "๋ฉ˜ํ†  ์ •๋ณด ์กฐํšŒ ์„ฑ๊ณต", response);
}

@PutMapping("/me/mentor")
@Operation(summary = "๋ฉ˜ํ†  ์ •๋ณด ์ˆ˜์ •")
public RsData<Void> updateMentor(@RequestBody MentorUpdateRequest request) {
Member currentUser = rq.getActor();
memberService.updateMentor(currentUser, request);
return new RsData<>("200-12", "๋ฉ˜ํ†  ์ •๋ณด ์ˆ˜์ • ์„ฑ๊ณต");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.back.domain.member.member.controller;

import com.back.domain.member.member.dto.MenteeMyPageResponse;
import com.back.domain.member.member.dto.MenteeUpdateRequest;
import com.back.domain.member.member.dto.MentorMyPageResponse;
import com.back.domain.member.member.dto.MentorUpdateRequest;
import com.back.domain.member.member.entity.Member;
import com.back.domain.member.member.service.MemberService;
import com.back.global.rq.Rq;
import com.back.global.rsData.RsData;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/members")
@RequiredArgsConstructor
@Tag(name = "MemberMyPageController", description = "ํšŒ์› ๋งˆ์ดํŽ˜์ด์ง€ ์ปจํŠธ๋กค๋Ÿฌ")
public class MemberMyPageController {
private final MemberService memberService;
private final Rq rq;

@GetMapping("/me/mentee")
@Operation(summary = "๋ฉ˜ํ‹ฐ ๋งˆ์ดํŽ˜์ด์ง€ ์กฐํšŒ")
public RsData<MenteeMyPageResponse> getMenteeMyPage() {
Member currentUser = rq.getActor();
MenteeMyPageResponse response = memberService.getMenteeMyPage(currentUser);
return new RsData<>("200-9", "๋ฉ˜ํ‹ฐ ์ •๋ณด ์กฐํšŒ ์„ฑ๊ณต", response);
}

@PutMapping("/me/mentee")
@Operation(summary = "๋ฉ˜ํ‹ฐ ์ •๋ณด ์ˆ˜์ •")
public RsData<Void> updateMentee(@RequestBody MenteeUpdateRequest request) {
Member currentUser = rq.getActor();
memberService.updateMentee(currentUser, request);
return new RsData<>("200-10", "๋ฉ˜ํ‹ฐ ์ •๋ณด ์ˆ˜์ • ์„ฑ๊ณต");
}

@GetMapping("/me/mentor")
@Operation(summary = "๋ฉ˜ํ†  ๋งˆ์ดํŽ˜์ด์ง€ ์กฐํšŒ")
public RsData<MentorMyPageResponse> getMentorMyPage() {
Member currentUser = rq.getActor();
MentorMyPageResponse response = memberService.getMentorMyPage(currentUser);
return new RsData<>("200-11", "๋ฉ˜ํ†  ์ •๋ณด ์กฐํšŒ ์„ฑ๊ณต", response);
}

@PutMapping("/me/mentor")
@Operation(summary = "๋ฉ˜ํ†  ์ •๋ณด ์ˆ˜์ •")
public RsData<Void> updateMentor(@RequestBody MentorUpdateRequest request) {
Member currentUser = rq.getActor();
memberService.updateMentor(currentUser, request);
return new RsData<>("200-12", "๋ฉ˜ํ†  ์ •๋ณด ์ˆ˜์ • ์„ฑ๊ณต");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.back.domain.member.member.dto;

import com.back.domain.member.member.entity.Member;
import com.back.domain.member.mentee.entity.Mentee;
import com.back.domain.member.mentor.entity.Mentor;

import java.time.LocalDateTime;

public record MemberSearchResponse(
Long id,
String email,
String name,
String nickname,
Member.Role role,
Boolean isDeleted,
LocalDateTime createdAt,
LocalDateTime modifiedAt,
String career, // ๋ฉ˜ํ† ์ธ ๊ฒฝ์šฐ์—๋งŒ ๊ฐ’์ด ์žˆ์Œ (TODO: Job ์—ฐ๊ฒฐ ํ›„ ์ˆ˜์ • ์˜ˆ์ •)
Integer careerYears, // ๋ฉ˜ํ† ์ธ ๊ฒฝ์šฐ์—๋งŒ ๊ฐ’์ด ์žˆ์Œ
String interestedField // ๋ฉ˜ํ‹ฐ์ธ ๊ฒฝ์šฐ์—๋งŒ ๊ฐ’์ด ์žˆ์Œ (TODO: Job ์—ฐ๊ฒฐ ํ›„ ์ˆ˜์ • ์˜ˆ์ •)
) {
public static MemberSearchResponse from(Member member, Mentor mentor, Mentee mentee) {
return new MemberSearchResponse(
member.getId(),
member.getEmail(),
member.getName(),
member.getNickname(),
member.getRole(),
member.getIsDeleted(),
member.getCreateDate(),
member.getModifyDate(),
mentor != null ? "TODO: Job ์—ฐ๊ฒฐ ํ•„์š”" : null, // TODO: Job ์—ฐ๊ฒฐ ํ›„ ์ˆ˜์ •
mentor != null ? mentor.getCareerYears() : null,
mentee != null ? "TODO: Job ์—ฐ๊ฒฐ ํ•„์š”" : null // TODO: Job ์—ฐ๊ฒฐ ํ›„ ์ˆ˜์ •
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ public class Member extends BaseEntity {
@Column(unique = true, nullable = false, length = 36)
private String publicId;

@Column(unique = true, nullable = false)
@Column(nullable = false)
private String email;

@Column(nullable = false)
private String name;

@Column(unique = true, nullable = false)
@Column(nullable = false)
private String nickname;

@Column(nullable = false)
Expand All @@ -30,6 +30,9 @@ public class Member extends BaseEntity {
@Column(nullable = false)
private Role role;

@Column(nullable = false)
private Boolean isDeleted = false;

public enum Role {
MENTOR, MENTEE, ADMIN
}
Expand All @@ -38,12 +41,21 @@ public void updateNickname(String nickname) {
this.nickname = nickname;
}

public void updateName(String name) {
this.name = name;
}

public void updateEmail(String email) {
this.email = email;
}

public Member(String email, String password, String name, String nickname, Role role) {
this.email = email;
this.password = password;
this.name = name;
this.nickname = nickname;
this.role = role;
this.isDeleted = false;
}

public Member(Long id, String email, String name, String nickname, Role role) {
Expand All @@ -52,6 +64,11 @@ public Member(Long id, String email, String name, String nickname, Role role) {
this.name = name;
this.nickname = nickname;
this.role = role;
this.isDeleted = false;
}

public void delete() {
this.isDeleted = true;
}

@PrePersist
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,29 @@

import com.back.domain.member.member.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.Optional;

public interface MemberRepository extends JpaRepository<Member, Long> {
Optional<Member> findByEmail(String email);
Optional<Member> findByNickname(String nickname);
// ํ™œ์„ฑ ์‚ฌ์šฉ์ž๋งŒ ์กฐํšŒ (์†Œํ”„ํŠธ ์‚ญ์ œ๋œ ์‚ฌ์šฉ์ž ์ œ์™ธ)
@Query("SELECT m FROM Member m WHERE m.email = :email AND m.isDeleted = false")
Optional<Member> findByEmail(@Param("email") String email);

@Query("SELECT m FROM Member m WHERE m.nickname = :nickname AND m.isDeleted = false")
Optional<Member> findByNickname(@Param("nickname") String nickname);

@Query("SELECT m FROM Member m WHERE m.id = :id AND m.isDeleted = false")
Optional<Member> findById(@Param("id") Long id);

// ๊ด€๋ฆฌ์ž์šฉ
@Query("SELECT m FROM Member m WHERE m.email = :email")
Optional<Member> findByEmailIncludingDeleted(@Param("email") String email);

@Query("SELECT m FROM Member m WHERE m.nickname = :nickname")
Optional<Member> findByNicknameIncludingDeleted(@Param("nickname") String nickname);

@Query("SELECT m FROM Member m WHERE m.id = :id")
Optional<Member> findByIdIncludingDeleted(@Param("id") Long id);
}
Loading