262 lines
6.3 KiB
Markdown
262 lines
6.3 KiB
Markdown
---
|
|
name: design-routes
|
|
description: Design and plan Angular routes using Router-First methodology before implementing components
|
|
---
|
|
|
|
Design the complete routing structure for an Angular application using Router-First methodology.
|
|
|
|
## What This Command Does
|
|
|
|
Following Doguhan Uluca's Router-First approach, this command helps you:
|
|
- ✅ Define routes BEFORE building components
|
|
- ✅ Plan lazy loading strategy
|
|
- ✅ Set up route guards and resolvers
|
|
- ✅ Design navigation hierarchy
|
|
- ✅ Plan data loading strategies
|
|
|
|
## Information Needed
|
|
|
|
Ask the user:
|
|
1. **App type** - What kind of application? (e.g., e-commerce, dashboard, CMS)
|
|
2. **User roles** - What roles exist? (e.g., admin, user, guest)
|
|
3. **Main features** - List all features (e.g., dashboard, products, orders, settings)
|
|
4. **Sub-features** - Any nested routes? (e.g., products → list/detail/edit)
|
|
5. **Public vs Protected** - Which routes need authentication?
|
|
|
|
## Router-First Process
|
|
|
|
### Step 1: Create User Flow Diagram
|
|
```
|
|
Guest → Login → Dashboard → [Features]
|
|
├── Products
|
|
├── Orders
|
|
├── Users (admin only)
|
|
└── Settings
|
|
```
|
|
|
|
### Step 2: Design Route Tree
|
|
```
|
|
/ (redirect to /dashboard)
|
|
/login (public, lazy)
|
|
/dashboard (protected, lazy)
|
|
├── /overview (default)
|
|
├── /analytics (lazy)
|
|
/products (protected, lazy)
|
|
├── /list (default)
|
|
├── /detail/:id (lazy)
|
|
├── /create (lazy, admin only)
|
|
/orders (protected, lazy)
|
|
/users (protected, lazy, admin only)
|
|
/settings (protected, lazy)
|
|
```
|
|
|
|
### Step 3: Define Route Configuration
|
|
```typescript
|
|
export const routes: Routes = [
|
|
{
|
|
path: '',
|
|
redirectTo: '/dashboard',
|
|
pathMatch: 'full'
|
|
},
|
|
{
|
|
path: 'login',
|
|
loadComponent: () => import('./features/auth/login.component')
|
|
.then(m => m.LoginComponent),
|
|
data: { breadcrumb: 'Login' }
|
|
},
|
|
{
|
|
path: 'dashboard',
|
|
loadChildren: () => import('./features/dashboard/dashboard.routes')
|
|
.then(m => m.DASHBOARD_ROUTES),
|
|
canActivate: [AuthGuard],
|
|
data: { breadcrumb: 'Dashboard' }
|
|
},
|
|
{
|
|
path: 'products',
|
|
loadChildren: () => import('./features/products/products.routes')
|
|
.then(m => m.PRODUCTS_ROUTES),
|
|
canActivate: [AuthGuard],
|
|
data: { breadcrumb: 'Products' }
|
|
},
|
|
{
|
|
path: 'users',
|
|
loadChildren: () => import('./features/users/users.routes')
|
|
.then(m => m.USERS_ROUTES),
|
|
canActivate: [AuthGuard, RoleGuard],
|
|
data: { breadcrumb: 'Users', role: 'admin' }
|
|
}
|
|
];
|
|
```
|
|
|
|
### Step 4: Plan Guards and Resolvers
|
|
```typescript
|
|
// Guards needed
|
|
AuthGuard - Check if user is logged in
|
|
RoleGuard - Check user permissions
|
|
UnsavedGuard - Warn before leaving unsaved forms
|
|
|
|
// Resolvers needed (optional)
|
|
UserResolver - Load user data before route activates
|
|
ProductResolver - Preload product details
|
|
```
|
|
|
|
### Step 5: Loading Strategy
|
|
```
|
|
Immediate Load (Critical Path):
|
|
- Login page
|
|
- Dashboard shell
|
|
- Error pages
|
|
|
|
Lazy Load (On Demand):
|
|
- Dashboard sub-routes
|
|
- Product management
|
|
- Admin features
|
|
- Reports
|
|
- Settings
|
|
|
|
Preload Strategy:
|
|
- Dashboard components (after login)
|
|
- High-traffic features
|
|
```
|
|
|
|
## Output Format
|
|
|
|
Provide:
|
|
|
|
1. **Visual Route Tree** - ASCII diagram of all routes
|
|
2. **Route Configuration Code** - Complete app.routes.ts
|
|
3. **Feature Routes** - Example feature routing files
|
|
4. **Guards Needed** - List with implementation stubs
|
|
5. **Performance Plan** - Bundle size estimates
|
|
6. **Navigation Strategy** - How users move through the app
|
|
7. **ADR Document** - Architectural Decision Record
|
|
|
|
## Example Output
|
|
|
|
### Route Tree Visualization
|
|
```
|
|
Application Routes (Lazy-Loaded)
|
|
│
|
|
├─ / (redirect to /dashboard)
|
|
│
|
|
├─ /login (public)
|
|
│
|
|
├─ /dashboard (protected, AuthGuard)
|
|
│ ├─ /overview (default)
|
|
│ ├─ /analytics
|
|
│ └─ /reports
|
|
│
|
|
├─ /products (protected, AuthGuard)
|
|
│ ├─ /list (default)
|
|
│ ├─ /detail/:id
|
|
│ ├─ /create (admin only)
|
|
│ └─ /edit/:id (admin only)
|
|
│
|
|
├─ /orders (protected, AuthGuard)
|
|
│ ├─ /list (default)
|
|
│ └─ /detail/:id
|
|
│
|
|
├─ /users (protected, AuthGuard + RoleGuard)
|
|
│ ├─ /list (default)
|
|
│ ├─ /create
|
|
│ └─ /edit/:id
|
|
│
|
|
├─ /settings (protected, AuthGuard)
|
|
│
|
|
└─ /** (redirect to /dashboard)
|
|
```
|
|
|
|
### Bundle Size Planning
|
|
```
|
|
Initial Bundle: 180 KB (gzipped)
|
|
- Core services
|
|
- Layout components
|
|
- Router
|
|
|
|
Feature Bundles:
|
|
- Dashboard: 45 KB
|
|
- Products: 60 KB (data grid)
|
|
- Orders: 35 KB
|
|
- Users: 40 KB
|
|
- Settings: 25 KB
|
|
|
|
Total: ~385 KB (all features loaded)
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
When designing routes:
|
|
- ✅ Keep URLs clean and RESTful
|
|
- ✅ Use kebab-case for paths
|
|
- ✅ Lazy load everything except critical path
|
|
- ✅ Group related features
|
|
- ✅ Plan for future features
|
|
- ✅ Add breadcrumb data
|
|
- ✅ Consider SEO (if applicable)
|
|
- ✅ Handle 404s gracefully
|
|
|
|
## Common Patterns
|
|
|
|
### Nested Routes
|
|
```typescript
|
|
{
|
|
path: 'products',
|
|
component: ProductsLayoutComponent,
|
|
children: [
|
|
{ path: '', component: ProductListComponent },
|
|
{ path: ':id', component: ProductDetailComponent },
|
|
{ path: ':id/edit', component: ProductEditComponent }
|
|
]
|
|
}
|
|
```
|
|
|
|
### Route Guards
|
|
```typescript
|
|
{
|
|
path: 'admin',
|
|
canActivate: [AuthGuard, AdminGuard],
|
|
canDeactivate: [UnsavedChangesGuard],
|
|
children: [...]
|
|
}
|
|
```
|
|
|
|
### Route Data
|
|
```typescript
|
|
{
|
|
path: 'dashboard',
|
|
data: {
|
|
breadcrumb: 'Dashboard',
|
|
title: 'Dashboard - My App',
|
|
animation: 'DashboardPage'
|
|
}
|
|
}
|
|
```
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
# In Claude Code
|
|
/angular-architecture:design-routes
|
|
|
|
# Or natural language
|
|
"Design routes for an e-commerce app with products, cart, checkout, and admin"
|
|
"Use angular-architect to plan routing for a real estate listing platform"
|
|
```
|
|
|
|
## Deliverables
|
|
|
|
After running this command, you'll have:
|
|
1. Complete route structure documented
|
|
2. Code for app.routes.ts
|
|
3. Feature route files
|
|
4. Guard implementations
|
|
5. Performance plan
|
|
6. Next implementation steps
|
|
|
|
## Notes
|
|
|
|
- Routes should tell a story of your app's features
|
|
- Design for scalability (easy to add new features)
|
|
- Consider analytics tracking in routing
|
|
- Plan error handling routes (404, 403, 500)
|