testing 101

Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
This commit is contained in:
2026-06-30 19:31:45 +08:00
parent 89acdfc239
commit 1372f4e975
62 changed files with 6696 additions and 281 deletions
+3 -1
View File
@@ -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);
+7
View File
@@ -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
// ══════════════════════════════════════════════════════════════════════════════
+8 -2
View File
@@ -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
+11 -4
View File
@@ -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);
+1
View File
@@ -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
View File
@@ -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);
+11 -6
View File
@@ -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;