Product.java

package com.flogin.backend.entity;

import jakarta.persistence.*;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.*;
import org.hibernate.proxy.HibernateProxy;

import java.util.Objects;

@Getter
@Setter
@ToString
@RequiredArgsConstructor
@Builder
@Entity
@Table(name = "products")
@AllArgsConstructor
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 100)
    @Size(min = 3, max = 100, message = "Product name must be 3-100 characters")
    private String name;

    @Column(nullable = false)
    @Min(value = 1, message = "Price must be greater than 0")
    @Max(value = 999_999_999, message = "Price must be less than 999,999,999")
    private Long price;

    @Column(nullable = false)
    @Min(value = 0, message = "Quantity must be >= 0")
    @Max(value = 99_999, message = "Quantity must be <= 99,999")
    private Integer quantity;

    @Column(length = 500)
    @Size(max = 500, message = "Description can be up to 500 characters")
    private String description;

    @Column(nullable = false)
    @NotBlank(message = "Category must not be blank")
    private String category;

    @Override
    public final boolean equals(Object o) {
        if (this == o) return true;
        if (o == null) return false;
        Class<?> oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass();
        Class<?> thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass();
        if (thisEffectiveClass != oEffectiveClass) return false;
        Product product = (Product) o;
        return getId() != null && Objects.equals(getId(), product.getId());
    }

    @Override
    public final int hashCode() {
        return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode();
    }
}