package cloud.nstart.terravault.ordinis.restapi.dto;

import com.fasterxml.jackson.databind.JsonNode;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

/**
 * Inline single-field schema edit per backend #4 в pending-endpoints brief.
 *
 * <p>Structured op (вместо JSON Patch RFC 6902) — более ergonomic для UI
 * Fields tab inline edit. Frontend каждый field row кликает "edit" → form
 * показывает только allowed (non-breaking) changes → submits эти deltas.
 *
 * @param expectedHeadVersion optimistic-lock — schema_version текущий
 *                             head. Если в БД другой → 409 version_mismatch.
 * @param field        property name внутри schema.properties (например
 *                     "altitude").
 * @param changes      key→value pairs изменения. Allowed keys:
 *                     description, title, minimum, maximum, enum (только
 *                     additions). Breaking keys (type, format, x-references)
 *                     → 422.
 */
public record PatchSchemaRequest(
    @NotBlank String expectedHeadVersion,
    @NotBlank String field,
    @NotNull JsonNode changes) {}
