AuditLog.java

package com.edtech.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.time.LocalDateTime;
import java.util.UUID;
import org.hibernate.annotations.Filter;
import org.hibernate.annotations.FilterDef;
import org.hibernate.annotations.ParamDef;

/** Documentação para AuditLog. */
@Entity
@Table(name = "audit_logs")
@FilterDef(name = "tenantFilter", parameters = @ParamDef(name = "institutionId", type = UUID.class))
@Filter(name = "tenantFilter", condition = "institution_id = :institutionId")
public class AuditLog {

  @Id
  @GeneratedValue(strategy = GenerationType.UUID)
  @Column(unique = true, nullable = false, updatable = false)
  private UUID id;

  @Column(name = "institution_id", nullable = false, updatable = false)
  private UUID institutionId;

  @Column(name = "user_id", nullable = false, updatable = false)
  private UUID userId;

  @Enumerated(EnumType.STRING)
  @Column(nullable = false, updatable = false)
  private AuditAction action;

  @Column(name = "resource_type", nullable = false, updatable = false)
  private String resourceType;

  @Column(name = "resource_id", nullable = false, updatable = false)
  private UUID resourceId;

  @Column(name = "ip_address", nullable = false, updatable = false)
  private String ipAddress;

  @Column(updatable = false)
  private String details;

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

  /** Documentação para o método getId. */
  public UUID getId() {
    return id;
  }

  /** Documentação para o método getUserId. */
  public UUID getUserId() {
    return userId;
  }

  /** Documentação para o método getAction. */
  public AuditAction getAction() {
    return action;
  }

  /** Documentação para o método getResourceType. */
  public String getResourceType() {
    return resourceType;
  }

  /** Documentação para o método getResourceId. */
  public UUID getResourceId() {
    return resourceId;
  }

  /** Documentação para o método getIpAddress. */
  public String getIpAddress() {
    return ipAddress;
  }

  /** Documentação para o método getDetails. */
  public String getDetails() {
    return details;
  }

  /** Documentação para o método getCreatedAt. */
  public LocalDateTime getCreatedAt() {
    return createdAt;
  }

  /** Documentação para o método AuditLog. */
  protected AuditLog() {}

  /** Documentação. */
  public AuditLog(
      UUID institutionId,
      UUID userId,
      AuditAction action,
      String resourceType,
      UUID resourceId,
      String ipAddress,
      String details) {
    this.institutionId = institutionId;
    this.userId = userId;
    this.action = action;
    this.resourceType = resourceType;
    this.resourceId = resourceId;
    this.ipAddress = ipAddress;
    this.details = details;
    onCreate();
  }

  private void onCreate() {
    this.createdAt = LocalDateTime.now();
  }
}