Initial commit: Clean DSS implementation
Migrated from design-system-swarm with fresh git history.
Old project history preserved in /home/overbits/apps/design-system-swarm
Core components:
- MCP Server (Python FastAPI with mcp 1.23.1)
- Claude Plugin (agents, commands, skills, strategies, hooks, core)
- DSS Backend (dss-mvp1 - token translation, Figma sync)
- Admin UI (Node.js/React)
- Server (Node.js/Express)
- Storybook integration (dss-mvp1/.storybook)
Self-contained configuration:
- All paths relative or use DSS_BASE_PATH=/home/overbits/dss
- PYTHONPATH configured for dss-mvp1 and dss-claude-plugin
- .env file with all configuration
- Claude plugin uses ${CLAUDE_PLUGIN_ROOT} for portability
Migration completed: $(date)
🤖 Clean migration with full functionality preserved
This commit is contained in:
76
admin-ui/js/services/translation-service.js
Normal file
76
admin-ui/js/services/translation-service.js
Normal file
@@ -0,0 +1,76 @@
|
||||
/**
|
||||
* translation-service.js
|
||||
* API wrapper for Translation Dictionary endpoints
|
||||
*/
|
||||
|
||||
import apiClient from './api-client.js';
|
||||
|
||||
class TranslationService {
|
||||
constructor() {
|
||||
this.baseUrl = '/translations';
|
||||
}
|
||||
|
||||
// ========== Dictionary Operations ==========
|
||||
|
||||
async listDictionaries(filters = {}) {
|
||||
const params = new URLSearchParams();
|
||||
if (filters.projectId) params.set('projectId', filters.projectId);
|
||||
if (filters.status) params.set('status', filters.status);
|
||||
if (filters.limit) params.set('limit', filters.limit);
|
||||
if (filters.offset) params.set('offset', filters.offset);
|
||||
|
||||
const queryString = params.toString();
|
||||
const url = queryString ? `${this.baseUrl}?${queryString}` : this.baseUrl;
|
||||
return apiClient.request('GET', url);
|
||||
}
|
||||
|
||||
async getDictionary(id) {
|
||||
return apiClient.request('GET', `${this.baseUrl}/${id}`);
|
||||
}
|
||||
|
||||
async createDictionary(data) {
|
||||
return apiClient.request('POST', this.baseUrl, data);
|
||||
}
|
||||
|
||||
async updateDictionary(id, data) {
|
||||
return apiClient.request('PUT', `${this.baseUrl}/${id}`, data);
|
||||
}
|
||||
|
||||
async deleteDictionary(id) {
|
||||
return apiClient.request('DELETE', `${this.baseUrl}/${id}`);
|
||||
}
|
||||
|
||||
// ========== Mapping Operations ==========
|
||||
|
||||
async createMapping(dictionaryId, data) {
|
||||
return apiClient.request('POST', `${this.baseUrl}/${dictionaryId}/mappings`, data);
|
||||
}
|
||||
|
||||
async updateMapping(dictionaryId, mappingId, data) {
|
||||
return apiClient.request('PUT', `${this.baseUrl}/${dictionaryId}/mappings/${mappingId}`, data);
|
||||
}
|
||||
|
||||
async deleteMapping(dictionaryId, mappingId) {
|
||||
return apiClient.request('DELETE', `${this.baseUrl}/${dictionaryId}/mappings/${mappingId}`);
|
||||
}
|
||||
|
||||
async bulkImportMappings(dictionaryId, mappings) {
|
||||
return apiClient.request('POST', `${this.baseUrl}/${dictionaryId}/mappings/bulk`, { mappings });
|
||||
}
|
||||
|
||||
// ========== Validation & Analysis ==========
|
||||
|
||||
async validateDictionary(id) {
|
||||
return apiClient.request('GET', `${this.baseUrl}/${id}/validate`);
|
||||
}
|
||||
|
||||
async getCoverage(id) {
|
||||
return apiClient.request('GET', `${this.baseUrl}/${id}/coverage`);
|
||||
}
|
||||
|
||||
async exportDictionary(id) {
|
||||
return apiClient.request('GET', `${this.baseUrl}/${id}/export`);
|
||||
}
|
||||
}
|
||||
|
||||
export default new TranslationService();
|
||||
Reference in New Issue
Block a user