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 @@ -9,6 +9,7 @@
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@RequiredArgsConstructor
@RequestMapping("/api/invitation")
Expand All @@ -34,4 +35,12 @@ public ResponseEntity<?> createInvitation(
return invitationService.createInvitation(dto, memberId);
}

@GetMapping
public ResponseEntity<Success<List<InvitationResponse.ListDTO>>> getInvitations() {

Long memberId = 1L; // TODO: JWT 토큰에서 추출한 값으로 수정

return invitationService.getInvitations(memberId);
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.livable.server.invitation.dto;

import com.livable.server.entity.Invitation;
import com.livable.server.entity.Office;
import lombok.*;

Expand Down Expand Up @@ -60,4 +61,17 @@ private static String getFormattedPlaceName(String name, String floor, String ro
return String.format("%s (%s층 %s호)", name, floor, roomNumber);
}

@Getter
@AllArgsConstructor
public static class ListDTO {
private Long invitationId;
private String visitorName;
private Long visitorCount;
private String purpose;
private String officeName;
private LocalDate startDate;
private LocalTime startTime;
private LocalTime endTime;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.livable.server.invitation.repository;

import com.livable.server.invitation.dto.InvitationResponse;

import java.util.List;

public interface InvitationQueryRepository {
List<InvitationResponse.ListDTO> findInvitationsByMemberId(Long memberId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.livable.server.invitation.repository;

import com.livable.server.entity.QVisitor;
import com.livable.server.invitation.dto.InvitationResponse;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;

import java.time.LocalDate;
import java.util.List;

import static com.livable.server.entity.QInvitation.invitation;
import static com.livable.server.entity.QVisitor.visitor;

@RequiredArgsConstructor
public class InvitationQueryRepositoryImpl implements InvitationQueryRepository {

private final JPAQueryFactory queryFactory;

@Override
public List<InvitationResponse.ListDTO> findInvitationsByMemberId(Long memberId) {
QVisitor subVisitorForMaxId = new QVisitor("subVisitor");
QVisitor subVisitor = new QVisitor("subVisitor");

return queryFactory
.select(Projections.constructor(InvitationResponse.ListDTO.class,
visitor.invitation.id,
JPAExpressions
.select(subVisitor.name)
.from(subVisitor)
.where(subVisitor.id.eq(
JPAExpressions
.select(subVisitorForMaxId.id.min())
.from(subVisitorForMaxId)
.where(subVisitorForMaxId.invitation.id.eq(visitor.invitation.id))
)),
visitor.invitation.id.count(),
invitation.purpose,
invitation.officeName,
invitation.startDate,
invitation.startTime,
invitation.endTime
))
.from(visitor)
.innerJoin(invitation)
.on(
visitor.invitation.id.eq(invitation.id),
invitation.member.id.eq(memberId),
invitation.startDate.goe(LocalDate.now())
)
.groupBy(visitor.invitation.id)
.orderBy(invitation.startDate.asc(), invitation.startTime.asc())
.fetch();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@

import java.util.Optional;

public interface InvitationRepository extends JpaRepository<Invitation, Long> {
public interface InvitationRepository extends JpaRepository<Invitation, Long>, InvitationQueryRepository {

@Query("select i.startTime as startTime, i.endTime as endTime, i.startDate as startDate, i.endDate as endDate" +
" from Visitor v" +
" join fetch Invitation i" +
" on v.invitation = i" +
" where v.id = :visitorId")
Optional<InvitationDetailTimeDto> findInvitationDetailTimeByVisitorId(@Param("visitorId") Long visitorId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -221,4 +221,12 @@ private void createInvitationReservationMap(List<Reservation> reservations, Invi
invitationReservationMapRepository.save(invitationReservationMap);
}
}

@Transactional(readOnly = true)
public ResponseEntity<Success<List<InvitationResponse.ListDTO>>> getInvitations(Long memberId) {
Member member = findMemberById(memberId);
List<InvitationResponse.ListDTO> invitationDTOs = invitationRepository.findInvitationsByMemberId(member.getId());

return ApiResponse.success(invitationDTOs, HttpStatus.OK);
}
}