1 package io.extact.rms.external.webapi.dto; 2 3 import java.time.LocalDateTime; 4 5 import org.apache.commons.lang3.builder.ToStringBuilder; 6 import org.apache.commons.lang3.builder.ToStringStyle; 7 import org.eclipse.microprofile.openapi.annotations.media.Schema; 8 9 import lombok.Getter; 10 import lombok.Setter; 11 12 import io.extact.rms.application.domain.Reservation; 13 import io.extact.rms.application.domain.constraint.BeforeAfterDateTime; 14 import io.extact.rms.application.domain.constraint.Note; 15 import io.extact.rms.application.domain.constraint.ReserveEndDateTime; 16 import io.extact.rms.application.domain.constraint.ReserveStartDateTime; 17 import io.extact.rms.application.domain.constraint.RmsId; 18 import io.extact.rms.application.domain.constraint.BeforeAfterDateTime.BeforeAfterDateTimeValidatable; 19 20 @Schema(description = "予約DTO") 21 @Getter 22 @Setter 23 @BeforeAfterDateTime(from = "利用開始日時", to = "利用終了日時") 24 public class ReservationResourceDto implements BeforeAfterDateTimeValidatable { 25 26 @RmsId 27 @Schema(required = true) 28 private Integer id; 29 30 @Schema(required = true, ref = "#/components/schemas/localDateTime") 31 @ReserveStartDateTime 32 private LocalDateTime startDateTime; 33 34 @Schema(required = true, ref = "#/components/schemas/localDateTime") 35 @ReserveEndDateTime 36 private LocalDateTime endDateTime; 37 38 @Note 39 @Schema(required = false) 40 private String note; 41 42 @RmsId 43 @Schema(required = true) 44 private int rentalItemId; 45 46 @RmsId 47 @Schema(required = true) 48 private int userAccountId; 49 50 @Schema(required = false) 51 private UserAccountResourceDto userAccountDto; 52 53 @Schema(required = false) 54 private RentalItemResourceDto rentalItemDto; 55 56 public static ReservationResourceDto toDto(Reservation entity) { 57 if (entity == null) { 58 return null; 59 } 60 var dto = new ReservationResourceDto(); 61 dto.setId(entity.getId()); 62 dto.setStartDateTime(entity.getStartDateTime()); 63 dto.setEndDateTime(entity.getEndDateTime()); 64 dto.setNote(entity.getNote()); 65 dto.setRentalItemId(entity.getRentalItemId()); 66 dto.setUserAccountId(entity.getUserAccountId()); 67 if (entity.getRentalItem() != null) { 68 dto.setRentalItemDto(entity.getRentalItem().transform(RentalItemResourceDto::toDto)); 69 } 70 if (entity.getUserAccount() != null) { 71 dto.setUserAccountDto(entity.getUserAccount().transform(UserAccountResourceDto::toDto)); 72 } 73 return dto; 74 } 75 76 public Reservation toEntity() { 77 var reservation = Reservation.of(id, startDateTime, endDateTime, note, rentalItemId, userAccountId); 78 if (rentalItemDto != null) { 79 reservation.setRentalItem(rentalItemDto.toEntity()); 80 } 81 if (userAccountDto != null) { 82 reservation.setUserAccount(userAccountDto.toEntity()); 83 } 84 return reservation; 85 } 86 87 @Override 88 public String toString() { 89 return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); 90 } 91 92 }