Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
01f15d3
feat: 스페이스멤버 초대 구현중
juykoung Sep 18, 2025
aea1da3
Merge branch 'main' of https://github.com/Kernel180-BE12/Final-1team-…
juykoung Sep 18, 2025
9f0ba3a
feat: 스페이스id, 유저id로 스페이스 멤버조회 구현
juykoung Sep 18, 2025
5e5b6c9
refactor: 스페이스멤버 추가 구현 중(2)
juykoung Sep 18, 2025
dea8dce
refactor: findByEmailAndSpaceId 제거
juykoung Sep 18, 2025
bcfefbc
Merge branch 'develop' of https://github.com/Kernel180-BE12/Final-1te…
juykoung Sep 19, 2025
bbd05db
refactor: SpaceMember email 제거
juykoung Sep 19, 2025
e6ae714
Merge branch 'develop' into feature/spaceMember-invite
juykoung Sep 19, 2025
b2f7535
feat: 멤버초대 구현
juykoung Sep 19, 2025
9948f3c
docs: 불필요한 부분 삭제
juykoung Sep 19, 2025
bc2de9e
feat: 스페이스 멤버 추가 구현
juykoung Sep 22, 2025
e8636c9
Merge branch 'develop' of https://github.com/Kernel180-BE12/Final-1te…
juykoung Sep 22, 2025
b2a63b3
feat: findByEmail 추가
juykoung Sep 22, 2025
5a96e2e
Merge remote-tracking branch 'origin/feature/spaceMember-invite' into…
juykoung Sep 22, 2025
d402cc4
docs: swagger 추가
juykoung Sep 22, 2025
de7d737
fix: findByUserEmailAndSpaceIdAndStatus 쿼리수정
juykoung Sep 22, 2025
294a21c
feat: 필드 및 메서드 추가
juykoung Sep 22, 2025
e92f559
refactor: 불필요 메서드 삭제
juykoung Sep 22, 2025
1ca635e
fix: @AuthenticationPrincipal 추가
juykoung Sep 22, 2025
873e856
refactor: 스페이스 멤버 리스트 조회 시, sm.isDeleted 추가
juykoung Sep 22, 2025
be657e7
refactor: 초대메일 발송 후 InviteStatus 테이블에 저장되도록 로직 수정
juykoung Sep 22, 2025
6efe9c8
docs: 스페이스멤버 초대 메일 템플릿 구현
juykoung Sep 22, 2025
df8547e
feat: InviteStatusRepository 구현
juykoung Sep 22, 2025
72d6988
chore: 불필요 import 삭제
juykoung Sep 22, 2025
6c30654
fix: 비회원 inviteStatus에 insert되지 않는 부분 수정
juykoung Sep 23, 2025
afbc20c
Merge branch 'main' of https://github.com/Kernel180-BE12/Final-1team-…
juykoung Sep 24, 2025
4a8dbd1
fix: ${restUrl} 수정
juykoung Sep 24, 2025
4ba051d
refactor: 스페이스 멤버로 등록될 때, 논리삭제값 자동세팅
juykoung Sep 24, 2025
1619e0e
fix: 메일url 수정
juykoung Sep 24, 2025
611c6d6
refactor: 안쓰는 메서드 삭제
juykoung Sep 24, 2025
dc87f87
refactor: acceptInvitation 리턴타입 변경
juykoung Sep 24, 2025
63a378b
refactor: EXPIRED(초대 유효일 만료) 상태추가
juykoung Sep 24, 2025
ea8dd37
Merge branch 'main' of https://github.com/Kernel180-BE12/Final-1team-…
juykoung Sep 24, 2025
a619f62
Merge remote-tracking branch 'origin/feature/spaceMember-invite' into…
juykoung Sep 24, 2025
a99dc9d
fix: 이전 머지에 누락된sendInviteEmailToUser 파라미터 email 추가
juykoung Sep 24, 2025
ab3d890
rename : dto로 경로이동
juykoung Sep 24, 2025
e01a8c2
feat : findByEmailAndSpaceIdAndStatus 메서드 추가
juykoung Sep 24, 2025
ab4fc8c
refactor : 멤버초대/메일수락 수정
juykoung Sep 24, 2025
b044969
feat: 스페이스 멤버 초대 결과를 담는 InviteResult DTO 추가
juykoung Sep 24, 2025
2bce383
Merge branch 'develop' of https://github.com/Kernel180-BE12/Final-1te…
juykoung Sep 25, 2025
94f9ecc
Merge branch 'main' of https://github.com/Kernel180-BE12/Final-1team-…
juykoung Sep 25, 2025
d7f6406
feat: 스페이스멤버로 초대받아 회원가입하는 기능 구현
juykoung Sep 25, 2025
67627f4
Merge branch 'develop' into feature/spaceMember-register
juykoung Sep 25, 2025
122cf4b
feat: 스페이스멤버 논리삭제 및 수정 구현
juykoung Sep 26, 2025
fefc9a4
refactor: 초대메일 url 변경
juykoung Sep 26, 2025
b17722e
refactor: 초대메일 회원가입 수정
juykoung Sep 26, 2025
7b11bc5
Merge remote-tracking branch 'origin/feature/spaceMember-register' in…
juykoung Sep 26, 2025
2c1057c
Merge branch 'develop' into feature/spaceMember-register
juykoung Sep 26, 2025
3b750e1
Update UserService.java
juykoung Sep 26, 2025
6be4a30
refactor: sendInviteEmailToSingUp - email 파라미터 삭제누락
juykoung Sep 26, 2025
113963a
Merge branch 'main' of https://github.com/Kernel180-BE12/Final-1team-…
juykoung Sep 26, 2025
d699e0e
refactor: 스페이스멤버 다중삭제로 수정
juykoung Sep 26, 2025
aeee87c
Merge remote-tracking branch 'origin/feature/spaceMember-register' in…
juykoung Sep 26, 2025
68907f1
docs: 스웨거 수정
juykoung Sep 26, 2025
4a3488d
refactor: 없는멤버 삭제 시 에러추가
juykoung Sep 26, 2025
c617fc0
Merge branch 'develop' into feature/spaceMember-register
juykoung Sep 26, 2025
f312bfd
feat: 스페이스 멤버 태그조회 구현
juykoung Sep 27, 2025
8708d13
Merge branch 'develop' into feature/spaceMember-register
juykoung Sep 27, 2025
e607514
refactor: 멤버리스트 조회 내역 변경
juykoung Sep 30, 2025
773cf19
Merge remote-tracking branch 'origin/feature/spaceMember-register' in…
juykoung Sep 30, 2025
8161ef9
Merge branch 'develop' into feature/spaceMember-register
juykoung Sep 30, 2025
0c15b31
refactor: 멤버리스트 조회 내역 변경
juykoung Sep 30, 2025
b8e1e88
Merge remote-tracking branch 'origin/feature/spaceMember-register' in…
juykoung Sep 30, 2025
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
Expand Up @@ -11,6 +11,7 @@
import org.fastcampus.jober.space.dto.request.MemberUpdateRequestDto;
import org.fastcampus.jober.space.dto.request.SpaceMemberAddRequestDto;
import org.fastcampus.jober.space.dto.response.MemberUpdateResponseDto;
import org.fastcampus.jober.space.dto.response.SpaceMemberListResponseDto;
import org.fastcampus.jober.user.dto.CustomUserDetails;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand Down Expand Up @@ -74,17 +75,14 @@ public ResponseEntity<Void> acceptInvitation(
@Operation(summary = "스페이스 멤버 조회", description = "특정 spaceId에 속한 모든 멤버 정보를 가져옵니다.")
@Parameter(name = "spaceId", description = "멤버를 조회할 스페이스의 ID", required = true)
@GetMapping("/{spaceId}/members")
public ResponseEntity<List<SpaceMemberResponseDto>> getSpaceMembers(@PathVariable Long spaceId) {
List<SpaceMemberResponseDto> result = spaceMemberService.getSpaceMembers(spaceId);
public ResponseEntity<List<SpaceMemberListResponseDto>> getSpaceMembers(@PathVariable Long spaceId) {
List<SpaceMemberListResponseDto> result = spaceMemberService.getSpaceMembers(spaceId);
return ResponseEntity.ok(result);
}

@Operation(
summary = "스페이스 멤버 논리 삭제",

description = """

특정 스페이스에서 여러 멤버를 논리 삭제합니다.
- `memberIds` : 삭제할 멤버 ID들의 리스트(예: `1,2,3`)
- `spaceId` : 해당 스페이스 ID
""",
Expand Down Expand Up @@ -154,15 +152,15 @@ public ResponseEntity<MemberUpdateResponseDto> updateSpaceMember(
@ApiResponse(responseCode = "403", description = "해당 스페이스 멤버가 아님")
})
@GetMapping("/{spaceId}/tag")
public ResponseEntity<List<SpaceMemberResponseDto>> getMemberByTag(
public ResponseEntity<List<SpaceMemberListResponseDto>> getMemberByTag(
@Parameter(description = "조회할 스페이스 ID", required = true)
@PathVariable Long spaceId,
@Parameter(description = "조회할 멤버의 태그", required = true)
@RequestParam String tag,
@Parameter(hidden = true)
@AuthenticationPrincipal CustomUserDetails principal
) {
List<SpaceMemberResponseDto> result = spaceMemberService.getMemberByTag(spaceId, tag, principal.getUserId());
List<SpaceMemberListResponseDto> result = spaceMemberService.getMemberByTag(spaceId, tag, principal.getUserId());
return ResponseEntity.ok(result);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.fastcampus.jober.space.dto.response;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.fastcampus.jober.space.entity.Authority;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SpaceMemberListResponseDto {
@Schema(description = "구성원 이름", example = "홍길동")
private String name;

@Schema(description = "구성원 이메일", example = "aaa@aaa.com")
private String email;

@Schema(description = "구성원 권한", example = "ADMIN")
private Authority authority;

@Schema(description = "구성원 태그", example = "마케팅팀")
private String tag;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
import java.util.List;

import org.fastcampus.jober.space.dto.response.MemberUpdateResponseDto;
import org.fastcampus.jober.space.dto.response.SpaceMemberListResponseDto;
import org.fastcampus.jober.space.dto.response.SpaceMemberResponseDto;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.NullValuePropertyMappingStrategy;
import org.mapstruct.factory.Mappers;

import org.fastcampus.jober.space.dto.request.SpaceMemberRequestDto;
import org.fastcampus.jober.space.dto.response.SpaceMemberResponseDto;
import org.fastcampus.jober.space.entity.Space;
import org.fastcampus.jober.space.entity.SpaceMember;
import org.fastcampus.jober.user.entity.Users;
Expand All @@ -22,10 +23,15 @@ public interface SpaceMemberMapper {

MemberUpdateResponseDto toMemberUpdateResponseDto(SpaceMember member);

@Mapping(source = "user.name", target = "name")
@Mapping(source = "user.email", target = "email")
SpaceMemberListResponseDto toMemberResponseDto(SpaceMember member);

List<SpaceMemberListResponseDto> toMemberResponseDtoList(List<SpaceMember> spaceMembers);

@Mapping(source = "user.userId", target = "userId")
SpaceMemberResponseDto toResponseDto(SpaceMember member);

List<SpaceMemberResponseDto> toResponseDtoList(List<SpaceMember> spaceMembers);
List<SpaceMemberResponseDto> toResponseDtoList(List<SpaceMember> member);

@Mapping(
target = "space",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.fastcampus.jober.space.dto.InviteStatus;
import org.fastcampus.jober.space.dto.request.MemberUpdateRequestDto;
import org.fastcampus.jober.space.dto.response.MemberUpdateResponseDto;
import org.fastcampus.jober.space.dto.response.SpaceMemberListResponseDto;
import org.fastcampus.jober.space.entity.*;
import org.fastcampus.jober.space.repository.InviteStatusRepository;
import org.fastcampus.jober.space.repository.SpaceRepository;
Expand All @@ -24,7 +25,6 @@
import lombok.RequiredArgsConstructor;

import org.fastcampus.jober.space.dto.request.SpaceMemberAddRequestDto;
import org.fastcampus.jober.space.dto.response.SpaceMemberResponseDto;
import org.fastcampus.jober.space.mapper.SpaceMemberMapper;
import org.fastcampus.jober.space.repository.SpaceMemberRepository;
import org.springframework.transaction.annotation.Transactional;
Expand Down Expand Up @@ -140,9 +140,9 @@ public void processSpaceInvitation(Long spaceId, String email, Users user) {
spaceMemberRepository.save(spaceMember);
}

public List<SpaceMemberResponseDto> getSpaceMembers(Long spaceId) {
public List<SpaceMemberListResponseDto> getSpaceMembers(Long spaceId) {
List<SpaceMember> spaceMembers = spaceMemberRepository.findBySpaceId(spaceId);
return spaceMemberMapper.toResponseDtoList(spaceMembers);
return spaceMemberMapper.toMemberResponseDtoList(spaceMembers);
}

@Transactional
Expand Down Expand Up @@ -172,14 +172,14 @@ public MemberUpdateResponseDto updateMember(Long memberId, Long spaceId, MemberU
return spaceMemberMapper.toMemberUpdateResponseDto(member);
}

public List<SpaceMemberResponseDto> getMemberByTag(Long spaceId, String tag, Long userId) {
public List<SpaceMemberListResponseDto> getMemberByTag(Long spaceId, String tag, Long userId) {
spaceRepository.findByIdOrThrow(spaceId);

spaceMemberRepository.findBySpaceIdAndUserId(spaceId, userId)
.orElseThrow(() -> new BusinessException(ErrorCode.FORBIDDEN, "해당 스페이스 멤버만 조회할 수 있습니다."));

List<SpaceMember> members = spaceMemberRepository.findBySpaceIdAndTag(spaceId, tag);
return spaceMemberMapper.toResponseDtoList(members);
return spaceMemberMapper.toMemberResponseDtoList(members);
}

}