Use Case Documentation
Overview
This document outlines the business logic and use case implementations for the Product Management module. All use cases follow Clean Architecture principles with CQRS pattern implementation, comprehensive permission validation, and event-driven architecture for system integration.
Table of Contents
Product Use Cases
CreateProductUseCase
File: common/module/product/product/usecases/create-product.usecase.ts
Creates a new product with comprehensive validation and permission checks.
Implementation
Business Logic Flow
Permission Validation: Validates user has
CREATE_PRODUCTpermissionCommand Execution: Dispatches
AddProductCommandthrough command busData Retrieval: Queries created product with populated relationships
Event Publishing: Automatic event publishing for product creation
Response: Returns complete product DTO with all related data
Key Features
Permission-based Access Control: Validates user permissions before execution
CQRS Pattern: Separates command (create) from query (read) operations
Event-Driven: Publishes events for system integration and auditing
Transaction Management: Ensures data consistency across operations
Comprehensive Logging: Tracks all operations for debugging and auditing
Business Rules
User must have
CREATE_PRODUCTpermissionProduct SKU must be unique within tenant
At least one language version is required
Price information is mandatory
Tags must exist in the system before assignment
GetProductUseCase
File: common/module/product/product/usecases/get-product.usecase.ts
Retrieves a specific product by ID with permission validation.
Implementation
Business Logic Flow
Permission Validation: Validates user has
READ_PRODUCTpermissionQuery Execution: Retrieves product with populated relationships
Data Enrichment: Includes images, tag details, and metadata
Response: Returns complete product information
Key Features
Efficient Data Loading: Optimized queries with relationship population
Permission Enforcement: Ensures data access security
Cache Integration: Utilizes caching for frequently accessed products
Error Handling: Proper error handling for non-existent products
GetPagedProductsUseCase
File: common/module/product/product/usecases/get-paged-products.usecase.ts
Retrieves paginated list of products with advanced filtering capabilities.
Implementation
Business Logic Flow
Permission Validation: Validates user has
READ_PRODUCTpermissionQuery Construction: Builds complex query with filters and pagination
Search Execution: Performs text search across multiple language versions
Tag Filtering: Applies tag-based filtering with array matching
Result Pagination: Returns paginated results with metadata
Advanced Features
Multi-language Search: Searches across all language versions
Tag Filtering: Supports multiple tag filtering with AND/OR logic
Text Search: Full-text search across titles and descriptions
Performance Optimization: Efficient database queries with proper indexing
Cache Integration: Caches frequently accessed product lists
Filtering Capabilities
Text Search: Phrase-based search across product content
Tag Filtering: Filter by one or more product tags
Pagination: Configurable page size and navigation
Sorting: Support for various sorting criteria
UpdateProductUseCase
File: common/module/product/product/usecases/update-product.usecase.ts
Updates an existing product with validation and change tracking.
Implementation
Business Logic Flow
Permission Validation: Validates user has
EDIT_PRODUCTpermissionExistence Check: Verifies product exists and is accessible
Change Validation: Validates proposed changes against business rules
Command Execution: Applies changes through command pattern
Event Publishing: Publishes update events for system integration
Response: Returns updated product with fresh data
Business Rules for Updates
SKU cannot be modified after creation
At least one language version must remain
Price changes are tracked for audit purposes
Tag assignments are validated for existence
Image references are validated for accessibility
DeleteProductUseCase
File: common/module/product/product/usecases/delete-product.usecase.ts
Performs soft deletion of products with dependency validation.
Implementation
Business Logic Flow
Permission Validation: Validates user has
DELETE_PRODUCTpermissionDependency Check: Verifies no active orders reference the product
Soft Delete: Marks product as deleted while preserving data
Cascade Operations: Handles related data (images, references)
Event Publishing: Publishes deletion events for cleanup
Audit Logging: Records deletion for compliance and tracking
Dependency Validation
Checks for active orders containing the product
Validates no pending reservations reference the product
Ensures data integrity across the system
Prevents deletion of products with financial implications
Product Tag Use Cases
CreateProductTagUseCase
File: common/module/product/tag/usecases/create-product-tag.usecase.ts
Creates new product tags for categorization and filtering.
Implementation
Business Logic Flow
Permission Validation: Validates user has
CREATE_PRODUCT_TAGpermissionUniqueness Check: Ensures tag name is unique within tenant
Command Execution: Creates tag through command pattern
Response: Returns created tag with generated ID
Tag Creation Rules
Tag names must be unique within tenant
Tag names are case-insensitive
Special characters are validated and sanitized
Maximum length constraints are enforced
GetPagedProductTagsUseCase
File: common/module/product/tag/usecases/get-paged-product-tags.usecase.ts
Retrieves paginated list of product tags with search functionality.
Implementation
Features
Search functionality for tag names
Efficient pagination for large tag lists
Usage statistics for each tag
Sorting by name, creation date, or usage frequency
UpdateProductTagUseCase
File: common/module/product/tag/usecases/update-product-tag.usecase.ts
Updates existing product tags with validation.
Business Logic
Permission Validation: Validates
EDIT_PRODUCT_TAGpermissionUniqueness Check: Ensures updated name doesn't conflict
Usage Validation: Checks if tag is currently in use
Update Propagation: Updates all products using the tag
Cache Invalidation: Clears relevant caches
DeleteProductTagUseCase
File: common/module/product/tag/usecases/delete-product-tag.usecase.ts
Deletes product tags with usage validation.
Business Logic
Permission Validation: Validates
DELETE_PRODUCT_TAGpermissionUsage Check: Prevents deletion of tags in use
Cascade Options: Offers tag removal from products or prevention
Audit Logging: Records tag deletion activities
Product Image Use Cases
UpsertProductImageUseCase
File: common/module/product/product/usecases/upsert-product-image.usecase.ts
Handles product image upload and management operations.
Implementation
Business Logic Flow
Permission Validation: Validates user has
EDIT_PRODUCTpermissionFile Validation: Checks file type, size, and format
Image Processing: Resizes, optimizes, and generates thumbnails
Upload to CDN: Stores image in CDN with proper naming
Database Update: Links image to product in database
Cache Invalidation: Clears product caches
Response: Returns media information with CDN URLs
Image Processing Features
Format Validation: Supports JPEG, PNG, and WebP formats
Size Optimization: Automatic compression and optimization
Thumbnail Generation: Creates multiple size variants
CDN Integration: Direct upload to content delivery network
Metadata Extraction: Extracts image dimensions and properties
DeleteProductImageUseCase
File: common/module/product/product/usecases/delete-product-image.usecase.ts
Handles product image deletion with cleanup.
Implementation
Business Logic Flow
Permission Validation: Validates user has
EDIT_PRODUCTpermissionImage Verification: Confirms image belongs to specified product
CDN Cleanup: Removes image files from CDN
Database Cleanup: Removes image references from product
Cache Invalidation: Clears relevant caches
Audit Logging: Records image deletion activity
CQRS Implementation
Command Pattern
The product management module implements CQRS (Command Query Responsibility Segregation) for clear separation of read and write operations.
Commands
AddProductCommand: Creates new products
UpdateProductCommand: Modifies existing products
DeleteProductCommand: Soft deletes products
UpsertProductImageCommand: Manages product images
AddProductTagCommand: Creates product tags
Queries
GetProductByIdQuery: Retrieves single product
GetPagedProductsQuery: Retrieves paginated product lists
GetProductTagByIdQuery: Retrieves single tag
GetPagedProductTagsQuery: Retrieves paginated tag lists
Command Handlers
Each command has a dedicated handler that implements the business logic:
Query Handlers
Query handlers focus on data retrieval and optimization:
Permission System
Permission-Based Access Control
All use cases implement comprehensive permission validation:
Permission Hierarchy
Multi-Tenant Security
Tenant Isolation: All operations are scoped to specific tenants
Data Segregation: Database queries include tenant filtering
Permission Scoping: Permissions are validated within tenant context
Audit Trails: All operations are logged with tenant and user context
Event Publishing
Domain Events
The system publishes events for integration and auditing:
Event Handlers
External modules can subscribe to product events:
Error Handling
Exception Types
The system defines specific exceptions for different error scenarios:
Error Recovery
Use cases implement proper error handling and recovery:
Business Rules
Product Management Rules
Creation Rules
SKU Uniqueness: Product SKU must be unique within tenant
Language Requirements: At least one language version required
Price Validation: Price must be positive with valid currency
Tag Validation: All referenced tags must exist
Image Limits: Maximum 10 images per product
Update Rules
SKU Immutability: SKU cannot be changed after creation
Language Preservation: Cannot remove all language versions
Active Order Protection: Cannot modify products in active orders
Price History: All price changes are tracked for audit
Tag Synchronization: Tag updates propagate to all using products
Deletion Rules
Soft Delete Only: Products are never physically deleted
Dependency Validation: Cannot delete products with active references
Order Protection: Products in orders cannot be deleted
Audit Preservation: All historical data is maintained
Cascade Management: Related images and references are handled
Tag Management Rules
Tag Creation
Name Uniqueness: Tag names must be unique within tenant
Character Validation: Only alphanumeric and specific special characters
Length Limits: Tag names have maximum length constraints
Case Insensitivity: Tag names are treated case-insensitively
Tag Usage
Referential Integrity: Cannot delete tags in use by products
Bulk Operations: Support for efficient bulk tag management
Usage Tracking: Track which products use which tags
Search Optimization: Tags are indexed for fast filtering
Image Management Rules
Upload Constraints
File Types: Only JPEG, PNG, and WebP formats supported
Size Limits: Maximum 5MB per image file
Dimension Limits: Reasonable minimum and maximum dimensions
Count Limits: Maximum 10 images per product
Quality Standards: Automatic optimization and compression
Processing Rules
Format Conversion: Images may be converted for optimization
Thumbnail Generation: Multiple size variants created automatically
CDN Integration: Images stored in CDN for global access
Metadata Extraction: Image properties extracted and stored
Progressive Loading: Support for progressive image loading
Performance Optimization Rules
Caching Strategy
Product Data: Frequently accessed products are cached
Search Results: Common search results are cached
Tag Lists: Tag collections are heavily cached
Image URLs: CDN URLs are cached for fast access
Cache Invalidation: Smart cache invalidation on updates
Database Optimization
Indexing Strategy: Comprehensive indexing for all query patterns
Query Optimization: Efficient queries with proper field selection
Relationship Loading: Optimized loading of related data
Pagination Efficiency: Efficient pagination for large datasets
Search Performance: Text search optimization with proper indexes
This use case documentation provides a comprehensive guide to the business logic, implementation patterns, and rules governing the Product Management module, ensuring consistent and reliable operation across all product-related operations.
Last updated
Was this helpful?