Task.java

package fr.tiogars.chat.client;

import java.time.Instant;

/**
 * Represents a Task returned by the Task API.
 *
 * @param id persistent identifier
 * @param code unique template code
 * @param label display label
 * @param description optional description
 * @param createdDate creation timestamp
 * @param lastModifiedDate last modification timestamp
 * @param createdBy username at creation
 * @param lastModifiedBy username at the last modification
 * @since 0.1.0
 */
public record Task(
        Long id,
        String code,
        String label,
        String description,
        Instant createdDate,
        Instant lastModifiedDate,
        String createdBy,
        String lastModifiedBy,
        TaskStatus status,
        TaskPriority priority,
        java.time.LocalDate dueDate,
        String assignedTo,
        java.util.List<Long> tagIds,
        Long nomenclatureId
) {
    public Task {
        status = status == null ? TaskStatus.TODO : status;
        priority = priority == null ? TaskPriority.NORMAL : priority;
        tagIds = tagIds == null ? java.util.List.of() : java.util.List.copyOf(tagIds);
    }

    public Task(Long id, String code, String label, String description,
            Instant createdDate, Instant lastModifiedDate, String createdBy, String lastModifiedBy) {
        this(id, code, label, description, createdDate, lastModifiedDate, createdBy, lastModifiedBy,
                TaskStatus.TODO, TaskPriority.NORMAL, null, null, java.util.List.of(), null);
    }
    /**
     * Creates a template without audit actors for compatibility with older API responses.
     *
     * @param id persistent identifier
     * @param code unique template code
     * @param label display label
     * @param description optional description
     * @param createdDate creation timestamp
     * @param lastModifiedDate last modification timestamp
     */
    public Task(Long id, String code, String label, String description,
            Instant createdDate, Instant lastModifiedDate) {
        this(id, code, label, description, createdDate, lastModifiedDate, null, null);
    }
}