ShoppingList.java
package com.oliwier.listmebackend.domain.model;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@Entity
@Table(name = "lists")
@Getter @Setter @NoArgsConstructor
public class ShoppingList {
@Id
private UUID id;
@Column(nullable = false, length = 255)
private String name;
@Column(nullable = false, length = 10)
private String emoji = "\uD83D\uDED2"; // 🛒
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "created_by_device", nullable = false, updatable = false)
private Device createdByDevice;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
@Column(name = "share_token", unique = true, length = 16)
private String shareToken;
@OneToMany(mappedBy = "list", cascade = CascadeType.ALL, orphanRemoval = true)
@OrderBy("position")
private List<Item> items = new ArrayList<>();
@OneToMany(mappedBy = "list", cascade = CascadeType.ALL, orphanRemoval = true)
private List<ListDevice> listDevices = new ArrayList<>();
@Column(name = "created_at", nullable = false, updatable = false)
private Instant createdAt;
@Column(name = "updated_at", nullable = false)
private Instant updatedAt;
@PrePersist
void prePersist() {
if (id == null) id = UUID.randomUUID();
Instant now = Instant.now();
if (createdAt == null) createdAt = now;
if (updatedAt == null) updatedAt = now;
}
@PreUpdate
void preUpdate() {
updatedAt = Instant.now();
}
}