package com.paymentlink.model.entity; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.UpdateTimestamp; import java.time.LocalDateTime; @Entity @Table(name = "translations", indexes = @Index(name = "idx_translation_lookup", columnList = "entityType,entityId,fieldName,languageCode")) @Data @NoArgsConstructor @AllArgsConstructor @Builder public class Translation { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, length = 50) private String entityType; // "product", "category", "ui" @Column(nullable = false, length = 100) private String entityId; // Product ID, category name, or UI key @Column(nullable = false, length = 50) private String fieldName; // "name", "description", etc. @Column(length = 2, nullable = false) private String languageCode; // ISO 639-1 (e.g., "en", "es", "fr") @Column(columnDefinition = "TEXT", nullable = false) private String translatedText; @CreationTimestamp @Column(name = "created_at", updatable = false) private LocalDateTime createdAt; @UpdateTimestamp @Column(name = "updated_at") private LocalDateTime updatedAt; }