EbookPurchase.java

package qwerty.chaekit.domain.ebook.purchase;

import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import qwerty.chaekit.domain.BaseEntity;
import qwerty.chaekit.domain.ebook.Ebook;
import qwerty.chaekit.domain.ebook.credit.usage.CreditUsageTransaction;
import qwerty.chaekit.domain.member.user.UserProfile;

@Entity
@Getter
@Table(name = "ebook_purchase")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class EbookPurchase extends BaseEntity {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="book_id")
    private Ebook ebook;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="user_id")
    private UserProfile user;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="credit_usage_transaction_id")
    private CreditUsageTransaction creditUsageTransaction;

    @Column
    private String cfi;

    @Column
    private long percentage = 0L;

    @Builder
    public EbookPurchase(Ebook ebook, UserProfile user, CreditUsageTransaction transaction,String cfi, long percentage) {
        this.ebook = ebook;
        this.user = user;
        this.creditUsageTransaction = transaction;
        this.cfi = cfi;
        this.percentage = percentage;
    }

    public void saveProgress(String cfi, long percentage) {
        this.cfi = cfi;
        this.percentage = percentage;
    }
}