13 KiB
Story 8: External Dependencies Management
Story Overview
As an application manager
I want to track external dependencies for applications
So that I can document and manage all external services, databases, and resources my applications rely on
Story Type: Feature (Core Domain)
Priority: High
Estimated Effort: 5-7 days
Dependencies: Story 2 (Applications)
Business Value
External dependencies represent critical integrations and resources that applications rely on. This enables:
- Complete visibility of application dependencies
- Risk assessment and impact analysis
- Dependency lifecycle tracking
- Foundation for data usage agreement management
- Network and security planning
Scope
In Scope
✅ External dependency CRUD operations
✅ Dependency type management (catalog)
✅ Dependency-Application association
✅ Validity period tracking (start/end dates)
✅ Dependency documentation and metadata
✅ Filtering and search capabilities
Out of Scope
❌ Data Usage Agreement associations (Story 9)
❌ Automated dependency detection
❌ Dependency health monitoring
❌ Automated alerts for expiring dependencies
Database Schema
-- Dependency Types Catalog
CREATE TABLE dependency_type (
id UUID PRIMARY KEY,
type_name VARCHAR(100) UNIQUE NOT NULL,
description TEXT,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL
);
-- External Dependencies
CREATE TABLE external_dependency (
id UUID PRIMARY KEY,
application_id UUID NOT NULL REFERENCES application(id) ON DELETE CASCADE,
dependency_type_id UUID NOT NULL REFERENCES dependency_type(id),
name VARCHAR(255) NOT NULL,
description TEXT,
technical_documentation TEXT,
validity_start_date DATE,
validity_end_date DATE,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL,
CONSTRAINT fk_dependency_application FOREIGN KEY (application_id) REFERENCES application(id),
CONSTRAINT fk_dependency_type FOREIGN KEY (dependency_type_id) REFERENCES dependency_type(id),
CONSTRAINT check_validity_dates CHECK (validity_end_date IS NULL OR validity_end_date >= validity_start_date)
);
-- Indexes
CREATE INDEX idx_ext_dep_application ON external_dependency(application_id);
CREATE INDEX idx_ext_dep_type ON external_dependency(dependency_type_id);
CREATE INDEX idx_ext_dep_validity_end ON external_dependency(validity_end_date);
CREATE INDEX idx_ext_dep_name ON external_dependency(name);
-- Insert default dependency types
INSERT INTO dependency_type (id, type_name, description, created_at, updated_at) VALUES
(uuid_generate_v4(), 'WEB_SERVICE', 'REST APIs, SOAP services, microservices', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(uuid_generate_v4(), 'DATABASE', 'External database connections', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(uuid_generate_v4(), 'CERTIFICATE', 'SSL/TLS certificates, authentication certificates', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(uuid_generate_v4(), 'NETWORK_FLOW', 'Network connections, firewall rules, VPN tunnels', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
Key Business Logic
Validity Period Management
- Validity Start Date: When the dependency becomes available/authorized for use
- Validity End Date: When the dependency expires (optional for indefinite dependencies)
- Active Status: A dependency is considered "active" if:
- Current date >= validity_start_date (or no start date)
- Current date <= validity_end_date (or no end date)
Expiration Tracking
- Dependencies approaching expiration (within 30 days) should be highlighted
- Expired dependencies (end date in the past) should be flagged
- No validation prevents using expired dependencies (warning only)
Key Endpoints
Dependency Types (Catalog)
GET /api/dependency-types- List all dependency typesGET /api/dependency-types/{id}- Get dependency type by IDPOST /api/dependency-types- Create custom dependency type (admin only)PUT /api/dependency-types/{id}- Update dependency type (admin only)DELETE /api/dependency-types/{id}- Delete dependency type (admin only, if unused)
External Dependencies
GET /api/applications/{appId}/dependencies- List dependencies for applicationGET /api/dependencies- List all dependencies (paginated, filtered)GET /api/dependencies/{id}- Get dependency detailsPOST /api/applications/{appId}/dependencies- Create dependencyPUT /api/dependencies/{id}- Update dependencyDELETE /api/dependencies/{id}- Delete dependencyGET /api/dependencies/expiring?days={30}- Get dependencies expiring soonGET /api/dependencies/expired- Get expired dependenciesGET /api/dependencies/by-type/{typeId}- Filter by dependency type
DTOs
export interface DependencyType {
id: string;
typeName: string;
description?: string;
createdAt: Date;
updatedAt: Date;
}
export interface ExternalDependency {
id: string;
application: { id: string; name: string };
dependencyType: DependencyType;
name: string;
description?: string;
technicalDocumentation?: string;
validityStartDate?: Date;
validityEndDate?: Date;
isActive: boolean; // Computed based on validity dates
daysUntilExpiration?: number; // Computed if expiring soon
createdAt: Date;
updatedAt: Date;
}
export interface CreateExternalDependencyRequest {
dependencyTypeId: string;
name: string;
description?: string;
technicalDocumentation?: string;
validityStartDate?: Date;
validityEndDate?: Date;
}
export interface UpdateExternalDependencyRequest {
dependencyTypeId?: string;
name?: string;
description?: string;
technicalDocumentation?: string;
validityStartDate?: Date;
validityEndDate?: Date;
}
export interface CreateDependencyTypeRequest {
typeName: string;
description?: string;
}
Frontend Components
DependencyTypeManagementComponent (Admin Only)
- Table view of all dependency types
- CRUD operations for custom types
- Default types (WEB_SERVICE, DATABASE, CERTIFICATE, NETWORK_FLOW) cannot be deleted
- Validation: Cannot delete type if dependencies exist
DependencyListComponent (Application Detail Tab)
- Displayed as tab in Application Detail view
- Table columns: Name, Type, Status (Active/Expiring/Expired), Validity Period, Actions
- Status indicators:
- Active: Green badge (current date within validity period)
- Expiring Soon: Yellow badge (expires within 30 days)
- Expired: Red badge (end date in past)
- Not Yet Valid: Gray badge (start date in future)
- Filter by:
- Dependency type
- Status (all, active, expiring, expired)
- Sort by name, type, expiration date
- "Add Dependency" button
- Actions: View, Edit, Delete
DependencyFormComponent
- Modal or inline form
- Fields:
- Dependency Type (required, dropdown from catalog)
- Name (required, text input)
- Description (optional, textarea)
- Technical Documentation (optional, textarea or rich text)
- Validity Start Date (optional, date picker)
- Validity End Date (optional, date picker)
- Validation:
- Name required
- Dependency type required
- End date must be >= start date
- Show warning if end date is in the past
- Show warning if end date is within 30 days
- Support both create and edit modes
DependencyDetailComponent
- Display full dependency details
- Show status badge (active/expiring/expired)
- Show computed fields:
- "Days until expiration" if expiring soon
- "Expired X days ago" if expired
- Show technical documentation (formatted)
- "Edit" and "Delete" buttons
- Link to application
- Future: Link to data usage agreements (Story 9)
ExpiringDependenciesWidget (Dashboard)
- Widget showing dependencies expiring within 30 days
- Sortable by expiration date
- Click to navigate to dependency detail
- Badge showing count of expiring dependencies
Acceptance Criteria
Backend
- Dependency types can be listed
- Admin can create custom dependency types
- Default dependency types are seeded in database
- Dependency type cannot be deleted if dependencies exist
- External dependency can be created for an application
- Dependency creation validates application exists
- Dependency creation validates dependency type exists
- Validity dates are validated (end >= start)
- Dependencies can be updated
- Dependencies can be deleted
- Dependencies can be listed per application
- Dependencies can be filtered by type
- Dependencies can be filtered by status (active/expiring/expired)
- Expiring dependencies query returns correct results
- Active status is computed correctly
- Days until expiration is computed correctly
- All endpoints authenticated
- Tests pass (>80% coverage)
Frontend
- User can view list of dependencies for an application
- Dependencies show status badge (active/expiring/expired)
- User can filter dependencies by type
- User can filter dependencies by status
- User can create new dependency
- Form validates all required fields
- Form validates date logic (end >= start)
- Form shows warnings for past or soon expiring dates
- User can view dependency details
- User can edit existing dependency
- User can delete dependency (with confirmation)
- Expiring dependencies are highlighted
- Admin can manage dependency types catalog
- Success/error notifications displayed
- Tests pass (>70% coverage)
Testing Scenarios
Scenario 1: Create External Dependency
- Navigate to Application Detail → Dependencies tab
- Click "Add Dependency"
- Fill in form:
- Type: "WEB_SERVICE"
- Name: "Payment Gateway API"
- Description: "External payment processing service"
- Technical Documentation: "Endpoint: https://api.payment.com/v2"
- Validity Start: 2026-01-01
- Validity End: 2027-12-31
- Click "Save"
- Verify success notification
- Verify dependency appears in list with "Active" status (green badge)
Scenario 2: Expiring Dependency Warning
- Navigate to Application Detail → Dependencies tab
- Click "Add Dependency"
- Fill in form with end date 20 days from today
- Verify warning message: "This dependency expires in 20 days"
- Save dependency
- Verify dependency shows "Expiring Soon" badge (yellow)
Scenario 3: Expired Dependency
- Navigate to Application Detail → Dependencies tab
- Click "Add Dependency"
- Fill in form with end date in the past
- Verify warning message: "This dependency has already expired"
- Save dependency (system allows but warns)
- Verify dependency shows "Expired" badge (red)
Scenario 4: Date Validation
- Create dependency form
- Set start date: 2027-01-01
- Set end date: 2026-01-01 (before start)
- Attempt to save
- Verify error: "End date must be after start date"
Scenario 5: Filter Dependencies
- Navigate to Application Detail → Dependencies tab
- Create dependencies of different types
- Filter by type: "DATABASE"
- Verify only database dependencies shown
- Filter by status: "Expiring"
- Verify only expiring dependencies shown
Scenario 6: Manage Dependency Types (Admin)
- Login as admin
- Navigate to Settings → Dependency Types
- Click "Create Custom Type"
- Name: "CLOUD_SERVICE"
- Description: "Cloud service providers and SaaS platforms"
- Save
- Verify new type appears in catalog
- Verify new type available in dependency creation form
Scenario 7: Delete Dependency Type Protection
- Login as admin
- Navigate to Settings → Dependency Types
- Attempt to delete "WEB_SERVICE" (has dependencies)
- Verify error: "Cannot delete dependency type with existing dependencies"
- Create new unused type
- Delete it
- Verify successful deletion
Scenario 8: View Expiring Dependencies Dashboard
- Navigate to main dashboard
- View "Expiring Dependencies" widget
- Verify list shows dependencies expiring within 30 days
- Verify sorted by expiration date (soonest first)
- Click on dependency
- Verify navigation to dependency detail
Integration Points
Application Detail Enhancement
Add "Dependencies" tab showing:
- List of all external dependencies
- Status overview (count by status)
- "Add Dependency" button
- Filter and search controls
Dashboard Enhancement (Optional for Story 8)
Add widget showing:
- Expiring dependencies count
- Top 5 dependencies expiring soonest
- Link to full list
Performance Considerations
- Index on application_id for fast dependency lookup per application
- Index on validity_end_date for expiring/expired queries
- Index on dependency_type_id for type filtering
- Compute active status and days until expiration in service layer (not stored)
- Pagination for dependency lists (can grow large)
Future Enhancements (Phase 3)
- Automated dependency scanning/detection
- Dependency health monitoring
- Automated email alerts for expiring dependencies
- Dependency impact analysis (which apps depend on this service)
- Dependency renewal workflow
- Integration with certificate management tools
- Network diagram visualization
- Bulk import of dependencies from CSV
Story Status: Ready for Development
Estimated Completion: 5-7 days