autocomit
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
# Story 5: Version Management
|
||||
|
||||
## Story Overview
|
||||
|
||||
**As a** application manager
|
||||
**I want** to track application versions
|
||||
**So that** I can manage releases and their lifecycle
|
||||
|
||||
**Story Type**: Feature (Core Domain)
|
||||
**Priority**: High
|
||||
**Estimated Effort**: 3-4 days
|
||||
**Dependencies**: Story 2 (Applications)
|
||||
|
||||
---
|
||||
|
||||
## Business Value
|
||||
|
||||
Versions represent application releases. This enables:
|
||||
- Tracking what versions exist for each application
|
||||
- Version lifecycle management (release date, end-of-life)
|
||||
- Foundation for deployment tracking (Story 6)
|
||||
- Link to external references (Git tags, JIRA releases)
|
||||
|
||||
---
|
||||
|
||||
## Scope
|
||||
|
||||
### In Scope
|
||||
✅ Version CRUD operations
|
||||
✅ Version-Application association
|
||||
✅ Version lifecycle (release date, end-of-life)
|
||||
✅ External reference tracking (Git, JIRA, etc.)
|
||||
✅ Version listing per application
|
||||
|
||||
### Out of Scope
|
||||
❌ Deployment tracking (Story 6)
|
||||
❌ Version comparison/diff
|
||||
❌ Automated version detection from CI/CD
|
||||
|
||||
---
|
||||
|
||||
## Database Schema
|
||||
|
||||
```sql
|
||||
CREATE TABLE version (
|
||||
id UUID PRIMARY KEY,
|
||||
application_id UUID NOT NULL REFERENCES application(id) ON DELETE CASCADE,
|
||||
version_identifier VARCHAR(100) NOT NULL, -- "1.2.3", "2024.Q1"
|
||||
external_reference VARCHAR(500), -- Git tag, JIRA link, etc.
|
||||
release_date DATE NOT NULL,
|
||||
end_of_life_date DATE,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL,
|
||||
UNIQUE(application_id, version_identifier)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_version_application ON version(application_id);
|
||||
CREATE INDEX idx_version_release_date ON version(release_date);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Key Endpoints
|
||||
|
||||
- `GET /api/applications/{appId}/versions` - List versions for application
|
||||
- `GET /api/versions/{id}` - Get version details
|
||||
- `POST /api/applications/{appId}/versions` - Create version
|
||||
- `PUT /api/versions/{id}` - Update version
|
||||
- `DELETE /api/versions/{id}` - Delete version
|
||||
- `GET /api/versions/latest?applicationId={appId}` - Get latest version
|
||||
|
||||
---
|
||||
|
||||
## DTOs
|
||||
|
||||
```typescript
|
||||
export interface Version {
|
||||
id: string;
|
||||
applicationId: string;
|
||||
versionIdentifier: string; // "1.2.3"
|
||||
externalReference?: string; // "https://github.com/org/repo/releases/tag/v1.2.3"
|
||||
releaseDate: Date;
|
||||
endOfLifeDate?: Date;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
}
|
||||
|
||||
export interface CreateVersionRequest {
|
||||
versionIdentifier: string;
|
||||
externalReference?: string;
|
||||
releaseDate: Date;
|
||||
endOfLifeDate?: Date;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Frontend Components
|
||||
|
||||
### VersionListComponent (sub-component of ApplicationDetailComponent)
|
||||
- Displayed as tab in Application Detail view
|
||||
- Table: Version, Release Date, End of Life, External Reference, Actions
|
||||
- "Add New Version" button
|
||||
- Sort by release date (newest first)
|
||||
- Actions: Edit, Delete
|
||||
|
||||
### VersionFormComponent
|
||||
- Modal or inline form
|
||||
- Fields:
|
||||
- Version Identifier (required, must be unique per application)
|
||||
- External Reference (optional, URL)
|
||||
- Release Date (required, date picker)
|
||||
- End of Life Date (optional, must be after release date)
|
||||
- Validation:
|
||||
- Version identifier unique within application
|
||||
- Dates valid (EOL after release)
|
||||
|
||||
---
|
||||
|
||||
## Business Rules
|
||||
|
||||
1. **Unique Version**: Version identifier must be unique within an application
|
||||
2. **Date Logic**: End-of-life date (if set) must be after release date
|
||||
3. **Latest Version**: System tracks the version with the most recent release date as "latest"
|
||||
4. **Deletion**: Can only delete version if not deployed anywhere (checked in Story 6)
|
||||
|
||||
---
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [ ] Version can be created for an application
|
||||
- [ ] Version identifier must be unique within application
|
||||
- [ ] Duplicate version identifiers are rejected
|
||||
- [ ] Version release date is required
|
||||
- [ ] End-of-life date validation (must be after release)
|
||||
- [ ] Versions listed per application
|
||||
- [ ] Versions sorted by release date (newest first)
|
||||
- [ ] Latest version is identifiable
|
||||
- [ ] Version can be edited
|
||||
- [ ] Version can be deleted
|
||||
- [ ] External reference links are clickable
|
||||
- [ ] Tests pass (>80% backend, >70% frontend)
|
||||
|
||||
---
|
||||
|
||||
## Testing Scenarios
|
||||
|
||||
1. **Create Version**: Add version "1.0.0" to an application
|
||||
2. **Duplicate Version**: Attempt to create "1.0.0" again (should fail)
|
||||
3. **Multiple Versions**: Create versions 1.0.0, 1.1.0, 2.0.0, verify sorting
|
||||
4. **Latest Version**: Verify version with most recent release date marked as latest
|
||||
5. **Edit Version**: Update end-of-life date
|
||||
6. **Delete Version**: Delete version (if not deployed)
|
||||
7. **Date Validation**: Set EOL before release date (should fail)
|
||||
|
||||
---
|
||||
|
||||
## Integration with Application Detail
|
||||
|
||||
The Application Detail page (from Story 2) will be enhanced with a "Versions" tab:
|
||||
|
||||
```
|
||||
Application Detail
|
||||
├── Overview (existing)
|
||||
├── Versions (NEW)
|
||||
│ ├── Version List
|
||||
│ └── Add Version Button
|
||||
├── Deployments (Story 6)
|
||||
└── Contacts (Story 3)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Story Status**: Ready for Development
|
||||
**Estimated Completion**: 3-4 days
|
||||
Reference in New Issue
Block a user