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
@@ -1,5 +1,6 @@
package com.wedit.weditapp.domain.invitation.domain.repository;

import java.util.List;
import java.util.Optional;

import com.wedit.weditapp.domain.invitation.domain.Invitation;
Expand All @@ -11,5 +12,8 @@ public interface InvitationRepository extends JpaRepository<Invitation, Long> {
Optional<Invitation> findByUniqueId(String uniqueId);

Optional<Invitation> findByIdAndMember(Long InvitationId, Member member);

// 해당 회원의 청첩장 생성일 순으로 조회
List<Invitation> findByMemberIdOrderByCreatedAtAsc(Long memberId);
}

Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,11 @@
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import com.wedit.weditapp.domain.bankAccounts.domain.BankAccount;
import com.wedit.weditapp.domain.bankAccounts.dto.BankAccountDto;
import com.wedit.weditapp.domain.bankAccounts.service.BankAccountService;
import com.wedit.weditapp.domain.comment.domain.Comment;
import com.wedit.weditapp.domain.comment.domain.repository.CommentRepository;
import com.wedit.weditapp.domain.comment.dto.response.CommentResponseDto;
import com.wedit.weditapp.domain.comment.dto.response.PagedCommentResponseDto;
import com.wedit.weditapp.domain.comment.service.CommentService;
import com.wedit.weditapp.domain.decision.service.DecisionService;
import com.wedit.weditapp.domain.image.dto.response.ImageResponseDto;
Expand Down Expand Up @@ -43,6 +41,8 @@ public class InvitationService {
private final CommentService commentService;
private final DecisionService decisionService;
private final CommentRepository commentRepository;
private static final int MAX_INVITATIONS = 10;


// 청첩장 정보 등록 -> 생성
public Void createInvitation(UserDetails userDetails, InvitationCreateRequestDto invitationRequest, List<MultipartFile> images) {
Expand Down Expand Up @@ -82,6 +82,9 @@ public Void createInvitation(UserDetails userDetails, InvitationCreateRequestDto
// 이미지 저장
imageService.saveImages(images, invitation);

// 초대장 생성 후, 회원의 청첩장 개수를 확인하고 초과된 청첩장 삭제
cleanUpExcessInvitations(userDetails);

return null;
}

Expand All @@ -103,6 +106,23 @@ public InvitationResponseDto getInvitation(UserDetails userDetails, Long invitat
.collect(Collectors.toList()));
}

// 청첩장 목록 조회 (생성일 기준 오름차순)
public List<InvitationResponseDto> getMemberInvitations(UserDetails userDetails) {
Member member = getMember(userDetails);
List<Invitation> invitations = invitationRepository.findByMemberIdOrderByCreatedAtAsc(member.getId());

return invitations.stream()
.map(invitation -> InvitationResponseDto.from(
invitation,
bankAccountService.getBankAccounts(invitation),
imageService.getImages(invitation),
commentRepository.findByInvitation(invitation).stream()
.map(CommentResponseDto::from)
.collect(Collectors.toList())
))
.collect(Collectors.toList());
}

// 청첩장 수정
public void updateInvitation(UserDetails userDetails, Long invitationId, InvitationUpdateRequestDto updateRequest, List<MultipartFile> newImages) {
Member member = getMember(userDetails);
Expand Down Expand Up @@ -202,6 +222,25 @@ public void deleteInvitation(UserDetails userDetails, Long invitationId) {
invitationRepository.delete(invitation);
}

// 10개 초과된 청첩장 삭제
public void cleanUpExcessInvitations(UserDetails userDetails) {
Member member = getMember(userDetails);
Long memberId = member.getId();

List<Invitation> invitations = invitationRepository.findByMemberIdOrderByCreatedAtAsc(memberId);
if (invitations.size() > MAX_INVITATIONS) {
int excessCount = invitations.size() - MAX_INVITATIONS;
List<Invitation> excessInvitations = invitations.subList(0, excessCount);
List<Long> excessInvitationIds = excessInvitations.stream()
.map(Invitation::getId)
.collect(Collectors.toList());

for (Long invitationId : excessInvitationIds) {
deleteInvitation(userDetails, invitationId);
}
}
}

// 비회원 청첩장 조회
public InvitationResponseDto getInvitationForGuest(String uniqueId) {
// UUID 기반으로 청첩장 조회
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package com.wedit.weditapp.domain.member.controller;

import com.wedit.weditapp.domain.member.dto.response.MemberResponseDto;
import com.wedit.weditapp.domain.member.service.MemberService;
import com.wedit.weditapp.domain.invitation.dto.response.InvitationResponseDto;
import com.wedit.weditapp.domain.invitation.service.InvitationService;
import com.wedit.weditapp.global.error.ErrorCode;
import com.wedit.weditapp.global.error.exception.CommonException;
import com.wedit.weditapp.global.response.GlobalResponseDto;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.*;

import java.util.List;
Expand All @@ -17,32 +22,19 @@
@RequiredArgsConstructor
public class MemberController {

private final MemberService memberService;
private final InvitationService invitationService;

// 모든 회원 조회 API
@Operation(summary = "모든 회원 조회", description = "등록된 모든 회원의 정보를 조회합니다.")
// 마이페이지 - 해당 회원의 청첩장 목록 불러오기 API
@Operation(summary = "청첩장 목록 조회", description = "해당 회원이 제작한 모든 청첩장들의 정보를 조회합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "404", description = "회원 목록을 찾을 수 없습니다."),
@ApiResponse(responseCode = "404", description = "유저를 찾을 수 없습니다."),
@ApiResponse(responseCode = "500", description = "서버 에러")
})
@GetMapping
public ResponseEntity<GlobalResponseDto<List<MemberResponseDto>>> findAllMembers() {
List<MemberResponseDto> memberResponses = memberService.findAllMembers();
return ResponseEntity.ok(GlobalResponseDto.success(memberResponses));
}

// 단일 회원 조회 API
@Operation(summary = "단일 회원 조회", description = "해당 id를 가진 회원의 정보를 조회합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "404", description = "해당 회원을 찾을 수 없습니다."),
@ApiResponse(responseCode = "500", description = "서버 에러")
})
@GetMapping("/{userId}")
public ResponseEntity<GlobalResponseDto<MemberResponseDto>> findMember(
@PathVariable Long userId) {
MemberResponseDto memberResponse = memberService.findMember(userId);
return ResponseEntity.ok(GlobalResponseDto.success(memberResponse));
@GetMapping("/mypage")
public ResponseEntity<GlobalResponseDto<List<InvitationResponseDto>>> getMemberInvitations(
@AuthenticationPrincipal UserDetails userDetails) {
List<InvitationResponseDto> invitations = invitationService.getMemberInvitations(userDetails);
return ResponseEntity.ok(GlobalResponseDto.success(invitations));
}
}

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.