using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Deploymentcenter.Client.Models
{
///
/// Model for per-package manifest.json stored inside package.tar.gz
/// and beside it on the LEMP release server.
///
public class PackageManifest
{
[JsonPropertyName("projectId")]
public string ProjectId { get; set; } = string.Empty;
[JsonPropertyName("version")]
public string Version { get; set; } = string.Empty;
[JsonPropertyName("channel")]
public string Channel { get; set; } = "prod";
///
/// Laufzeitkennung des Pakets ("win-x64", "linux-x64", ...) oder
/// "any". Fehlt das Feld, stammt das Manifest aus der Zeit vor der
/// Plattform-Dimension und gilt als plattformunabhaengig.
///
[JsonPropertyName("platform")]
public string Platform { get; set; } = PlatformId.Any;
[JsonPropertyName("buildDate")]
public string BuildDate { get; set; } = string.Empty;
[JsonPropertyName("gitCommit")]
public string GitCommit { get; set; } = string.Empty;
[JsonPropertyName("gitCommitShort")]
public string GitCommitShort { get; set; } = string.Empty;
[JsonPropertyName("changelog")]
public string Changelog { get; set; } = string.Empty;
///
/// Muster fuer Dateien, die zwar im Paket liegen, eine vorhandene
/// Datei am Ziel aber nicht ersetzen duerfen - typischerweise
/// Konfigurationsvorlagen wie appsettings.json.
///
/// Ausschluss beim Packen und Schutz beim Anwenden sind zwei
/// verschiedene Dinge. Wer eine Konfigurationsvorlage ausliefern will,
/// kann sie nicht einfach vom Paket ausnehmen; sie darf nur beim
/// Update nicht ueber die eingerichtete Fassung des Zielsystems
/// geschrieben werden.
///
[JsonPropertyName("preserve")]
public List Preserve { get; set; } = new List();
[JsonPropertyName("files")]
public List Files { get; set; } = new List();
}
///
/// File entry item inside manifest.json for integrity checking and repair.
///
public class PackageFileEntry
{
[JsonPropertyName("path")]
public string Path { get; set; } = string.Empty;
[JsonPropertyName("sha256")]
public string Sha256 { get; set; } = string.Empty;
[JsonPropertyName("sizeBytes")]
public long SizeBytes { get; set; }
}
}