SessionPass.java

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

import com.deveagles.be15_deveagles_be.features.shops.command.domain.aggregate.Shop;
import jakarta.persistence.*;
import java.time.LocalDateTime;
import lombok.*;

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

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

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "shop_id", nullable = false)
  private Shop shopId;

  @Column(name = "secondary_item_id", nullable = false)
  private Long secondaryItemId;

  @Column(name = "session_pass_name", length = 100, nullable = false)
  private String sessionPassName;

  @Column(name = "session_pass_price", nullable = false)
  private Integer sessionPassPrice;

  @Column(name = "session", nullable = false)
  private Integer session;

  @Column(name = "expiration_period", nullable = false)
  private Integer expirationPeriod;

  @Enumerated(EnumType.STRING)
  @Column(name = "expiration_period_type", nullable = false)
  private ExpirationPeriodType expirationPeriodType;

  @Column(name = "bonus")
  private Integer bonus;

  @Column(name = "discount_rate")
  private Integer discountRate;

  @Column(name = "session_pass_memo", length = 255)
  private String sessionPassMemo;

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

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

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

  public void updateSessionPass(
      String SessionPassName,
      Long SecondaryItemId,
      Integer SessionPassPrice,
      Integer Session,
      Integer expirationPeriod,
      ExpirationPeriodType expirationPeriodType,
      Integer bonus,
      Integer discountRate,
      String sessionPassMemo) {
    this.sessionPassName = SessionPassName;
    this.secondaryItemId = SecondaryItemId;
    this.sessionPassPrice = SessionPassPrice;
    this.session = Session;
    this.expirationPeriod = expirationPeriod;
    this.expirationPeriodType = expirationPeriodType;
    this.bonus = bonus;
    this.discountRate = discountRate;
    this.sessionPassMemo = sessionPassMemo;
    this.modifiedAt = LocalDateTime.now();
  }

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