1 package io.extact.rms.application.domain;
2
3 import static jakarta.persistence.AccessType.*;
4
5 import jakarta.persistence.Access;
6 import jakarta.persistence.Entity;
7 import jakarta.persistence.GeneratedValue;
8 import jakarta.persistence.GenerationType;
9 import jakarta.persistence.Id;
10
11 import org.apache.commons.lang3.builder.ToStringBuilder;
12 import org.apache.commons.lang3.builder.ToStringStyle;
13
14 import lombok.AllArgsConstructor;
15 import lombok.Getter;
16 import lombok.NoArgsConstructor;
17 import lombok.Setter;
18
19 import io.extact.rms.application.domain.constraint.ItemName;
20 import io.extact.rms.application.domain.constraint.RmsId;
21 import io.extact.rms.application.domain.constraint.SerialNo;
22 import io.extact.rms.application.domain.constraint.ValidationGroups.Update;
23
24 @Access(FIELD)
25 @Entity
26 @Getter
27 @Setter
28 @NoArgsConstructor
29 @AllArgsConstructor(staticName = "of")
30 public class RentalItem implements Transformable, IdAccessable {
31
32
33 @Id
34 @GeneratedValue(strategy = GenerationType.IDENTITY)
35 @RmsId(groups = Update.class)
36 private Integer id;
37
38
39 @SerialNo
40 private String serialNo;
41
42
43 @ItemName
44 private String itemName;
45
46
47 public static RentalItem ofTransient(String serialNo, String itemName) {
48 return of(null, serialNo, itemName);
49 }
50
51
52
53 @Override
54 public String toString() {
55 return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
56 }
57 }