View Javadoc
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  }