You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Nincs időzített megjelentetés. Ma minden admin mentés azonnal élő (lásd #51), tehát ha egy projekt vagy bejegyzés adott napon kell hogy megjelenjen, azt kézzel, akkor kell kimenteni.
Javaslat
Előfeltétel: #51 (draft/publish állapot). Erre épül, önmagában nincs értelme.
Az olvasó oldal szűrése: Published && (PublishedAt == null || PublishedAt <= now). Ez a WorksController, SkillsController, ExperiencesController, SluggedContentController, valamint a SitemapController.LoadEntriesAsync, a PublicRouteIndex és a PageMetaIndex szűrőit érinti — mindenhol ugyanannak a feltételnek kell szerepelnie, tehát egy közös extension metódusba (IQueryable<T>.Visible(now)) érdemes kitenni.
Cache-invalidálás időpontra. Ez a nem triviális rész: a ContentCache ma írásra invalidál, tehát egy jövőbeli időpont önmagában nem dobja a works:list, routes, meta és sitemap kulcsokat — a bejegyzés a megjelenés időpontja után is rejtve maradna a TTL végéig (alap 1 nap). Megoldás egy PublishScheduleService (BackgroundService), ami a legközelebbi esedékes időpontra ütemez, és annak elérkezésekor lefuttatja ugyanazt az invalidálást, amit az admin írás.
TimeProvider használata (a projektben már bevett: AnalyticsController, ActivityStatsController), hogy tesztelhető legyen.
Admin UI: dátum-idő választó a szerkesztőben, és a listában "ütemezett" állapotjelölés a Draft / Published mellett.
Időzóna: a tárolás UTC, a megjelenítés helyi idő. A szerkesztőben egyértelműen ki kell írni, melyik időzóna szerint értendő a beállított időpont — ez az a részlet, ami nélkül a funkció rendszeresen fél napot téved.
Jelenség
Nincs időzített megjelentetés. Ma minden admin mentés azonnal élő (lásd #51), tehát ha egy projekt vagy bejegyzés adott napon kell hogy megjelenjen, azt kézzel, akkor kell kimenteni.
Javaslat
Előfeltétel: #51 (draft/publish állapot). Erre épül, önmagában nincs értelme.
PublishedAt(DateTimeOffset?) a tartalom-entitásokon — a Feat: draft/publish állapot és előnézet a tartalmakra #51-ben már szerepel, itt annyi a különbség, hogy a jövőbe is állítható.Published && (PublishedAt == null || PublishedAt <= now). Ez aWorksController,SkillsController,ExperiencesController,SluggedContentController, valamint aSitemapController.LoadEntriesAsync, aPublicRouteIndexés aPageMetaIndexszűrőit érinti — mindenhol ugyanannak a feltételnek kell szerepelnie, tehát egy közös extension metódusba (IQueryable<T>.Visible(now)) érdemes kitenni.ContentCachema írásra invalidál, tehát egy jövőbeli időpont önmagában nem dobja aworks:list,routes,metaéssitemapkulcsokat — a bejegyzés a megjelenés időpontja után is rejtve maradna a TTL végéig (alap 1 nap). Megoldás egyPublishScheduleService(BackgroundService), ami a legközelebbi esedékes időpontra ütemez, és annak elérkezésekor lefuttatja ugyanazt az invalidálást, amit az admin írás.TimeProviderhasználata (a projektben már bevett:AnalyticsController,ActivityStatsController), hogy tesztelhető legyen.Draft/Publishedmellett.Érintett fájlok
PortfolioCMS.Core/Models/Work.cs,Experience.cs,SkillGroup.cs(és a Feat: blog/jegyzet szekció #62 utániPost.cs)PortfolioCMS.Core/Controllers/— az olvasó controllerekPortfolioCMS.Core/Services/PublicRouteIndex.cs,PageMetaIndex.cs, újPublishScheduleService.csPortfolioCMS.Server/Controllers/SitemapController.csportfoliocms.admin.client/src/components/admin/EditorModal.vue,AdminListPanel.vuePortfolioCMS.Tests/— újPublishScheduleTests.cs