Categories Scope
1. Break Down the Feature Lifecycle
1.1 Define the Feature Goals
Purpose: Group and organize Articulate Rise 360 Microlearning modules under logical categories.
Desired Outcomes:
Users (or admins) can easily find related modules grouped under a shared category (e.g., "Cybersecurity").
Categories are persistent entities in Firestore that reference modules by ID.
Core User Interactions:
Admins: Create, update, and delete categories.
Admins: Add/remove module IDs to/from categories.
End users: View modules grouped by categories.
1.2 Establish Key Milestones
Data Creation: Admins create categories (title, description, list of module IDs).
Data Storage: Persist categories in Firestore, with generated
_id
.Data Retrieval: Fetch categories with their associated module IDs.
Data Updates: Add/remove module IDs, update category metadata.
Automation (future): Automatic category creation based on tags? (future consideration)
1.3 Prioritize MVP
MVP Scope:
CRUD for categories (title, description, modules array).
Retrieve categories and their related modules.
Future Enhancements:
Category ordering/priority.
Auto-population via tagging.
Bulk module assignment UI.
Knowledge Gaps:
Confirm if categories should support nested/subcategories (ask stakeholders).
Confirm whether categories should store modules within or just reference them.
2. Identify Relevant Entities
2.1 List Entities
Category:
_id
(Firestore-generated)title
(string)description
(string, optional)moduleIds
(array of strings – references to Module_id
s)createdAt
,updatedAt
(timestamps)
Module (existing entity):
_id
(Firestore-generated)title
contentUrl
(Url linking directly to index.html in S3 Bucket)categoryIds
(optional reverse reference?)
2.2 Define Relationships
One-to-Many:
A ModuleCategory can have many Module documents and/or Module IDs
Many-to-Many (optional):
A Module could belong to multiple categories.
3. Plan API Routes
3.1 Define CRUD Operations (for ModuleCategory
)
ModuleCategory
)POST /categories
Create a new category (title, description).
GET /categories
List all categories.
GET /categories/:categoryId
Retrieve a single category and its modules.
PUT /categories/:categoryId
Update category details (title, description).
DELETE /categories/:categoryId
Remove category and unlink modules.
3.2 Action-Specific Routes
POST /categories/:categoryId/modules
Add module IDs to a category.
DELETE /categories/:categoryId/modules/:moduleId
Remove a module from a category.
3.3 Validate Input/Output
Validate that
moduleIds
being added exist in themodules
collection.Ensure user permissions for each route (admin vs. user).
4. Feature Breakdown with Example Usage
4.1 Define User Scenarios
Scenario 1: Admin creates a category
Admin sends a
POST /categories
request with{ title: "Cybersecurity", description: "Security awareness training modules" }
.Firestore generates
_id
, category stored with emptymoduleIds
.
Scenario 2: Admin adds modules to category
Admin calls
PATCH /categories/:id
with{ moduleIds: ["abc123", "def456"] }
.Firestore updates
moduleIds
array in that category document.
Scenario 3: User views modules by category
User calls
GET /categories
.Frontend displays list of categories with their module counts.
On click:
GET /categories/:id
returns category and associated module data.
4.2 Sample Firestore Document Model
collections:
categories:
categoryId:
title: "Cybersecurity"
description: "Security awareness training modules"
moduleIds: ["abc123", "def456"]
createdAt: <timestamp>
updatedAt: <timestamp>
Last updated