Add JPA entities

This commit is contained in:
2026-05-30 09:54:09 -06:00
parent 80fc9230a7
commit ae4019e34c
3 changed files with 146 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
/**
* Note.java
*
* JPA entity representing a user-authored note.
*/
package com.seanstarkey.notesvault.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.UuidGenerator;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@Entity
@Table(name = "notes")
@EntityListeners(AuditingEntityListener.class)
@Getter
@Setter
@NoArgsConstructor
public class Note {
@Id
@UuidGenerator
@Column(updatable = false, nullable = false)
private UUID id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "owner_id", nullable = false)
private User owner;
@Column(nullable = false, length = 255)
private String title;
@Column(nullable = false, columnDefinition = "TEXT")
private String content;
/** Timestamp set once when the record is first persisted. */
@CreatedDate
@Column(nullable = false, updatable = false)
private Instant createdAt;
@LastModifiedDate
@Column(nullable = false)
private Instant updatedAt;
@OneToMany(mappedBy = "note", cascade = CascadeType.ALL, orphanRemoval = true)
private List<NoteShare> shares = new ArrayList<>();
}

View File

@@ -0,0 +1,49 @@
/**
* NoteShare.java
*
* JPA entity representing a read-only share grant between a note and a user.
*/
package com.seanstarkey.notesvault.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.UuidGenerator;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.Instant;
import java.util.UUID;
@Entity
@Table(
name = "note_shares",
uniqueConstraints = @UniqueConstraint(
name = "uq_note_shares_note_user",
columnNames = {"note_id", "shared_with_user_id"}
)
)
@EntityListeners(AuditingEntityListener.class)
@Getter
@Setter
@NoArgsConstructor
public class NoteShare {
@Id
@UuidGenerator
@Column(updatable = false, nullable = false)
private UUID id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "note_id", nullable = false)
private Note note;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "shared_with_user_id", nullable = false)
private User sharedWith;
@CreatedDate
@Column(nullable = false, updatable = false)
private Instant createdAt;
}

View File

@@ -0,0 +1,41 @@
/**
* User.java
*
* JPA entity representing an application user.
*/
package com.seanstarkey.notesvault.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.UuidGenerator;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.Instant;
import java.util.UUID;
@Entity
@Table(name = "users")
@EntityListeners(AuditingEntityListener.class)
@Getter
@Setter
@NoArgsConstructor
public class User {
@Id
@UuidGenerator
@Column(updatable = false, nullable = false)
private UUID id;
@Column(nullable = false, unique = true, length = 100)
private String username;
@Column(nullable = false)
private String passwordHash;
@CreatedDate
@Column(nullable = false, updatable = false)
private Instant createdAt;
}