Files
GerbilManager/GerbilManagerWebAPI/Dtos/CmsDtos.cs
Gulum 94f055f9bf WEB-0: CMS content model + /api/site-snapshot + Page/Block CRUD
- Entities: Site (singleton, navOrder JSON), Page (slug/title/seoDescription/status enum),
  Block (single table, Type enum + Data JSON; RichText=Markdown), Media. Migration
  AddCmsEntities, seeds 6 Jimdo-mirror pages (placeholder Heading each; abgabetiere also an
  auto AbgabetiereList block) + Site singleton nav.
- GET /api/site-snapshot: one JSON doc (site nav + pages + ordered blocks {id,order,type,data});
  AbgabetiereList(auto) resolved from live ForSale gerbils -> {name, farbschlag, group(=Becken),
  photos[urls], aiSaleText:null} (no price per god). SiteSnapshotService.
- CRUD: GET/POST/PUT/DELETE pages; add/update/delete blocks; PUT .../blocks/order reorder.
  Block type allowlisted by enum; data validated as JSON object.
2026-06-06 09:21:20 +02:00

27 lines
1.0 KiB
C#

using System.Text.Json;
using System.Text.Json.Nodes;
using GerbilManagerWebAPI.Models;
namespace GerbilManagerWebAPI.Dtos
{
// Response DTOs ----------------------------------------------------------
public record PageSummaryDto(Guid Id, string Slug, string Title, string? SeoDescription, PageStatus Status);
public record PageDto(
Guid Id, string Slug, string Title, string? SeoDescription, PageStatus Status,
IReadOnlyList<BlockDto> Blocks);
/// <summary>Block.Data is emitted as a parsed JSON object (not a string).</summary>
public record BlockDto(Guid Id, int Order, BlockType Type, JsonNode? Data);
// Request DTOs -----------------------------------------------------------
public record PageInput(string Slug, string Title, string? SeoDescription, PageStatus? Status);
/// <summary>Data is the type-specific JSON object (e.g. {"markdown":"…"} for RichText).</summary>
public record BlockInput(BlockType Type, JsonElement Data, int? Order);
public record BlockOrderInput(List<Guid> BlockIds);
}