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
Expand Up @@ -71,7 +71,7 @@ public CertificationResponseDTO.getSessionIdResponse getSessionId(

sessionManager.openSession(sessionId);
// 세션 생성 직후 만료 시간을 5분으로 설정
timeoutManager.scheduleTimeout(sessionId, Duration.ofMinutes(100));// TODO: 나중에 5분으로 변경
timeoutManager.scheduleTimeout(sessionId, Duration.ofMinutes(10));// TODO: 나중에 5분으로 변경

// 세션 여는 대표자는 제일 먼저 인증
sessionManager.addUserToSession(sessionId, userId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,6 @@ public static PartnershipUsage toPartnershipUsage(PartnershipRequestDTO.finalReq
.partnershipContent(dto.getPartnershipContent())
.build();
}
public static Paper toPaperEntity(
PartnershipRequestDTO.WritePartnershipRequestDTO partnershipRequestDTO,
Admin admin,
Partner partner,
Store store
) {
return Paper.builder()
.partnershipPeriodStart(partnershipRequestDTO.getPartnershipPeriodStart())
.partnershipPeriodEnd(partnershipRequestDTO.getPartnershipPeriodEnd())
.isActivated(ActivationStatus.SUSPEND)
.admin(admin)
.store(store)
.partner(partner)
.build();
}

public static Paper toDraftPaperEntity(Admin admin, Partner partner, Store store) {
return Paper.builder()
Expand Down Expand Up @@ -305,5 +290,6 @@ public static PartnershipResponseDTO.CreateDraftResponseDTO toCreateDraftRespons
public static void updatePaperFromDto(Paper paper, PartnershipRequestDTO.WritePartnershipRequestDTO dto) {
paper.setPartnershipPeriodStart(dto.getPartnershipPeriodStart());
paper.setPartnershipPeriodEnd(dto.getPartnershipPeriodEnd());
paper.setIsActivated(ActivationStatus.SUSPEND);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,48 +59,80 @@ public class PartnershipServiceImpl implements PartnershipService {

@Override
@Transactional
public void recordPartnershipUsage(PartnershipRequestDTO.finalRequest dto, Member member){

Student requestStudent = studentRepository.findById(member.getId()).orElseThrow(
() -> new GeneralException(ErrorStatus.NO_SUCH_STUDENT) // 혹은 적절한 예외 처리
);

List<PartnershipUsage> usages = new ArrayList<>();

public void recordPartnershipUsage(PartnershipRequestDTO.finalRequest dto, Member member) {
// 1. 제휴 내용(PaperContent) 조회
PaperContent content = contentRepository.findById(dto.getContentId()).orElseThrow(
() -> new GeneralException(ErrorStatus.NO_SUCH_CONTENT)
);
Long paperId = content.getPaper().getId();
// 1) 요청한 member 본인
usages.add(PartnershipConverter.toPartnershipUsage(dto, requestStudent, paperId));
requestStudent.setStamp();
System.out.println("update 된 stamp : "+requestStudent.getStamp());

List<Long> userIds = Optional.ofNullable(dto.getUserIds()).orElse(Collections.emptyList());
// 2) dto의 userIds에 있는 다른 사용자들
for (Long userId : userIds) {
if(userId != member.getId()){
Student student = studentRepository.getReferenceById(userId);
usages.add(PartnershipConverter.toPartnershipUsage(dto, student, paperId));

// 2. 중복을 허용하지 않는 Set을 사용하여 모든 사용자 ID를 수집
Set<Long> uniqueUserIds = new HashSet<>();
// 요청자 본인 ID 추가
uniqueUserIds.add(member.getId());
// DTO에 포함된 사용자 ID들 추가 (null일 경우 무시)
if (dto.getUserIds() != null) {
uniqueUserIds.addAll(dto.getUserIds());
}

// 3. 모든 학생 정보를 DB에서 한 번의 쿼리로 조회 (N+1 문제 해결)
List<Student> studentsToUpdate = studentRepository.findAllById(uniqueUserIds);

// 4. 조회된 학생들에 대해 PartnershipUsage 생성 및 스탬프 업데이트
List<PartnershipUsage> usages = studentsToUpdate.stream()
.map(student -> {
student.setStamp();
}
return PartnershipConverter.toPartnershipUsage(dto, student, paperId);
})
.collect(Collectors.toList());

}
// 5. 생성된 모든 Usage 기록을 한 번에 저장
partnershipUsageRepository.saveAll(usages);

Store store = storeRepository.findById(dto.getStoreId()).orElseThrow(
() -> new GeneralException(ErrorStatus.NO_SUCH_STORE)
);
Partner partner = store.getPartner();
System.out.println("✨partnerId✨ = "+partner.getId());
// if (partner != null) {
// Long partnerId = partner.getId();
// System.out.println("알림 요청이 들어갑니다.");
// notificationService.sendOrder(partnerId, 0L, dto.getTableNumber(), dto.getPartnershipContent());
// partnershipUsageRepository.saveAll(usages);
// } else {
// throw new GeneralException(ErrorStatus.NO_SUCH_PARTNER);
// }
}
// @Transactional 환경에서는 studentsToUpdate의 변경 사항(스탬프)이 자동으로 DB에 반영됩니다.
}
// public void recordPartnershipUsage(PartnershipRequestDTO.finalRequest dto, Member member){
//
// Student requestStudent = studentRepository.findById(member.getId()).orElseThrow(
// () -> new GeneralException(ErrorStatus.NO_SUCH_STUDENT) // 혹은 적절한 예외 처리
// );
//
// List<PartnershipUsage> usages = new ArrayList<>();
//
// PaperContent content = contentRepository.findById(dto.getContentId()).orElseThrow(
// () -> new GeneralException(ErrorStatus.NO_SUCH_CONTENT)
// );
// Long paperId = content.getPaper().getId();
// // 1) 요청한 member 본인
// usages.add(PartnershipConverter.toPartnershipUsage(dto, requestStudent, paperId));
// requestStudent.setStamp();
// System.out.println("update 된 stamp : "+requestStudent.getStamp());
//
// List<Long> userIds = Optional.ofNullable(dto.getUserIds()).orElse(Collections.emptyList());
// // 2) dto의 userIds에 있는 다른 사용자들
// for (Long userId : userIds) {
// if(userId != member.getId()){
// Student student = studentRepository.getReferenceById(userId);
// usages.add(PartnershipConverter.toPartnershipUsage(dto, student, paperId));
// student.setStamp();
// }
//
// }
// partnershipUsageRepository.saveAll(usages);
//
// // Store store = storeRepository.findById(dto.getStoreId()).orElseThrow(
// // () -> new GeneralException(ErrorStatus.NO_SUCH_STORE)
// // );
// // Partner partner = store.getPartner();
// // if (partner != null) {
// // Long partnerId = partner.getId();
// // System.out.println("알림 요청이 들어갑니다.");
// // notificationService.sendOrder(partnerId, 0L, dto.getTableNumber(), dto.getPartnershipContent());
// //
// // } else {
// // throw new GeneralException(ErrorStatus.NO_SUCH_PARTNER);
// // }
// }



Expand Down