package com.paymentlink.model.entity; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDateTime; @Entity @Table(name = "exchange_rates", indexes = @Index(name = "idx_currency_pair", columnList = "fromCurrency,toCurrency")) @Data @NoArgsConstructor @AllArgsConstructor @Builder public class ExchangeRate { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, length = 3) private String fromCurrency; // "USD" @Column(nullable = false, length = 3) private String toCurrency; // "EUR", "GBP", etc. @Column(nullable = false) private Double rate; // Exchange rate (e.g., 0.92 for USD to EUR) @Column(nullable = false) private LocalDateTime fetchedAt; @Column(nullable = false) private LocalDateTime expiresAt; // Cache for 1 hour // For load balancing - prevents duplicate refresh jobs @Version private Long version; }