mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
29 lines
1.5 KiB
JavaScript
29 lines
1.5 KiB
JavaScript
// models/advertisements/advertisements.placements.js
|
|
//
|
|
// Declarative registry of every ad placement in the client app. Each entry
|
|
// is a self-contained "slot" — a page + position pair — that determines the
|
|
// visual format (hero/banner/popup/sidebar) automatically. Adding a new
|
|
// placement should only ever require adding one entry here (and wiring the
|
|
// corresponding client page to fetch/render it) — nothing else in this file
|
|
// should need to change.
|
|
//
|
|
// `key` is what's stored on advertisements.placement. `format` is what gets
|
|
// denormalized onto advertisements.type on write (see applyAdvertisementFields
|
|
// in controllers/admin/advertisements.controller.js) — type is never accepted
|
|
// from the client once a placement is set.
|
|
|
|
const PLACEMENTS = [
|
|
{ key: "dashboard.hero", format: "hero", page: "dashboard", pageLabel: "Dashboard", slotLabel: "Hero (top of page)" },
|
|
{ key: "tier_plans.banner", format: "banner", page: "tier_plans", pageLabel: "Subscriptions", slotLabel: "Banner (above plan cards)" },
|
|
{ key: "course_details.banner", format: "banner", page: "course_details", pageLabel: "Course Details", slotLabel: "Banner (below hero)" },
|
|
];
|
|
|
|
const PLACEMENT_MAP = Object.fromEntries(PLACEMENTS.map((p) => [p.key, p]));
|
|
const PLACEMENT_KEYS = PLACEMENTS.map((p) => p.key);
|
|
|
|
function getFormatForPlacement(key) {
|
|
return PLACEMENT_MAP[key]?.format ?? null;
|
|
}
|
|
|
|
module.exports = { PLACEMENTS, PLACEMENT_MAP, PLACEMENT_KEYS, getFormatForPlacement };
|