Skip to content

Conversation

@NonsoBarn
Copy link
Owner

No description provided.

Features implemented:
- Category entity with self-referential relationships
- Hierarchical categories (2-level depth maximum)
- Auto-generated slugs for SEO-friendly URLs (fast-food, burgers, etc.)
- Full CRUD operations with proper authorization
- Soft delete functionality (preserves data, sets isActive=false)
- Data validation with class-validator DTOs
- Business rules enforcement:
  * Maximum 2-level nesting (root > parent > child)
  * Duplicate name prevention (409 Conflict)
  * Circular reference prevention
  * Parent existence validation
  * Slug uniqueness with automatic numbering

Endpoints implemented:
- POST   /api/v1/categories (admin only)
- GET    /api/v1/categories (public)
- GET    /api/v1/categories/root (public)
- GET    /api/v1/categories/slug/:slug (public)
- GET    /api/v1/categories/:id (public)
- PATCH  /api/v1/categories/:id (admin only)
- DELETE /api/v1/categories/:id (admin only - soft delete)
- DELETE /api/v1/categories/:id/hard (admin only - permanent)

Technical implementation:
- Self-referential TypeORM relationships (@manytoone, @onetomany)
- Slug generation with slugify library and uniqueness checking
- TypeORM IsNull() operator for NULL value queries
- Constructor-based dependency injection
- Guard chain (JwtAuthGuard + RolesGuard) for RBAC
- Proper HTTP status codes (201, 204, 400, 401, 403, 404, 409)
- Query parameter support for admin views (includeInactive)

Testing completed:
✅ CRUD operations verified
✅ Hierarchical data structure tested
✅ Validation error handling confirmed (duplicate, invalid UUID)
✅ Authorization (RBAC) working correctly
✅ Soft delete functionality verified (204 response, isActive=false)
✅ Slug auto-generation tested (fast-food, burgers, pizza)
✅ Parent-child relationships loading correctly

Database structure:
- 6 categories created (3 root, 3 children)
- Fast Food > Burgers, Pizza, Fried Chicken
- Beverages (root)
- Desserts (root, soft deleted)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants