# EDMS API Documentation ## Overview This document provides comprehensive API documentation for the Electronic Document Management System (EDMS). The system uses a RESTful API architecture with server-side routes in Nuxt 3. ## Authentication All API endpoints require authentication unless specified otherwise. Authentication is handled via JWT tokens. ### Authentication Headers ```http Authorization: Bearer Content-Type: application/json ``` ## Base URL ``` Development: http://localhost:3000/api Production: https://your-domain.com/api ``` ## API Endpoints ### DMS Settings API #### GET /api/dms/settings Retrieves current DMS configuration settings. **Response:** ```json { "statusCode": 200, "message": "Success", "data": { "access": { "userRoles": ["Admin", "Editor", "Viewer", "Uploader"], "rbacEnabled": true, "userGroups": ["HR Department", "Finance", "IT", "Legal"], "permissions": { "view": true, "edit": true, "delete": false, "download": true, "share": true }, "authentication": { "ssoEnabled": false, "mfaRequired": false, "ldapIntegration": false, "sessionTimeout": 8 } }, "documents": { "folderHierarchy": { "maxDepth": 5, "defaultStructure": ["Department", "Project", "Category", "Year"], "folderTemplates": ["Standard", "Project-based", "Department-based"] }, "namingConventions": { "autoGenerate": true, "mandatoryFields": ["title", "department", "date"], "pattern": "{department}_{title}_{date}" }, "retention": { "enabled": true, "defaultDays": 2555, "archiveBeforeDelete": true }, "versionControl": { "enabled": true, "maxVersions": 10, "autoVersioning": true } }, "metadata": { "customFields": [ {"name": "Department", "type": "dropdown", "required": true}, {"name": "Priority", "type": "select", "required": false} ], "tagging": { "predefinedTags": ["urgent", "confidential", "public", "draft", "final"], "userGeneratedTags": true, "tagSuggestions": true } } } } ``` #### POST /api/dms/settings Updates DMS configuration settings. **Request Body:** ```json { "access": { "userRoles": ["Admin", "Editor", "Viewer"], "rbacEnabled": true }, "documents": { "retention": { "enabled": true, "defaultDays": 365 } } } ``` **Response:** ```json { "statusCode": 200, "message": "DMS settings updated successfully", "data": { // Updated settings object } } ``` ### Site Settings API #### GET /api/devtool/config/site-settings Retrieves site configuration settings. **Response:** ```json { "statusCode": 200, "message": "Success", "data": { "siteName": "EDMS Portal", "siteDescription": "Electronic Document Management System", "siteLogo": "/uploads/logo.png", "themeMode": "light", "customCSS": "", "seoSettings": { "title": "EDMS - Document Management", "description": "Secure document management system", "keywords": "document,management,security" } } } ``` #### POST /api/devtool/config/site-settings Updates site configuration settings. **Request Body:** ```json { "siteName": "New Site Name", "themeMode": "dark", "customCSS": "body { background: #000; }" } ``` ### File Upload API #### POST /api/devtool/config/upload-file Handles file uploads for site assets. **Request:** Multipart form data ``` file: uploadType: "logo" | "favicon" | "background" ``` **Response:** ```json { "statusCode": 200, "message": "File uploaded successfully", "data": { "filename": "logo_1234567890.png", "originalName": "company-logo.png", "size": 52480, "mimetype": "image/png", "path": "/uploads/logo_1234567890.png", "url": "http://localhost:3000/uploads/logo_1234567890.png" } } ``` ### Authentication API #### POST /api/auth/login Authenticates user credentials. **Request Body:** ```json { "username": "user@example.com", "password": "secure_password" } ``` **Response:** ```json { "statusCode": 200, "message": "Authentication successful", "data": { "user": { "id": "user123", "username": "user@example.com", "role": "admin", "department": "IT Department" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." } } ``` #### GET /api/auth/logout Logs out the current user. **Response:** ```json { "statusCode": 200, "message": "Logout successful" } ``` #### POST /api/auth/refresh Refreshes authentication token. **Request Body:** ```json { "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." } ``` ### Content Template API #### GET /api/devtool/content/template/list Retrieves available content templates. **Response:** ```json { "statusCode": 200, "message": "Success", "data": [ { "id": "template_1", "title": "Standard Page Template", "description": "Basic page layout with header and content", "category": "page", "createdAt": "2024-01-01T00:00:00Z" } ] } ``` #### GET /api/devtool/content/template/import Imports a content template to a specific page. **Query Parameters:** - `path`: Target page path - `templateId`: Template ID to import **Response:** ```json { "statusCode": 200, "message": "Template imported successfully", "data": { "path": "/dms/dashboard", "templateId": "template_1", "importedAt": "2024-01-01T00:00:00Z" } } ``` ## Error Responses ### Error Format All API errors follow a consistent format: ```json { "statusCode": 400, "message": "Error description", "error": "BadRequest", "data": null } ``` ### Common Error Codes | Status Code | Error Type | Description | |-------------|------------|-------------| | 400 | Bad Request | Invalid request parameters | | 401 | Unauthorized | Authentication required | | 403 | Forbidden | Insufficient permissions | | 404 | Not Found | Resource not found | | 422 | Validation Error | Request validation failed | | 429 | Rate Limited | Too many requests | | 500 | Internal Server Error | Server error | ### Example Error Responses #### Validation Error (422) ```json { "statusCode": 422, "message": "Validation failed", "error": "ValidationError", "data": { "errors": [ { "field": "siteName", "message": "Site name is required", "code": "required" } ] } } ``` #### Authentication Error (401) ```json { "statusCode": 401, "message": "Authentication token is invalid or expired", "error": "Unauthorized", "data": null } ``` ## Rate Limiting API endpoints are rate limited to prevent abuse: - **Authentication endpoints**: 5 requests per minute per IP - **File upload endpoints**: 10 requests per minute per user - **General endpoints**: 100 requests per minute per user ## Request/Response Examples ### cURL Examples #### Get DMS Settings ```bash curl -X GET \ http://localhost:3000/api/dms/settings \ -H 'Authorization: Bearer your_jwt_token' \ -H 'Content-Type: application/json' ``` #### Update Site Settings ```bash curl -X POST \ http://localhost:3000/api/devtool/config/site-settings \ -H 'Authorization: Bearer your_jwt_token' \ -H 'Content-Type: application/json' \ -d '{ "siteName": "My EDMS Portal", "themeMode": "dark" }' ``` #### Upload File ```bash curl -X POST \ http://localhost:3000/api/devtool/config/upload-file \ -H 'Authorization: Bearer your_jwt_token' \ -F 'file=@/path/to/logo.png' \ -F 'uploadType=logo' ``` ### JavaScript Examples #### Using Fetch API ```javascript // Get DMS Settings const response = await fetch('/api/dms/settings', { headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }); const data = await response.json(); // Update DMS Settings const updateResponse = await fetch('/api/dms/settings', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ access: { rbacEnabled: true, userRoles: ['Admin', 'User'] } }) }); ``` #### Using Nuxt useFetch ```javascript // In Vue component const { data, error } = await useFetch('/api/dms/settings', { headers: { 'Authorization': `Bearer ${token}` } }); // Update settings const { data: updateResult } = await useFetch('/api/dms/settings', { method: 'POST', body: { access: { rbacEnabled: true } } }); ``` ## Pagination For endpoints that return lists, pagination is implemented using: **Query Parameters:** - `page`: Page number (default: 1) - `limit`: Items per page (default: 20, max: 100) - `sort`: Sort field - `order`: Sort order (`asc` or `desc`) **Response Format:** ```json { "statusCode": 200, "message": "Success", "data": { "items": [...], "pagination": { "currentPage": 1, "totalPages": 5, "totalItems": 100, "limit": 20, "hasNext": true, "hasPrev": false } } } ``` ## WebSocket Events Real-time features use WebSocket connections: ### Connection ```javascript const socket = io('/dms', { auth: { token: 'your_jwt_token' } }); ``` ### Events - `document:uploaded` - New document uploaded - `access:requested` - Access request submitted - `access:approved` - Access request approved - `access:rejected` - Access request rejected - `system:maintenance` - System maintenance mode ## SDKs and Libraries ### JavaScript SDK ```javascript import { EDMSClient } from '@edms/js-sdk'; const client = new EDMSClient({ baseURL: 'https://your-domain.com/api', token: 'your_jwt_token' }); // Get settings const settings = await client.dms.getSettings(); // Update settings await client.dms.updateSettings({ access: { rbacEnabled: true } }); ``` --- **Last Updated**: December 2024 **API Version**: v1.0 **Contact**: EDMS Development Team