4f04f6bf75
Render engine - Add Remotion (code-based) as a 2nd render engine alongside After Effects. node-agent dispatches on Job.Engine; RunRemotion maps bindings -> --props, renders native then ffmpeg-scales to the quality tier (aspect-preserving). - content.projects.render_engine + render_remotion_comp (migration 32); render-svc claim resolves engine and routes (skips .aep for Remotion). - Admin TemplatesAdmin gains an engine picker + Remotion composition id field. Template pack (services/remotion) - 16 branded, Persian (Vazirmatn), color- and text-editable templates, each in 3 aspects (16:9 / 1:1 / 9:16): LogoMotion, Opener, InstaPromo, YouTubeIntro, Slideshow, HappyBirthday, SalePromo, QuoteCard, EventInvite, Countdown, GlitterReveal (editable logo image), NowruzGreeting (animated characters), and 4 cinematic 3D templates via @remotion/three (Hero3D, Nowruz3D, Birthday3D, Promo3D) with reflections + bloom/DOF/vignette. - scripts/seed_remotion_templates.py seeds containers/projects/scenes/colors. Pricing - Rewrite /pricing to the seconds-based model (charge = length x resolution), data-driven from /v1/plans, Toman, broker checkout. Coming-soon - Persian experimental-build overlay on all pages (launch date + countdown). Fixes - middleware matcher bypasses all static asset paths; catalog mapping passes cover image + preview video so real thumbnails render. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
376 lines
8.4 KiB
C#
376 lines
8.4 KiB
C#
namespace FlatRender.ContentSvc.Models.Requests;
|
|
|
|
// ── Taxonomy ─────────────────────────────────────────────────────────────────
|
|
|
|
public record CreateCategoryRequest(
|
|
Guid? ParentId,
|
|
string Name,
|
|
string Slug,
|
|
string? Description,
|
|
string? ImageUrl,
|
|
string? Icon,
|
|
string? MetaTitle,
|
|
string? MetaDescription,
|
|
string? MetaKeywords,
|
|
bool BotFollow,
|
|
int Sort,
|
|
bool IsActive
|
|
);
|
|
|
|
public record UpdateCategoryRequest(
|
|
Guid? ParentId,
|
|
string Name,
|
|
string Slug,
|
|
string? Description,
|
|
string? ImageUrl,
|
|
string? Icon,
|
|
string? MetaTitle,
|
|
string? MetaDescription,
|
|
string? MetaKeywords,
|
|
bool BotFollow,
|
|
int Sort,
|
|
bool IsActive
|
|
);
|
|
|
|
public record CreateTagRequest(
|
|
string Name,
|
|
string? LatinName,
|
|
string Slug,
|
|
string? AppliesToMode,
|
|
bool IsActive
|
|
);
|
|
|
|
public record UpdateTagRequest(
|
|
string Name,
|
|
string? LatinName,
|
|
string Slug,
|
|
string? AppliesToMode,
|
|
bool IsActive
|
|
);
|
|
|
|
public record CreateFontRequest(
|
|
string Name,
|
|
string? OriginalName,
|
|
string? SystemName,
|
|
string? Family,
|
|
int? Weight,
|
|
string? Style,
|
|
string Direction,
|
|
string? FileUrl,
|
|
string? SampleImageUrl,
|
|
bool IsPremium,
|
|
bool IsActive,
|
|
bool InstalledOnNodes,
|
|
int Sort
|
|
);
|
|
|
|
public record UpdateFontRequest(
|
|
string Name,
|
|
string? OriginalName,
|
|
string? SystemName,
|
|
string? Family,
|
|
int? Weight,
|
|
string? Style,
|
|
string Direction,
|
|
string? FileUrl,
|
|
string? SampleImageUrl,
|
|
bool IsPremium,
|
|
bool IsActive,
|
|
bool InstalledOnNodes,
|
|
int Sort
|
|
);
|
|
|
|
public record CreateMusicTrackRequest(
|
|
string Name,
|
|
string? Caption,
|
|
string? Keywords,
|
|
string Url,
|
|
string? WaveformData,
|
|
decimal DurationSec,
|
|
int? Bpm,
|
|
string? Genre,
|
|
string? Mood,
|
|
bool IsPremium,
|
|
bool IsActive,
|
|
int Sort
|
|
);
|
|
|
|
public record UpsertRouteRequest(
|
|
string Slug,
|
|
string? Name = null,
|
|
string? Image = null,
|
|
int Priority = 5,
|
|
DateTime? LastDate = null
|
|
);
|
|
|
|
public record UpsertHomeEventRequest(
|
|
string? Title,
|
|
string? Subtitle,
|
|
string? Description,
|
|
string? Badge,
|
|
string? BadgeClass,
|
|
string? ButtonText,
|
|
string? ButtonUrl,
|
|
string? ButtonClass,
|
|
string? Color,
|
|
string? BackgroundColor,
|
|
string? TextColor,
|
|
string? Image,
|
|
bool IsActive = true,
|
|
int Sort = 0,
|
|
DateTime? StartsAt = null,
|
|
DateTime? EndsAt = null
|
|
);
|
|
|
|
public record UpdateMusicTrackRequest(
|
|
string Name,
|
|
string? Caption,
|
|
string? Keywords,
|
|
string Url,
|
|
string? WaveformData,
|
|
decimal DurationSec,
|
|
int? Bpm,
|
|
string? Genre,
|
|
string? Mood,
|
|
bool IsPremium,
|
|
bool IsActive,
|
|
int Sort
|
|
);
|
|
|
|
// ── Templates ────────────────────────────────────────────────────────────────
|
|
|
|
public record CreateContainerRequest(
|
|
string Slug,
|
|
string Name,
|
|
string? Description,
|
|
string? Keywords,
|
|
string? NewsText,
|
|
string? Image,
|
|
string? Demo,
|
|
string? FullDemo,
|
|
string? MiniDemo,
|
|
string? DemoScriptTag,
|
|
bool IsPublished,
|
|
bool IsPremium,
|
|
bool IsMockup,
|
|
string PrimaryMode,
|
|
int Sort,
|
|
List<Guid> CategoryIds,
|
|
List<Guid> TagIds
|
|
);
|
|
|
|
public record UpdateContainerRequest(
|
|
string Slug,
|
|
string Name,
|
|
string? Description,
|
|
string? Keywords,
|
|
string? NewsText,
|
|
string? Image,
|
|
string? Demo,
|
|
string? FullDemo,
|
|
string? MiniDemo,
|
|
string? DemoScriptTag,
|
|
bool IsPublished,
|
|
bool IsPremium,
|
|
bool IsMockup,
|
|
string PrimaryMode,
|
|
int Sort,
|
|
List<Guid> CategoryIds,
|
|
List<Guid> TagIds
|
|
);
|
|
|
|
public record ContainerListRequest(
|
|
int Page = 1,
|
|
int PageSize = 20,
|
|
string? Search = null,
|
|
Guid? CategoryId = null,
|
|
string? TagSlug = null,
|
|
bool? IsPublished = null,
|
|
bool? IsPremium = null,
|
|
string? Mode = null,
|
|
string? Sort = "sort_date_desc"
|
|
);
|
|
|
|
public record CreateProjectRequest(
|
|
Guid ContainerId,
|
|
Guid? ProjectServerId,
|
|
string Name,
|
|
string? Description,
|
|
string? Image,
|
|
string? FullDemo,
|
|
string? DemoScriptTag,
|
|
string? DownloadLink,
|
|
string? Folder,
|
|
int OriginalWidth,
|
|
int OriginalHeight,
|
|
string? Aspect,
|
|
decimal ProjectDurationSec,
|
|
decimal? MinDurationSec,
|
|
decimal? MaxDurationSec,
|
|
int FreeFps,
|
|
string ChooseMode,
|
|
string Resolution,
|
|
decimal VipFactor,
|
|
string RenderAepComp,
|
|
bool IsPublished,
|
|
int Sort,
|
|
string? RenderEngine = null,
|
|
string? RenderRemotionComp = null
|
|
);
|
|
|
|
public record UpdateProjectRequest(
|
|
string Name,
|
|
string? Description,
|
|
string? Image,
|
|
string? FullDemo,
|
|
string? DemoScriptTag,
|
|
string? DownloadLink,
|
|
string? Folder,
|
|
int OriginalWidth,
|
|
int OriginalHeight,
|
|
string? Aspect,
|
|
decimal ProjectDurationSec,
|
|
decimal? MinDurationSec,
|
|
decimal? MaxDurationSec,
|
|
int FreeFps,
|
|
string ChooseMode,
|
|
string Resolution,
|
|
decimal VipFactor,
|
|
string RenderAepComp,
|
|
string? SharedLayerImage,
|
|
string? SharedColorsSvg,
|
|
string? SharedColorPresetsSvg,
|
|
bool IsPublished,
|
|
int Sort,
|
|
string? RenderEngine = null,
|
|
string? RenderRemotionComp = null
|
|
);
|
|
|
|
// Partial update — only non-null fields are applied, so editing an aspect/resolution
|
|
// never wipes render/colour data that the full UpdateProjectRequest would require.
|
|
public record CreateAssetRequest(
|
|
string Name,
|
|
string? Kind,
|
|
string Url,
|
|
string? MinioKey,
|
|
long? SizeBytes,
|
|
int Sort = 0
|
|
);
|
|
|
|
public record SetAepRequest(
|
|
string? AepFileUrl,
|
|
string? AepMinioBucket,
|
|
string? AepMinioKey,
|
|
string? AepFileMd5,
|
|
long? AepFileSizeBytes,
|
|
string? RenderAepComp,
|
|
string? Folder,
|
|
string? RenderEngine = null,
|
|
string? RenderRemotionComp = null
|
|
);
|
|
|
|
public record PatchProjectRequest(
|
|
string? Name,
|
|
string? Description,
|
|
string? Aspect,
|
|
string? Resolution,
|
|
string? ChooseMode,
|
|
int? OriginalWidth,
|
|
int? OriginalHeight,
|
|
decimal? ProjectDurationSec,
|
|
decimal? MinDurationSec,
|
|
decimal? MaxDurationSec,
|
|
int? FreeFps,
|
|
bool? IsPublished,
|
|
int? Sort,
|
|
string? Image,
|
|
string? FullDemo,
|
|
string? SharedColorsSvg,
|
|
string? RenderEngine = null,
|
|
string? RenderRemotionComp = null
|
|
);
|
|
|
|
// ── CMS ──────────────────────────────────────────────────────────────────────
|
|
|
|
public record CreateBlogRequest(
|
|
string Slug,
|
|
string Title,
|
|
string? ShortDescription,
|
|
string Content,
|
|
string? MetaTitle,
|
|
string? MetaDescription,
|
|
string? MetaKeywords,
|
|
bool IncludeInSiteMap,
|
|
string? Image,
|
|
string? Cover,
|
|
string? AuthorDisplayName,
|
|
bool IsPublished,
|
|
DateTime? PublishDate,
|
|
string Kind = "Blog"
|
|
);
|
|
|
|
public record UpdateBlogRequest(
|
|
string Slug,
|
|
string Title,
|
|
string? ShortDescription,
|
|
string Content,
|
|
string? MetaTitle,
|
|
string? MetaDescription,
|
|
string? MetaKeywords,
|
|
bool IncludeInSiteMap,
|
|
string? Image,
|
|
string? Cover,
|
|
string? AuthorDisplayName,
|
|
bool IsPublished,
|
|
DateTime? PublishDate
|
|
);
|
|
|
|
public record BlogListRequest(
|
|
int Page = 1,
|
|
int PageSize = 20,
|
|
string? Search = null,
|
|
bool? IsPublished = null,
|
|
string Kind = "Blog"
|
|
);
|
|
|
|
public record CreateCommentRequest(
|
|
Guid? BlogId,
|
|
Guid? ContainerId,
|
|
Guid? ParentCommentId,
|
|
string Content,
|
|
decimal? Rate
|
|
);
|
|
|
|
public record CreateSlideRequest(
|
|
string? Keyword,
|
|
string? Title,
|
|
string? Image,
|
|
string? Parameter,
|
|
string SlideType,
|
|
DateTime? ExpireDate,
|
|
int Sort,
|
|
bool IsActive
|
|
);
|
|
|
|
public record UpdateSlideRequest(
|
|
string? Keyword,
|
|
string? Title,
|
|
string? Image,
|
|
string? Parameter,
|
|
string SlideType,
|
|
DateTime? ExpireDate,
|
|
int Sort,
|
|
bool IsActive
|
|
);
|
|
|
|
public record UpsertWebsiteSettingRequest(
|
|
string Key,
|
|
string Value,
|
|
string? Description,
|
|
bool IsSecret
|
|
);
|
|
|
|
public record CreateFavoriteFolderRequest(string Name, string? Description);
|
|
public record UpdateFavoriteFolderRequest(string Name, string? Description);
|
|
public record AddFavoriteContainerRequest(Guid ContainerId, Guid? FolderId, string? Note);
|