- Added generated index files and report directories to .gitignore to prevent unnecessary tracking of transient files. - Updated README links to reflect new documentation paths for better navigation. - Improved documentation organization by ensuring all links point to the correct locations, enhancing user experience and accessibility.
175 lines
4.4 KiB
Markdown
175 lines
4.4 KiB
Markdown
# Code Documentation Guide
|
|
|
|
This guide outlines the standards and best practices for documenting code in the Sankofa Phoenix project.
|
|
|
|
## JSDoc Standards
|
|
|
|
### Function Documentation
|
|
|
|
All public functions should include JSDoc comments with:
|
|
|
|
- Description of what the function does
|
|
- `@param` tags for each parameter
|
|
- `@returns` tag describing the return value
|
|
- `@throws` tags for exceptions that may be thrown
|
|
- `@example` tag with usage example (for complex functions)
|
|
|
|
**Example:**
|
|
|
|
```typescript
|
|
/**
|
|
* Authenticate a user and return JWT token
|
|
*
|
|
* @param email - User email address
|
|
* @param password - User password
|
|
* @returns Authentication payload with JWT token and user information
|
|
* @throws {AuthenticationError} If credentials are invalid
|
|
* @example
|
|
* ```typescript
|
|
* const result = await login('user@example.com', 'password123');
|
|
* console.log(result.token); // JWT token
|
|
* ```
|
|
*/
|
|
export async function login(email: string, password: string): Promise<AuthPayload> {
|
|
// implementation
|
|
}
|
|
```
|
|
|
|
### Class Documentation
|
|
|
|
Classes should include:
|
|
|
|
- Description of the class purpose
|
|
- `@example` tag showing basic usage
|
|
|
|
**Example:**
|
|
|
|
```typescript
|
|
/**
|
|
* Proxmox VE Infrastructure Adapter
|
|
*
|
|
* Implements the InfrastructureAdapter interface for Proxmox VE infrastructure.
|
|
* Provides resource discovery, creation, update, deletion, metrics, and health checks.
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* const adapter = new ProxmoxAdapter({
|
|
* apiUrl: 'https://proxmox.example.com:8006',
|
|
* apiToken: 'token-id=...'
|
|
* });
|
|
* const resources = await adapter.discoverResources();
|
|
* ```
|
|
*/
|
|
export class ProxmoxAdapter implements InfrastructureAdapter {
|
|
// implementation
|
|
}
|
|
```
|
|
|
|
### Interface Documentation
|
|
|
|
Complex interfaces should include documentation:
|
|
|
|
```typescript
|
|
/**
|
|
* Resource filter criteria for querying resources
|
|
*
|
|
* @property type - Filter by resource type (e.g., 'VM', 'CONTAINER')
|
|
* @property status - Filter by resource status (e.g., 'RUNNING', 'STOPPED')
|
|
* @property siteId - Filter by site ID
|
|
* @property tenantId - Filter by tenant ID
|
|
*/
|
|
export interface ResourceFilter {
|
|
type?: string
|
|
status?: string
|
|
siteId?: string
|
|
tenantId?: string
|
|
}
|
|
```
|
|
|
|
### Method Documentation
|
|
|
|
Class methods should follow the same pattern as functions:
|
|
|
|
```typescript
|
|
/**
|
|
* Discover all resources across all Proxmox nodes
|
|
*
|
|
* @returns Array of normalized resources (VMs) from all nodes
|
|
* @throws {Error} If API connection fails or nodes cannot be retrieved
|
|
* @example
|
|
* ```typescript
|
|
* const resources = await adapter.discoverResources();
|
|
* console.log(`Found ${resources.length} VMs`);
|
|
* ```
|
|
*/
|
|
async discoverResources(): Promise<NormalizedResource[]> {
|
|
// implementation
|
|
}
|
|
```
|
|
|
|
## Inline Comments
|
|
|
|
### When to Use Inline Comments
|
|
|
|
- **Complex logic**: Explain non-obvious algorithms or business rules
|
|
- **Workarounds**: Document temporary fixes or known issues
|
|
- **Performance optimizations**: Explain why a particular approach was chosen
|
|
- **Business rules**: Document domain-specific logic
|
|
|
|
### Comment Style
|
|
|
|
```typescript
|
|
// Good: Explains why, not what
|
|
// Tenant-aware filtering (superior to Azure multi-tenancy)
|
|
if (context.tenantContext) {
|
|
// System admins can see all resources
|
|
if (context.tenantContext.isSystemAdmin) {
|
|
// No filtering needed
|
|
} else if (context.tenantContext.tenantId) {
|
|
// Filter by tenant ID
|
|
query += ` AND r.tenant_id = $${paramCount}`
|
|
}
|
|
}
|
|
|
|
// Bad: States the obvious
|
|
// Loop through nodes
|
|
for (const node of nodes) {
|
|
// Get VMs
|
|
const vms = await this.getVMs(node.node)
|
|
}
|
|
```
|
|
|
|
## TODO Comments
|
|
|
|
Use TODO comments for known improvements:
|
|
|
|
```typescript
|
|
// TODO: Add rate limiting to prevent API abuse
|
|
// TODO: Implement caching for frequently accessed resources
|
|
// FIXME: This workaround should be removed when upstream issue is fixed
|
|
```
|
|
|
|
## Documentation Checklist
|
|
|
|
When adding new code, ensure:
|
|
|
|
- [ ] Public functions have JSDoc comments
|
|
- [ ] Complex private functions have inline comments
|
|
- [ ] Classes have class-level documentation
|
|
- [ ] Interfaces have documentation for complex types
|
|
- [ ] Examples are provided for public APIs
|
|
- [ ] Error cases are documented with `@throws`
|
|
- [ ] Complex algorithms have explanatory comments
|
|
- [ ] Business rules are documented
|
|
|
|
## Tools
|
|
|
|
- **TypeScript**: Built-in JSDoc support
|
|
- **VS Code**: JSDoc snippets and IntelliSense
|
|
- **tsdoc**: Standard for TypeScript documentation comments
|
|
|
|
---
|
|
|
|
**Last Updated**: 2025-01-09
|
|
|