| Metadata | Value |
|---|---|
| Status | Active |
| Version | 1.1.0 |
| Last Updated | 2026-09-10 |
| Author | Sangeetha Grantha Team |
| Document Type | Evidence record |
[!NOTE] Historical evidence: results, counts, commands, and observations below belong to the original work described here. The editorial update date is not a new test or corpus verification. For present behavior, use current quality checks.
Generated: 2025-01-27
Scope: Complete mapping of UI operations to backend API endpoints
Status: Comprehensive analysis with identified gaps
This report provides a comprehensive mapping between frontend UI operations and backend API endpoints in the Sangeetha Grantha admin web application. The analysis covers all 6 main pages and their associated operations, comparing them against available backend endpoints.
/)| Operation | Frontend Function | Status |
|---|---|---|
| Load dashboard statistics | getDashboardStats() |
✅ Supported |
| Load recent audit logs | getAuditLogs() |
✅ Supported |
| Navigate to Krithis list | Navigation only | N/A |
| Navigate to Reference Data | Navigation only | N/A |
| Navigate to new Krithi editor | Navigation only | N/A |
GET /v1/admin/dashboard/stats - Returns dashboard statisticsGET /v1/audit/logs - Returns recent audit logs/krithis)| Operation | Frontend Function | Status |
|---|---|---|
| Search krithis | searchKrithis(query) |
✅ Supported |
| Navigate to krithi editor | Navigation only | N/A |
| Navigate to new krithi | Navigation only | N/A |
| Filter krithis (UI only) | Client-side filtering | N/A |
| Pagination (UI only) | Client-side pagination | N/A |
GET /v1/krithis/search?query={query} - Search krithis with optional query parametersNote: The UI shows pagination controls but doesn’t implement pagination API calls yet. The backend supports pagination via page and pageSize query parameters.
/krithis/new, /krithis/:id)| Operation | Frontend Function | Status |
|---|---|---|
| Load krithi details | getKrithi(id) |
✅ Supported |
| Create new krithi | createKrithi(payload) |
✅ Supported |
| Update krithi | updateKrithi(id, payload) |
✅ Supported |
| Load reference data (composers, ragas, etc.) | getComposers(), getRagas(), etc. |
✅ Supported |
| Transliterate content | transliterateContent(krithiId, content, ...) |
✅ Supported |
| Validate krithi | Not implemented in UI | ⚠️ Backend stub exists |
| Operation | Frontend Function | Status |
|---|---|---|
| Load krithi sections | getKrithiSections(krithiId) |
✅ Supported |
| Save krithi sections | saveKrithiSections(krithiId, sections) |
✅ Supported |
| Operation | Frontend Function | Status |
|---|---|---|
| Load lyric variants | getKrithiLyricVariants(krithiId) |
✅ Supported |
| Create lyric variant | createLyricVariant(krithiId, payload) |
❌ MISSING |
| Update lyric variant | updateLyricVariant(variantId, payload) |
❌ MISSING |
| Save variant sections | saveVariantSections(variantId, sections) |
❌ MISSING |
| Operation | Frontend Function | Status |
|---|---|---|
| Load krithi tags | getKrithiTags(krithiId) |
✅ Supported |
| Load all tags | getAllTags() |
✅ Supported |
| Tag management (via Tags page) | See Tags Page section | ✅ Supported |
| Operation | Frontend Function | Status |
|---|---|---|
| Load notation | getAdminKrithiNotation(krithiId, form) |
✅ Supported |
| Create notation variant | createNotationVariant(krithiId, payload) |
✅ Supported |
| Update notation variant | updateNotationVariant(variantId, payload) |
✅ Supported |
| Delete notation variant | deleteNotationVariant(variantId) |
✅ Supported |
| Create notation row | createNotationRow(variantId, payload) |
✅ Supported |
| Update notation row | updateNotationRow(rowId, payload) |
✅ Supported |
| Delete notation row | deleteNotationRow(rowId) |
✅ Supported |
| Operation | Frontend Function | Status |
|---|---|---|
| Load audit logs for krithi | getKrithiAuditLogs(krithiId) |
✅ Supported |
GET /v1/krithis/{id} - Get krithi detailsPOST /v1/krithis - Create new krithiPUT /v1/krithis/{id} - Update krithiPOST /v1/admin/krithis/{id}/transliterate - Transliterate contentPOST /v1/admin/krithis/{id}/validate - Validate krithi (stub implementation)GET /v1/admin/krithis/{id}/sections - Get krithi sectionsPOST /v1/admin/krithis/{id}/sections - Save krithi sectionsGET /v1/admin/krithis/{id}/variants - Get lyric variantsPOST /v1/admin/krithis/{id}/variants - MISSING - Create lyric variantPUT /v1/admin/variants/{variantId} - MISSING - Update lyric variantPOST /v1/admin/variants/{variantId}/sections - MISSING - Save variant sectionsGET /v1/admin/krithis/{id}/tags - Get krithi tagsGET /v1/admin/tags - Get all tagsGET /v1/krithis/{id}/notation?musicalForm={form} - Get notation (admin context)POST /v1/krithis/{id}/notation/variants - Create notation variantPUT /v1/notation/variants/{variantId} - Update notation variantDELETE /v1/notation/variants/{variantId} - Delete notation variantPOST /v1/notation/variants/{variantId}/rows - Create notation rowPUT /v1/notation/rows/{rowId} - Update notation rowDELETE /v1/notation/rows/{rowId} - Delete notation rowGET /v1/audit/logs?entityTable=krithis&entityId={id} - Get audit logs for krithiCritical Gaps:
POST /v1/admin/krithis/{id}/variants - Create lyric variantPUT /v1/admin/variants/{variantId} - Update lyric variantPOST /v1/admin/variants/{variantId}/sections - Save variant sectionsImpact: Users cannot create, update, or save sections for lyric variants through the UI. The frontend code attempts to call these endpoints, but they do not exist in the backend.
/reference)| Operation | Frontend Function | Status |
|---|---|---|
| Load reference statistics | getReferenceStats() |
✅ Supported |
| Load composers | getComposers() |
✅ Supported |
| Create composer | createComposer(payload) |
✅ Supported |
| Update composer | updateComposer(id, payload) |
✅ Supported |
| Delete composer | deleteComposer(id) |
✅ Supported |
| Load ragas | getRagas() |
✅ Supported |
| Create raga | createRaga(payload) |
✅ Supported |
| Update raga | updateRaga(id, payload) |
✅ Supported |
| Delete raga | deleteRaga(id) |
✅ Supported |
| Load talas | getTalas() |
✅ Supported |
| Create tala | createTala(payload) |
✅ Supported |
| Update tala | updateTala(id, payload) |
✅ Supported |
| Delete tala | deleteTala(id) |
✅ Supported |
| Load temples | getTemples() |
✅ Supported |
| Create temple | createTemple(payload) |
✅ Supported |
| Update temple | updateTemple(id, payload) |
✅ Supported |
| Delete temple | deleteTemple(id) |
✅ Supported |
| Load deities | getDeities() |
✅ Supported |
GET /v1/reference/stats - Get reference data statisticsGET /v1/composers - List all composers (public endpoint)GET /v1/admin/composers - List all composers (admin endpoint)GET /v1/admin/composers/{id} - Get composer by IDPOST /v1/admin/composers - Create composerPUT /v1/admin/composers/{id} - Update composerDELETE /v1/admin/composers/{id} - Delete composerGET /v1/ragas - List all ragas (public endpoint)GET /v1/admin/ragas - List all ragas (admin endpoint)GET /v1/admin/ragas/{id} - Get raga by IDPOST /v1/admin/ragas - Create ragaPUT /v1/admin/ragas/{id} - Update ragaDELETE /v1/admin/ragas/{id} - Delete ragaGET /v1/talas - List all talas (public endpoint)GET /v1/admin/talas - List all talas (admin endpoint)GET /v1/admin/talas/{id} - Get tala by IDPOST /v1/admin/talas - Create talaPUT /v1/admin/talas/{id} - Update talaDELETE /v1/admin/talas/{id} - Delete talaGET /v1/temples - List all temples (public endpoint)GET /v1/admin/temples - List all temples (admin endpoint)GET /v1/admin/temples/{id} - Get temple by IDPOST /v1/admin/temples - Create templePUT /v1/admin/temples/{id} - Update templeDELETE /v1/admin/temples/{id} - Delete templeGET /v1/deities - List all deitiesNote: The frontend uses public endpoints (/v1/composers, /v1/ragas, etc.) for reading, which is appropriate. Admin endpoints are used for mutations.
/imports)| Operation | Frontend Function | Status |
|---|---|---|
| Load imports list | getImports(status?) |
✅ Supported |
| Scrape content from URL | scrapeContent(url) |
✅ Supported |
| Review import | reviewImport(id, request) |
✅ Supported |
GET /v1/admin/imports?status={status} - List imports (optional status filter)POST /v1/admin/imports/scrape - Scrape content from URLPOST /v1/imports/{id}/review - Review and approve/reject import/tags)| Operation | Frontend Function | Status |
|---|---|---|
| Load all tags | getAllTags() |
✅ Supported |
| Create tag | createTag(payload) |
✅ Supported |
| Update tag | updateTag(id, payload) |
✅ Supported |
| Delete tag | deleteTag(id) |
✅ Supported |
| Search tags (client-side) | Client-side filtering | N/A |
GET /v1/admin/tags - List all tagsGET /v1/admin/tags/{id} - Get tag by ID (not used in UI, but available)POST /v1/admin/tags - Create tagPUT /v1/admin/tags/{id} - Update tagDELETE /v1/admin/tags/{id} - Delete tagThese endpoints are called by the frontend but do not exist in the backend:
POST /v1/admin/krithis/{id}/variants
KrithiEditor.tsx - Lyrics tabAdminKrithiRoutes.kt or create a new AdminLyricVariantRoutes.ktPUT /v1/admin/variants/{variantId}
KrithiEditor.tsx - Lyrics tabAdminKrithiRoutes.kt or create a new AdminLyricVariantRoutes.ktPOST /v1/admin/variants/{variantId}/sections
KrithiEditor.tsx - Lyrics tabAdminKrithiRoutes.kt or create a new AdminLyricVariantRoutes.ktThe frontend expects these endpoints to follow a similar pattern to notation variants:
/v1/krithis/{id}/notation/variants (POST)/v1/admin/krithis/{id}/variants (POST) - MISSINGThe backend already has:
GET /v1/admin/krithis/{id}/variants - Returns lyric variantsKrithiService for variant managementAction Required: Implement the three missing endpoints in the backend to complete lyric variant management functionality.
page and pageSize query parametersPOST /v1/admin/krithis/{id}/validate exists but returns a stub response/v1/composers) and admin (/v1/admin/composers) endpoints exist/v1/audit/logs?entityTable=krithis&entityId={id})GET /healthGET /v1/healthGET /v1/krithis/search - Search krithisGET /v1/krithis/{id} - Get krithi detailsGET /v1/krithis/{id}/notation - Get notation (public/admin context)POST /v1/krithis - Create krithiPUT /v1/krithis/{id} - Update krithiPOST /v1/admin/krithis/{id}/transliterate - Transliterate contentPOST /v1/admin/krithis/{id}/validate - Validate krithi (stub)GET /v1/admin/krithis/{id}/sections - Get sectionsPOST /v1/admin/krithis/{id}/sections - Save sectionsGET /v1/admin/krithis/{id}/variants - Get lyric variantsGET /v1/admin/krithis/{id}/tags - Get krithi tagsPOST /v1/admin/krithis/{id}/variants - MISSINGPUT /v1/admin/variants/{variantId} - MISSINGPOST /v1/admin/variants/{variantId}/sections - MISSINGPOST /v1/krithis/{id}/notation/variants - Create notation variantPUT /v1/notation/variants/{variantId} - Update notation variantDELETE /v1/notation/variants/{variantId} - Delete notation variantPOST /v1/notation/variants/{variantId}/rows - Create notation rowPUT /v1/notation/rows/{rowId} - Update notation rowDELETE /v1/notation/rows/{rowId} - Delete notation rowGET /v1/composers - List composersGET /v1/ragas - List ragasGET /v1/talas - List talasGET /v1/deities - List deitiesGET /v1/temples - List templesGET /v1/tags - List tagsGET /v1/sampradayas - List sampradayasGET /v1/reference/stats - Get reference statisticsGET /v1/admin/composers - List composersGET /v1/admin/composers/{id} - Get composerPOST /v1/admin/composers - Create composerPUT /v1/admin/composers/{id} - Update composerDELETE /v1/admin/composers/{id} - Delete composerGET /v1/admin/ragas - List ragasGET /v1/admin/ragas/{id} - Get ragaPOST /v1/admin/ragas - Create ragaPUT /v1/admin/ragas/{id} - Update ragaDELETE /v1/admin/ragas/{id} - Delete ragaGET /v1/admin/talas - List talasGET /v1/admin/talas/{id} - Get talaPOST /v1/admin/talas - Create talaPUT /v1/admin/talas/{id} - Update talaDELETE /v1/admin/talas/{id} - Delete talaGET /v1/admin/temples - List templesGET /v1/admin/temples/{id} - Get templePOST /v1/admin/temples - Create templePUT /v1/admin/temples/{id} - Update templeDELETE /v1/admin/temples/{id} - Delete templeGET /v1/admin/tags - List tagsGET /v1/admin/tags/{id} - Get tagPOST /v1/admin/tags - Create tagPUT /v1/admin/tags/{id} - Update tagDELETE /v1/admin/tags/{id} - Delete tagGET /v1/admin/dashboard/stats - Get dashboard statisticsGET /v1/audit/logs - Get audit logs (with optional query params)POST /v1/imports/krithis - Submit importsPOST /v1/imports/{id}/review - Review importGET /v1/admin/imports - List importsPOST /v1/admin/imports/scrape - Scrape contentThe frontend-backend API coverage is 93% complete, with only 3 critical endpoints missing for lyric variant management. All other major functionality is fully supported. The missing endpoints should be implemented to complete the Lyrics tab functionality in the KrithiEditor.
Overall Assessment: ✅ Good - Minor gaps that can be addressed quickly.
Report generated by automated analysis of frontend pages and backend route definitions.