package com.caliverse.admin.mongodb.domain;

import com.caliverse.admin.domain.entity.log.LogAction;
import com.caliverse.admin.domain.entity.log.LogCategory;
import com.caliverse.admin.domain.entity.log.LogStatus;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import java.time.LocalDateTime;

@Document(collection = "businessLog")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BusinessLog {
    @Id
    private String id;

    @Indexed
    private LocalDateTime logTime;

    @Indexed
    private LogCategory category;

    @Indexed
    private LogAction action;

    @Indexed
    private LogStatus status;

    private String worker;
    private String workerIp;

    private String message;

    private String procId;

    @JsonIgnoreProperties(value = {"messageContent"}, allowSetters = true)
    private Object domain;

    @CompoundIndex(def = "{'category': 1, 'action': 1, 'logTime': -1}")
    @CompoundIndex(def = "{'status': 1, 'logTime': -1}")
    @CompoundIndex(def = "{'procId': 1, 'logTime': -1}")
    @CompoundIndex(def = "{'category': 1, 'logTime': -1}")
    @CompoundIndex(def = "{'action': 1, 'logTime': -1}")
    public static class Indexes {}
}
