SecondaryItem.java

package com.deveagles.be15_deveagles_be.features.items.command.domain.aggregate;

import jakarta.persistence.*;
import java.time.LocalDateTime;
import lombok.*;

@Entity
@Table(name = "secondary_item")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class SecondaryItem {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "secondary_item_id")
  private Long secondaryItemId;

  @Column(name = "primary_item_id", nullable = false)
  private Long primaryItemId;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "primary_item_id", insertable = false, updatable = false)
  private PrimaryItem primaryItem;

  @Column(name = "secondary_item_name")
  private String secondaryItemName;

  @Column(name = "secondary_item_price")
  private Integer secondaryItemPrice;

  @Column(name = "is_active", nullable = false)
  private Boolean isActive;

  @Column(name = "time_taken")
  private Integer timeTaken;

  @Column(name = "created_at", nullable = false)
  private LocalDateTime createdAt;

  @Column(name = "modified_at", nullable = false)
  private LocalDateTime modifiedAt;

  @Column(name = "deleted_at")
  private LocalDateTime deletedAt;

  @PrePersist
  public void prePersist() {
    this.createdAt = LocalDateTime.now();
    this.modifiedAt = LocalDateTime.now();
  }

  public void updateSecondaryItem(
      String secondaryItemName, Integer secondaryItemPrice, Integer timeTaken, boolean isActive) {
    this.secondaryItemName = secondaryItemName;
    this.secondaryItemPrice = secondaryItemPrice;
    this.timeTaken = timeTaken;
    this.isActive = isActive;
  }

  public void setModifiedAt() {
    this.modifiedAt = LocalDateTime.now();
  }

  public void setDeletedAt() {
    this.deletedAt = LocalDateTime.now();
  }
}