mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
@@ -31,6 +31,7 @@ const assetsRoutes = require('./assets.routes');
|
||||
const coursesRoutes = require('./courses.routes');
|
||||
const taskRoutes = require('./task.routes');
|
||||
const tiersRoutes = require('./tiers.routes');
|
||||
const tierPoliciesRoutes = require('./tier_policies.routes');
|
||||
const tierCategoriesRoutes = require('./tier_categories.routes');
|
||||
const categoriesRoutes = require('./categories.routes');
|
||||
const productsRoutes = require('./products.routes');
|
||||
@@ -51,7 +52,8 @@ router.use('/assets', assetsRoutes);
|
||||
router.use('/courses', coursesRoutes);
|
||||
router.use('/task-lists', taskRoutes);
|
||||
router.use('/tiers/categories', tierCategoriesRoutes);
|
||||
router.use('/tiers', tiersRoutes);
|
||||
router.use('/tiers', tiersRoutes);
|
||||
router.use('/tier-policies', tierPoliciesRoutes);
|
||||
router.use('/categories', categoriesRoutes);
|
||||
router.use('/products', productsRoutes);
|
||||
router.use('/advertisements', advertisementRoutes);
|
||||
|
||||
@@ -39,6 +39,13 @@ router.delete("/:courseId", ctrl.archiveCourse);
|
||||
router.get("/:courseId/instructors", ctrl.getInstructors);
|
||||
router.put("/:courseId/instructors", ctrl.syncInstructors);
|
||||
|
||||
// ══════════════════════════════════════════════════════════════════════════════
|
||||
// COURSE ACHIEVEMENTS
|
||||
// ══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
router.get("/:courseId/achievements", ctrl.getCourseAchievements);
|
||||
router.put("/:courseId/achievements", ctrl.syncCourseAchievements);
|
||||
|
||||
// ══════════════════════════════════════════════════════════════════════════════
|
||||
// PREREQUISITES
|
||||
// ══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
@@ -2,12 +2,18 @@ const express = require('express');
|
||||
const router = express.Router();
|
||||
const ctrl = require('../../controllers/admin/tier_policies.controller');
|
||||
|
||||
// ─── Plan Policies ────────────────────────────────────────────────────────────
|
||||
// ─── Plan Policies (access rules) ────────────────────────────────────────────
|
||||
// GET /admin/tiers/plans/:planId/policy
|
||||
// PUT /admin/tiers/plans/:planId/policy — JSON: { badge_asset_id, badge_label, access_rules, … }
|
||||
// PUT /admin/tiers/plans/:planId/policy — JSON: { access_rules }
|
||||
router.get('/plans/:planId/policy', ctrl.getPlanPolicy);
|
||||
router.put('/plans/:planId/policy', ctrl.upsertPlanPolicy);
|
||||
|
||||
// ─── Payment Policies (promo codes + refund window) ───────────────────────────
|
||||
// GET /admin/tiers/plans/:planId/payment-policy
|
||||
// PUT /admin/tiers/plans/:planId/payment-policy — JSON: { promo_rules, refund_policy, allowed_providers }
|
||||
router.get('/plans/:planId/payment-policy', ctrl.getPaymentPolicy);
|
||||
router.put('/plans/:planId/payment-policy', ctrl.upsertPaymentPolicy);
|
||||
|
||||
// ─── System Badges ────────────────────────────────────────────────────────────
|
||||
// GET /admin/tiers/system-badges
|
||||
// GET /admin/tiers/system-badges/:key
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const ctrl = require('../../controllers/admin/tiers.controller');
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const ctrl = require('../../controllers/admin/tiers.controller');
|
||||
const priceCtrl = require('../../controllers/admin/plan_prices.controller');
|
||||
|
||||
router.get ('/', ctrl.getPlans);
|
||||
router.post ('/', ctrl.createPlan);
|
||||
@@ -16,10 +17,16 @@ router.get ('/users/:id/tiers', ctrl.getUserTiers);
|
||||
router.post ('/users/tiers/grant', ctrl.grantTier);
|
||||
router.patch ('/users/tiers/:tid/revoke', ctrl.revokeTier);
|
||||
|
||||
// ← course routes before /:id
|
||||
// ← course + impact + prices routes before /:id
|
||||
router.get ('/:id/impact', ctrl.getPlanImpact);
|
||||
router.get ('/:id/courses', ctrl.getPlanCourses);
|
||||
router.post ('/:id/courses', ctrl.syncPlanCourses);
|
||||
|
||||
router.get ('/:id/prices', priceCtrl.getPrices);
|
||||
router.post ('/:id/prices', priceCtrl.addPrice);
|
||||
router.put ('/:id/prices/:currency', priceCtrl.updatePrice);
|
||||
router.delete('/:id/prices/:currency', priceCtrl.removePrice);
|
||||
|
||||
router.get ('/:id', ctrl.getPlan);
|
||||
router.put ('/:id', ctrl.updatePlan);
|
||||
router.delete('/:id', ctrl.archivePlan);
|
||||
|
||||
@@ -50,6 +50,7 @@ router.use(authenticate, requireClient());
|
||||
router.get('/profile', profileCtrl.getProfile);
|
||||
router.put('/profile', ...updateProfileValidator, validate, profileCtrl.updateProfile);
|
||||
router.delete('/profile', profileCtrl.deleteAccount);
|
||||
router.patch('/profile/currency', profileCtrl.updateCurrency);
|
||||
router.post('/profile/avatar', handleAvatarUpload, profileCtrl.uploadAvatar);
|
||||
router.delete('/profile/avatar', profileCtrl.deleteAvatar);
|
||||
router.get('/sessions', profileCtrl.getSessions);
|
||||
|
||||
@@ -3,6 +3,9 @@ const router = express.Router();
|
||||
const ctrl = require('../../controllers/client/courses.controller');
|
||||
const progressCtrl = require('../../controllers/client/course_reading_progress.controller');
|
||||
|
||||
// Course categories for filter chips — must come before /:courseId
|
||||
router.get('/categories', ctrl.getCategories);
|
||||
|
||||
// Profile learning progress card — must come before /:courseId
|
||||
router.get('/in-progress', progressCtrl.getMyInProgressCourses);
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const ctrl = require('../../controllers/client/tiers.controller');
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const ctrl = require('../../controllers/client/tiers.controller');
|
||||
const priceCtrl = require('../../controllers/admin/plan_prices.controller');
|
||||
|
||||
// My tier
|
||||
router.get ('/me', ctrl.getMyTier);
|
||||
@@ -9,12 +10,13 @@ router.get ('/me/history', ctrl.getMyTierHistory);
|
||||
// Plans
|
||||
router.get ('/plans', ctrl.getPlans);
|
||||
|
||||
// PayPal checkout
|
||||
// Promo code validation
|
||||
router.post('/promos/validate', ctrl.validatePromo);
|
||||
|
||||
// Checkout
|
||||
router.post('/checkout/order', ctrl.createOrder);
|
||||
router.post('/checkout/capture', ctrl.captureOrder);
|
||||
router.post('/checkout/cancel', ctrl.cancelOrder);
|
||||
|
||||
// PayPal refund
|
||||
router.post('/checkout/refund', ctrl.refundOrder);
|
||||
|
||||
// My payments
|
||||
@@ -26,4 +28,7 @@ router.get ('/categories', ctrl.getCategories);
|
||||
// System badges (public read for profile display)
|
||||
router.get ('/system-badges', ctrl.getSystemBadges);
|
||||
|
||||
// Supported currencies (public — used by currency picker in settings + checkout)
|
||||
router.get ('/currencies', priceCtrl.getCurrencies);
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user