mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
@@ -12,6 +12,12 @@
|
||||
// in controllers/admin/advertisements.controller.js) — type is never accepted
|
||||
// from the client once a placement is set.
|
||||
|
||||
// TODO(ads-1): Re-categorize placements — Hero -> Dashboard, Banner -> Tier Plans.
|
||||
// Remove the "popup" and "sidebar" formats entirely (dashboard.popup,
|
||||
// course_details.sidebar). Keep in sync with the frontend mirror at
|
||||
// new_starr_app/src/data/placement.data.js. This also feeds the Step 1
|
||||
// "Placement" picker in the Add Advertisement wizard (TODO(ads-6)), which
|
||||
// should only offer Dashboard / Tier Plans / Course Details.
|
||||
const PLACEMENTS = [
|
||||
{ key: "dashboard.hero", format: "hero", page: "dashboard", pageLabel: "Dashboard", slotLabel: "Hero (top of page)" },
|
||||
{ key: "dashboard.popup", format: "popup", page: "dashboard", pageLabel: "Dashboard", slotLabel: "Popup (on load)" },
|
||||
|
||||
@@ -10,10 +10,11 @@ const Course = sequelize.define("Course", {
|
||||
order_index: { type: DataTypes.INTEGER, allowNull: false, defaultValue: 0, hidden: false, order: 7, filterable: false },
|
||||
level: { type: DataTypes.ENUM("beginner", "intermediate", "advanced"), allowNull: true, hidden: false, order: 3, filterable: true },
|
||||
subscription: { type: DataTypes.STRING(50), allowNull: false, defaultValue: "free", hidden: false, order: 4, filterable: true },
|
||||
status: { type: DataTypes.ENUM("draft", "published", "unpublished"), allowNull: false, defaultValue: "draft", hidden: false, order: 5, filterable: true },
|
||||
duration_seconds: { type: DataTypes.INTEGER, allowNull: true, defaultValue: 0, hidden: false, order: 8, filterable: false },
|
||||
badge_color: { type: DataTypes.STRING(50), allowNull: true, defaultValue: "purple" },
|
||||
badge_asset_id: { type: DataTypes.BIGINT, allowNull: true },
|
||||
badge_image_url: { type: DataTypes.TEXT, allowNull: true },
|
||||
badge_color: { type: DataTypes.STRING(50), allowNull: true, defaultValue: "purple", hidden: true },
|
||||
badge_asset_id: { type: DataTypes.BIGINT, allowNull: true, hidden: true },
|
||||
badge_image_url: { type: DataTypes.TEXT, allowNull: true, hidden: true },
|
||||
createdBy: { type: DataTypes.BIGINT, allowNull: true },
|
||||
updatedBy: { type: DataTypes.BIGINT, allowNull: true },
|
||||
deletedBy: { type: DataTypes.BIGINT, allowNull: true },
|
||||
|
||||
@@ -12,6 +12,9 @@ const NotificationBroadcast = sequelize.define("NotificationBroadcast", {
|
||||
// ─── Content ──────────────────────────────────────────────────────────────
|
||||
title: { type: DataTypes.STRING(255), allowNull: false, label: "Title", order: 1 },
|
||||
message: { type: DataTypes.TEXT, allowNull: false, label: "Message", order: 2 },
|
||||
// When set, the client's "view full content" dialog shows an "Open Link"
|
||||
// action pointing here. When null, that dialog is plain text info only.
|
||||
link_url: { type: DataTypes.STRING(2048), allowNull: true, label: "Link URL", order: 2.2 },
|
||||
|
||||
// ─── Visibility ──────────────────────────────────────────────────────────
|
||||
// Determines where a delivered announcement shows up for recipients.
|
||||
|
||||
Reference in New Issue
Block a user