-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNote.java
More file actions
107 lines (91 loc) · 2.94 KB
/
Note.java
File metadata and controls
107 lines (91 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package some;
import io.github.petrknap.persistence.zoneddatetime.UtcWithLocal;
import io.github.petrknap.persistence.zoneddatetime.UtcWithSystemTimezone;
import io.github.petrknap.persistence.zoneddatetime.UtcWithTimezone;
import io.github.petrknap.persistence.zoneddatetime.UtcDateTimeConverter;
import jakarta.persistence.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.time.ZoneId;
import java.time.ZonedDateTime;
@Entity
@Table(name = "notes")
final public class Note
{
@Id
@Column
@GeneratedValue(strategy = GenerationType.IDENTITY)
private @Nullable Long id;
/**
* Example: UTC date-time with local date-time
*/
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "utc", column = @Column(name = "created_at__utc")),
@AttributeOverride(name = "local", column = @Column(name = "created_at__local"))
})
private @NotNull UtcWithLocal createdAt;
/**
* Example: UTC date-time with timezone
*/
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "utc", column = @Column(name = "created_at_2__utc")),
@AttributeOverride(name = "timezone", column = @Column(name = "created_at_2__timezone"))
})
private @NotNull UtcWithTimezone createdAt2;
/**
* Example: UTC date-time with system timezone
*/
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "utc", column = @Column(name = "created_at_3__utc"))
})
private @NotNull UtcWithSystemTimezone createdAt3;
/**
* Example: nullable embeddable
*/
@Embedded
private @Nullable UtcWithLocal deletedAt;
/**
* Example: UTC date-time converter
*/
@Column(nullable = false)
@Convert(converter = UtcDateTimeConverter.class)
public @NotNull ZonedDateTime createdAtUtc;
/**
* Example: converted nullable
*/
@Column
@Convert(converter = UtcDateTimeConverter.class)
public @Nullable ZonedDateTime deletedAtUtc;
@Column(nullable = false)
private @NotNull String content;
public Note(
@NotNull ZonedDateTime createdAt,
@NotNull String content
) {
this.createdAt = new UtcWithLocal(createdAt);
this.createdAt2 = new UtcWithTimezone(createdAt);
this.createdAt3 = new UtcWithSystemTimezone(createdAt);
this.createdAtUtc = createdAt.withZoneSameInstant(ZoneId.of("UTC"));
this.content = content;
}
private Note() {}
public @NotNull ZonedDateTime getCreatedAt()
{
return createdAt.toZonedDateTime();
}
public @NotNull ZonedDateTime getCreatedAt2()
{
return createdAt2.toZonedDateTime();
}
public @NotNull ZonedDateTime getCreatedAt3()
{
return createdAt2.toZonedDateTime();
}
public @Nullable ZonedDateTime getDeletedAt()
{
return deletedAt != null ? deletedAt.toZonedDateTime() : null;
}
}