using System.ComponentModel.DataAnnotations;
using System.Text.Json;
namespace WordVersioning.Api.Models;
/// body ของ POST /api/documents/{documentId}/versions (multipart/form-data)
public class UploadVersionRequest
{
[Required]
public IFormFile File { get; set; } = null!;
/// GUID ที่ client generate ต่อ version — ใช้เป็นส่วนหนึ่งของ object key
[Required]
public string ClientVersionId { get; set; } = string.Empty;
/// JSON object map tag→text จาก content controls (FR-11)
public string? Fields { get; set; }
}
public record UploadVersionResponse(Guid VersionId, int VersionNumber);
/// body ของ POST /api/documents/generate (FR-10)
public class GenerateDocumentRequest
{
[Required]
public Guid TemplateId { get; set; }
/// map fieldKey → value (ค่า scalar ทั้งหมด)
public JsonElement Values { get; set; }
}
public record GenerateDocumentResponse(Guid DocumentId, Guid VersionId, int VersionNumber, string DownloadUrl);
/// item ของ version history — fields คือ snapshot ที่ parse แล้ว (ถ้ามี)
public record VersionListItem(
Guid VersionId,
int VersionNumber,
DateTimeOffset CreatedAt,
string CreatedByUserId,
string ContentHash,
object? Fields);
/// response ของ GET .../download-link — presigned URL อายุสั้นให้เปิดในเบราว์เซอร์ของผู้ใช้
public record VersionDownloadLinkResponse(string Url, DateTimeOffset ExpiresAt);