34 KiB
Local Administration API Inventory
Scope and method
This is the local baseline for the GVA parity audit. It inventories every
route registered by internal/server/gin.go, excluding no local route from the
inventory. The current route-contract test asserts 178 registered Gin
routes, including GET /health and the Swagger wildcard. A configured
routerPrefix is prepended to every path below at runtime. Local-file
downloads are handled by the NoRoute -> serveLocalStorage fallback, so their
GET/HEAD URL is functional but intentionally does not appear in this
registered-route count, engine.Routes(), or /api/syncApi input. The local
dynamic Swagger is likewise built only from registered routes; the baseline
GVA's pre-generated Swagger also omits the static wildcard. The GVA reference
does register that wildcard in Routes(), so the count is not proof that the
two route tables are identical; see parity-crosscut.md.
Source of truth:
- registration:
internal/server/router/*.goandinternal/server/gin.go; - handler-to-service calls:
internal/server/handler/*.go; - dependency assembly:
cmd/kratos-admin/wire_gen.go; - frontend comparison:
web/src/api/**/*.js,web/src/modules/**/api/*.js, and the direct SSE use inweb/src/view/systemTools/timedTask/useAlertStream.js.
Unless marked public, routes are behind JWT authentication, forced-password
change protection, Casbin/data-scope access control, and the normal error/audit
middleware. OK means the standard JSON success envelope; Page<T> means
{ list, total, page, pageSize }. Download and SSE rows state their special
wire result. The Call column gives the exact handler and service entrypoint;
the module pipeline directly below it completes the service/biz/data chain.
FE means a matching frontend request exists. FE-direct means the browser
calls it directly rather than via an api/*.js function. -- is a registered
backend route without a current frontend call site.
Architecture map
| Local area | Handler service | Biz usecase | Repository/data implementation |
|---|---|---|---|
| API, Casbin | APIService |
APIUsecase |
APIRepo -> data.apiRepo |
| User/navigation | UserService, AuthService, TokenService |
UserUsecase, AuthenticationUsecase, TokenUsecase |
UserRepo, APITokenRepo -> data.userRepo, data.apiTokenRepo |
| Authority | AuthorityService, PermissionService |
AuthorityUsecase, PermissionUsecase |
AuthorityAccessRepo, PermissionRepo -> data.authorityAccessRepo, data.permissionRepo |
| Menu | MenuService |
MenuUsecase |
MenuRepo -> data.menuRepo |
| Organisation | DepartmentService, PositionService |
DepartmentUsecase, PositionUsecase |
DepartmentRepo, PositionRepo -> data.departmentRepo, data.positionRepo |
| Dictionary | DictionaryService |
DictionaryUsecase |
DictionaryRepo -> data.dictionaryRepo |
| Parameters | ParameterService |
ParameterUsecase |
ParameterRepo -> data.parameterRepo |
| Runtime/system/security | SystemConfigService, SecurityService |
SystemConfigUsecase, SecurityUsecase |
InitializationRepo, SecurityRepo -> data.initializationRepo, data.securityRepo; runtime settings/config store |
| Audit/logs/errors | AuditService, LogViewerService |
AuditUsecase, LogViewerUsecase |
AuditQueryRepo, LogFileRepo -> data.auditRepo, data.logFileRepo |
| Export/version | ExportService, VersionService |
ExportUsecase, VersionUsecase |
ExportRepo, VersionRepo -> data.exportRepo, data.versionRepo; export token cache |
| Tasks | TaskService |
TaskApplicationUsecase -> TaskUsecase |
TaskRepo -> data.taskRepo; worker scheduler/runtime |
| Media | MediaService |
MediaUsecase |
MediaRepo -> data.mediaRepo; FileStorage, upload sessions |
| Announcement/email | AnnouncementService, EmailService |
AnnouncementUsecase, EmailUsecase |
AnnouncementRepo -> data.announcementRepo; EmailRepo -> data.NewEmailRepo(runtime) |
1. Bootstrap and public endpoints
| Method/path | Visibility | Call | Key input -> output | Primary effect | FE |
|---|---|---|---|---|---|
GET /health |
public | inline Gin handler | none -> "ok" |
liveness only | -- |
GET /swagger/*any |
public | registerSwagger |
Swagger UI/document -> HTML/JSON | generated from registered Gin routes | -- |
POST /base/captcha |
public | Public.Captcha -> SecurityService.Captcha |
captcha config -> captcha payload | cache-backed captcha creation when enabled | FE |
POST /base/login |
public | Public.Login -> AuthService.Login -> AuthenticationUsecase -> User/Security/Audit repos |
LoginRequest -> token/user result |
authenticate, issue token, write login audit; apply lockout policy | FE |
POST /init/checkdb |
public | Public.CheckDatabase -> SystemConfigService.IsInitialized -> SystemConfigUsecase -> InitializationRepo |
none -> initialization status | read DB/init state | FE |
POST /init/initdb |
public | Public.InitializeDatabase -> SystemConfigService.InitializeRoutes -> SystemConfigUsecase -> InitializationRepo |
dto.DatabaseInitRequest + current routes -> OK |
initialize schema/seed data and register current routes | FE |
2. API registry and Casbin policy
Pipeline: API handler -> APIService -> APIUsecase -> APIRepo -> data.apiRepo.
The Casbin endpoints share that pipeline because policy-path associations are
stored and queried through the API repository.
| Method/path | Call | Key input -> output | Primary effect | FE |
|---|---|---|---|---|
POST /api/getApiList |
API.List -> ListAPI |
APIListRequest(page,pageSize,filters) -> Page<API> |
read | FE |
POST /api/getAllApis |
API.All -> AllAPI |
optional body ignored -> {apis} |
read non-paginated, strict filtering | FE |
POST /api/createApi |
API.Create -> CreateAPIRequest |
APIRequest(path,method,group,description) -> {api} |
create API registry row | FE |
POST /api/updateApi |
API.Update -> UpdateAPIRequest |
APIRequest -> OK |
update registry row | FE |
POST /api/deleteApi |
API.Delete -> DeleteAPI |
{id} -> OK |
delete one API and policy association as repo defines | FE |
DELETE /api/deleteApisByIds |
API.DeleteByIDs -> DeleteAPIs |
{ids} -> OK |
batch delete APIs | FE |
POST /api/getApiById |
API.Find -> FindAPIResponse |
{id} -> {api} |
read | FE |
GET /api/getApiGroups |
API.Groups -> Groups |
none -> {groups,apiGroupMap} |
read group metadata | FE |
GET /api/getApiRoles |
API.Roles -> APIRoleIDs |
path,method -> authorityIds[] |
read role association | FE |
POST /api/setApiRoles |
API.SetRoles -> SetAPIRoles |
path,method,authorityIds[] -> OK |
replace API-role association | FE |
GET /api/syncApi |
API.Sync -> SyncAPIResponses |
live engine.Routes() -> sync diff |
calculate registry/runtime route diff | FE |
POST /api/ignoreApi |
API.Ignore -> SetAPIIgnored |
path,method,flag -> OK |
mark route ignored for sync | FE |
POST /api/enterSyncApi |
API.ApplySync -> ApplyAPISyncRequest |
selected sync actions -> OK | apply API registry synchronization | FE |
GET /api/freshCasbin |
API.FreshCasbin |
none -> OK | public compatibility no-op; policy is read per authorization decision | FE |
POST /casbin/updateCasbin |
API.SetPolicyPaths -> SetPolicyPathsRequest |
authorityId,paths[] -> OK |
replace policy paths for authority | FE |
POST /casbin/getPolicyPathByAuthorityId |
API.PolicyPaths -> PolicyPathResponses |
{authorityId} -> {paths} |
read policy paths | FE |
3. Users, session, and navigation
User pipeline: User/Navigation handler -> UserService -> UserUsecase -> UserRepo -> data.userRepo.
Authentication paths add AuthenticationUsecase with SecurityUsecase and
the audit recorder; logout uses TokenUsecase -> APITokenRepo.
| Method/path | Call | Key input -> output | Primary effect | FE |
|---|---|---|---|---|
POST /user/getUserList |
User.List -> ListUsersRequest |
UserListRequest -> Page<User> |
read, data-scope aware | FE |
POST /user/admin_register |
User.Create -> CreateUserRequest |
UserRequest -> {user} |
create user; password-policy validation | FE |
PUT /user/setUserInfo |
User.Update -> UpdateUserRequest |
UserRequest(id,profile) -> OK |
update selected user | FE |
PUT /user/setSelfInfo |
User.UpdateSelf -> UpdateSelfUser |
authenticated SelfUserRequest -> OK |
update current user's profile | FE |
DELETE /user/deleteUser |
User.Delete -> DeleteUser |
{id} -> OK |
delete user | FE |
POST /user/resetPassword |
User.ResetPassword -> ResetPassword |
id,password -> OK |
set another user's password | FE |
POST /user/changePassword |
User.ChangePassword -> ChangePassword |
current and new passwords -> OK | verify and replace current password | FE |
PUT /user/setSelfSetting |
User.SetSelfSetting -> SetUserSetting |
current-user UI settings -> OK | persist user settings | FE |
POST /user/setUserAuthorities |
User.SetAuthorities -> SetUserAuthorities |
id,authorityIds[] -> OK |
replace user authority groups | FE |
POST /user/setUserAuthority |
User.SwitchAuthority -> AuthService.SwitchAuthority |
current claims + authorityId -> new token/user |
switch active authority and issue new token | FE |
GET /user/getUserInfo |
User.Get -> UserByUUID |
current claims -> {user} |
read self/authority info | FE |
POST /menu/getMenu |
Navigation.Menu -> UserService.Menus |
current authority -> menu tree | read authorized navigation | FE |
POST /jwt/jsonInBlacklist |
Session.Logout -> TokenService.BlacklistToken |
bearer token -> OK | blacklist/revoke token | FE |
4. Authorities, menus, and button permissions
Authority and permissions pipeline: handler -> AuthorityService/PermissionService -> AuthorityUsecase/PermissionUsecase -> AuthorityAccessRepo/PermissionRepo -> data.
Menu pipeline: Menu handler -> MenuService -> MenuUsecase -> MenuRepo -> data.menuRepo.
| Method/path | Call | Key input -> output | Primary effect | FE |
|---|---|---|---|---|
POST /authority/getAuthorityList |
Authority.List -> Authorities |
none -> authority tree/list | read | FE |
POST /authority/createAuthority |
Authority.Create -> CreateAuthorityRequest |
authority id/name -> {authority} |
create authority | FE |
POST /authority/copyAuthority |
Authority.Copy -> CopyAuthorityRequest |
source + new authority -> {authority} |
duplicate authority permissions/menu relations | FE |
PUT /authority/updateAuthority |
Authority.Update -> UpdateAuthorityRequest |
authority fields -> {authority} |
update authority | FE |
POST /authority/deleteAuthority |
Authority.Delete -> DeleteAuthority |
{authorityId} -> OK |
delete authority subject to repo rules | FE |
POST /authority/setRoleUsers |
Authority.SetUsers -> SetAuthorityUsers |
authority/user ids -> OK | replace authority-user relation | FE |
GET /authority/getUsersByAuthority |
Authority.Users -> AuthorityUserIDs |
authorityId -> userIds[] |
read relation | FE |
POST /authority/setDataScope |
Authority.SetDataScope -> SetDataScope |
scope and department ids -> OK | update data-scope and departments | FE |
GET /authority/getDataScopeDepts |
Authority.DataScopeDepartments -> DataScopeDepartmentIDs |
authorityId -> departmentIds[] |
read custom scope departments | FE |
POST /menu/getMenuList |
Menu.List -> Tree |
none -> menu tree | read | FE |
POST /menu/getBaseMenuTree |
Menu.Tree -> Tree |
none -> {menus} |
read | FE |
POST /menu/addBaseMenu |
Menu.Create -> Create |
MenuRequest -> OK |
create menu, parameters/buttons | FE |
POST /menu/updateBaseMenu |
Menu.Update -> Update |
MenuRequest -> OK |
update menu | FE |
POST /menu/deleteBaseMenu |
Menu.Delete -> Delete |
{id} -> OK |
delete menu and dependent mappings per repo | FE |
POST /menu/getBaseMenuById |
Menu.Find -> Find |
{id} -> {menu} |
read | FE |
POST /menu/addMenuAuthority |
Menu.SetAuthorityMenus -> SetAuthorityMenus |
authority + menu ids -> OK | replace authority-menu mapping | FE |
POST /menu/getMenuAuthority |
Menu.AuthorityMenus -> AuthorityMenus |
{authorityId} -> {menus} |
read mapping | FE |
GET /menu/getMenuRoles |
Menu.RoleIDs + DefaultRouterRoleIDs |
menuId -> {authorityIds,defaultRouterAuthorityIds} |
read role mapping | FE |
POST /menu/setMenuRoles |
Menu.SetRoles -> SetRoles |
menu + authority ids -> OK | replace menu-role mapping | FE |
POST /authorityBtn/getAuthorityBtn |
Permission.Buttons -> SelectedButtons |
authority/menu ids -> selection | read button permission selection | FE |
POST /authorityBtn/setAuthorityBtn |
Permission.SetButtons -> SetSelectedButtons |
authority/menu/selected -> OK | replace button permission selection | FE |
POST /authorityBtn/canRemoveAuthorityBtn |
Permission.CanRemoveButton -> CanRemoveButton |
menu button id -> boolean | dependency/usage check | FE |
5. Departments and positions
Department pipeline: Organization handler -> DepartmentService -> DepartmentUsecase -> DepartmentRepo -> data.departmentRepo. Position rows substitute the matching
Position* components and data.positionRepo.
| Method/path | Call | Key input -> output | Primary effect | FE |
|---|---|---|---|---|
POST /department/getDepartmentList |
Organization.ListDepartments -> Departments |
filter body -> department tree/list | read | FE |
POST /department/createDepartment |
CreateDepartment -> DepartmentService.Create |
DepartmentRequest -> OK |
create department | FE |
PUT /department/updateDepartment |
UpdateDepartment -> Update |
DepartmentRequest -> OK |
update department | FE |
DELETE /department/deleteDepartment |
DeleteDepartment -> Delete |
{id} -> OK |
delete department | FE |
GET /department/findDepartment |
FindDepartment -> Department |
id -> department |
read | FE |
GET /department/getDepartmentUsers |
DepartmentUsers -> UserIDs |
departmentId -> userIds[] |
read membership | FE |
POST /department/setDepartmentUsers |
SetDepartmentUsers -> SetUsers |
department/user ids -> OK | replace department membership | FE |
POST /user/setUserDepartments |
SetUserDepartments -> DepartmentService.SetUserDepartments |
user + department ids -> OK | replace user's departments | FE |
POST /position/getPositionList |
ListPositions -> Positions |
filter body -> position list | read | FE |
POST /position/createPosition |
CreatePosition -> PositionService.Create |
PositionRequest -> OK |
create position | FE |
PUT /position/updatePosition |
UpdatePosition -> Update |
PositionRequest -> OK |
update position | FE |
DELETE /position/deletePosition |
DeletePosition -> Delete |
{id} -> OK |
delete position | FE |
GET /position/findPosition |
FindPosition -> Position |
id -> position |
read | FE |
GET /position/getPositionUsers |
PositionUsers -> UserIDs |
positionId -> userIds[] |
read membership | FE |
POST /position/setPositionUsers |
SetPositionUsers -> SetUsers |
position/user ids -> OK | replace position membership | FE |
POST /user/setUserPositions |
SetUserPositions -> PositionService.SetUserPositions |
user + position ids -> OK | replace user's positions | FE |
6. Dictionaries
Pipeline: Dictionary handler -> DictionaryService -> DictionaryUsecase -> DictionaryRepo -> data.dictionaryRepo.
| Method/path | Call | Key input -> output | Primary effect | FE |
|---|---|---|---|---|
POST /sysDictionary/createSysDictionary |
Create -> CreateDictionaryRequest |
dictionary DTO -> {dictionary} |
create dictionary | FE |
PUT /sysDictionary/updateSysDictionary |
Update -> UpdateDictionaryRequest |
dictionary DTO -> OK | update dictionary | FE |
DELETE /sysDictionary/deleteSysDictionary |
Delete -> DeleteDictionary |
id -> OK |
delete dictionary | FE |
GET /sysDictionary/findSysDictionary |
Find -> Dictionary |
id/type/status -> {sysDictionary} |
read dictionary | FE |
GET /sysDictionary/getSysDictionaryList |
List(false) -> Dictionaries |
page/name/type -> Page<Dictionary> |
read without details | FE |
GET /sysDictionary/getSysDictionaryListWithDetails |
List(true) -> Dictionaries |
page/name/type -> Page<Dictionary+details> |
read with details | -- |
GET /sysDictionary/exportSysDictionary |
Export -> ExportDictionary |
id -> dictionary export payload |
read/export JSON structure | FE |
POST /sysDictionary/importSysDictionary |
Import -> ImportDictionaryJSON |
JSON document -> OK | validate and import dictionary | FE |
POST /sysDictionaryDetail/createSysDictionaryDetail |
CreateDetail -> CreateDictionaryDetailRequest |
detail DTO -> OK | create detail | FE |
PUT /sysDictionaryDetail/updateSysDictionaryDetail |
UpdateDetail -> UpdateDictionaryDetailRequest |
detail DTO -> OK | update detail | FE |
DELETE /sysDictionaryDetail/deleteSysDictionaryDetail |
DeleteDetail -> DeleteDictionaryDetail |
id -> OK |
delete detail | FE |
GET /sysDictionaryDetail/findSysDictionaryDetail |
FindDetail -> DictionaryDetail |
id -> {sysDictionaryDetail} |
read detail | FE |
GET /sysDictionaryDetail/getSysDictionaryDetailList |
Details -> DictionaryDetails |
page/filter -> Page<Detail> |
read | FE |
GET /sysDictionaryDetail/getDictionaryTreeList |
Tree(false) -> DictionaryTree |
id -> tree |
read tree by id | FE |
GET /sysDictionaryDetail/getDictionaryTreeListByType |
Tree(true) -> DictionaryTree |
type -> tree |
read tree by type | FE |
GET /sysDictionaryDetail/getDictionaryDetailsByParent |
DetailsByParent -> DictionaryDetailsByParent |
dictionary/parent/includeChildren -> details | read descendants | FE |
GET /sysDictionaryDetail/getDictionaryPath |
Path -> DictionaryPath |
id -> ancestor path |
read ancestry | FE |
7. Parameters, API tokens, security, and system configuration
| Method/path | Call | Key input -> output | Primary effect | FE |
|---|---|---|---|---|
POST /sysParams/createSysParams |
Parameter.Create -> CreateParameterRequest -> ParameterUsecase -> ParameterRepo |
parameter DTO -> OK | create parameter | FE |
PUT /sysParams/updateSysParams |
Parameter.Update -> UpdateParameterRequest -> ParameterUsecase -> ParameterRepo |
parameter DTO -> OK | update parameter | FE |
DELETE /sysParams/deleteSysParams |
Parameter.Delete -> DeleteParameters -> ParameterUsecase -> ParameterRepo |
ID query -> OK |
delete parameter | FE |
DELETE /sysParams/deleteSysParamsByIds |
Parameter.DeleteMany -> DeleteParameters -> ParameterUsecase -> ParameterRepo |
IDs[] -> OK |
batch delete | FE |
GET /sysParams/findSysParams |
Parameter.Find -> ParameterByID -> ParameterUsecase -> ParameterRepo |
ID -> parameter |
read | FE |
GET /sysParams/getSysParam |
Parameter.Get -> ParameterByKey -> ParameterUsecase -> ParameterRepo |
key -> parameter |
read by key | FE |
GET /sysParams/getSysParamsList |
Parameter.List -> ParametersFilter -> ParameterUsecase -> ParameterRepo |
page/name/key/date -> Page<Parameter> |
read | FE |
POST /sysApiToken/createApiToken |
APIToken.Create -> TokenService.CreateAPIToken -> TokenUsecase -> APITokenRepo |
user/authority/days/remark -> token | issue persisted API token | FE |
POST /sysApiToken/getApiTokenList |
APIToken.List -> APITokens -> TokenUsecase -> APITokenRepo |
page/user/status -> Page<Token> |
read | FE |
POST /sysApiToken/deleteApiToken |
APIToken.Delete -> DisableAPIToken -> TokenUsecase -> APITokenRepo |
id -> OK |
disable token | FE |
GET /securityConfig/getSecurityConfig |
SystemConfig.GetSecurity -> SecurityService.Security -> SecurityUsecase -> SecurityRepo |
none -> security config | read | FE |
POST /securityConfig/setSecurityConfig |
SystemConfig.SetSecurity -> SaveSecurityRequest -> SecurityUsecase -> SecurityRepo |
security DTO -> config | update security/rate/password policies | FE |
POST /system/getSystemConfig |
SystemConfig.Get -> SystemConfigService.Get -> SystemConfigUsecase -> InitializationRepo |
none -> config document | read runtime config | FE |
POST /system/setSystemConfig |
SystemConfig.Set -> Set -> SystemConfigUsecase -> InitializationRepo |
config document -> OK | persist runtime config | FE |
POST /system/reloadSystem |
SystemConfig.Reload -> Reload -> SystemConfigUsecase + TaskRuntime |
none -> OK | reload runtime config/task schedule | FE |
POST /system/getServerInfo |
SystemConfig.ServerInfo -> SystemInfo |
none -> host/process metrics | read system state | FE |
8. Operation, login, data-access, file-log, and error audit
Audit pipeline: Audit handler -> AuditService -> AuditUsecase -> AuditQueryRepo -> data.auditRepo.
Log viewer uses LogViewerService -> LogViewerUsecase -> LogFileRepo -> data.logFileRepo.
Error-record rows use the audit repository's error-record implementation. The
public error creation route is intentionally callable by the frontend error handler.
| Method/path | Call | Key input -> output | Primary effect | FE |
|---|---|---|---|---|
GET /sysOperationRecord/getSysOperationRecordList |
Audit.Operations -> OperationsFilter |
page/path/method/status -> Page<Operation> |
read | FE |
GET /sysOperationRecord/findSysOperationRecord |
Audit.Operation -> Operation |
id -> operation |
read | -- |
DELETE /sysOperationRecord/deleteSysOperationRecord |
Audit.DeleteOperation -> DeleteOperations |
id -> OK |
delete record | FE |
DELETE /sysOperationRecord/deleteSysOperationRecordByIds |
Audit.DeleteOperations -> DeleteOperations |
ids[] -> OK |
batch delete | FE |
GET /sysLoginLog/getLoginLogList |
Audit.Logins -> LoginsFilter |
page/username/status -> Page<LoginLog> |
read | FE |
GET /sysLoginLog/findLoginLog |
Audit.Login -> Login |
id -> login log |
read | FE |
DELETE /sysLoginLog/deleteLoginLog |
Audit.DeleteLogin -> DeleteLogins |
id -> OK |
delete login log | FE |
DELETE /sysLoginLog/deleteLoginLogByIds |
Audit.DeleteLogins -> DeleteLogins |
ids[] -> OK |
batch delete | FE |
POST /dataAccessLog/getDataAccessLogList |
Audit.DataAccess -> DataAccessRequest |
filter/page -> Page<DataAccessLog> |
read | FE |
DELETE /dataAccessLog/deleteDataAccessLogByIds |
Audit.DeleteDataAccess -> DeleteDataAccess |
ids[] -> OK |
batch delete | FE |
GET /logViewer/dates |
Audit.LogDates -> LogViewerService.LogDates |
month -> dates |
read filesystem log index | FE |
GET /logViewer/files |
Audit.LogFiles -> LogViewerService.LogFiles |
date -> files |
read filesystem log index | FE |
GET /logViewer/content |
Audit.LogContent -> LogViewerService.LogContent |
date/path/cursor -> chunk | read log content, cursor pagination | FE |
POST /sysError/createSysError |
Audit.CreateError -> AuditRecorder.RecordError |
frontend error payload -> OK | public append error record | FE |
GET /sysError/getSysErrorList |
Audit.Errors -> ErrorsFilter |
page/form/info/date -> Page<Error> |
read | FE |
GET /sysError/findSysError |
Audit.Error -> Error |
id -> error record |
read | FE |
PUT /sysError/updateSysError |
Audit.UpdateError -> UpdateErrorRequest |
error mutation -> OK | update error record | FE |
DELETE /sysError/deleteSysError |
Audit.DeleteError -> DeleteErrors |
id -> OK |
delete error record | FE |
DELETE /sysError/deleteSysErrorByIds |
Audit.DeleteErrors -> DeleteErrors |
ids[] -> OK |
batch delete | FE |
9. Export templates and versions
Export pipeline: Export handler -> ExportService -> ExportUsecase -> ExportRepo -> data.exportRepo,
with short-lived download tokens in the cache. Version pipeline: Version handler -> VersionService -> VersionUsecase -> VersionRepo -> data.versionRepo; export and
import also read/write menus, APIs, and dictionaries through VersionUsecase.
| Method/path | Call | Key input -> output | Primary effect | FE |
|---|---|---|---|---|
POST /sysExportTemplate/createSysExportTemplate |
Export.Create -> CreateRequest |
template DTO -> OK | create template | FE |
PUT /sysExportTemplate/updateSysExportTemplate |
Export.Update -> UpdateRequest |
template DTO -> OK | update template | FE |
DELETE /sysExportTemplate/deleteSysExportTemplate |
Export.Delete -> Delete |
id -> OK |
delete template | FE |
DELETE /sysExportTemplate/deleteSysExportTemplateByIds |
Export.DeleteMany -> Delete |
ids[] -> OK |
batch delete | FE |
GET /sysExportTemplate/findSysExportTemplate |
Export.Find -> Template |
id/templateID -> template | read | FE |
GET /sysExportTemplate/getSysExportTemplateList |
Export.List -> TemplatesFilter |
page/name/table/template/date -> Page<Template> |
read | FE |
GET /sysExportTemplate/previewSQL |
Export.Preview -> Preview |
templateID + query params -> SQL | render query only | FE |
GET /sysExportTemplate/exportExcel |
Export.Issue(false) -> IssueToken |
templateID + params -> download token | cache token; no file yet | FE |
GET /sysExportTemplate/exportTemplate |
Export.Issue(true) -> IssueToken |
templateID -> download token | cache blank-template token | FE |
POST /sysExportTemplate/importExcel |
Export.Import -> Import |
multipart file + templateID -> OK | parse/import spreadsheet | -- |
GET /sysExportTemplate/exportExcelByToken |
Export.Download(false) -> ConsumeToken + Export |
token -> XLSX stream | public, one-time token consumption and file generation | -- |
GET /sysExportTemplate/exportTemplateByToken |
Export.Download(true) -> ConsumeToken + ExportBlankTemplate |
token -> XLSX stream | public, one-time token consumption and blank template | -- |
DELETE /sysVersion/deleteSysVersion |
Version.Delete -> DeleteVersions |
ID -> OK |
delete version record | FE |
DELETE /sysVersion/deleteSysVersionByIds |
Version.DeleteMany -> DeleteVersions |
IDs[] -> OK |
batch delete | FE |
GET /sysVersion/findSysVersion |
Version.Find -> Version |
ID -> version |
read | FE |
GET /sysVersion/getSysVersionList |
Version.List -> Versions |
page/name/code/date -> Page<Version> |
read | FE |
POST /sysVersion/exportVersion |
Version.Export -> BuildVersionBundle/CreateVersion |
version metadata + menu/API/dict ids -> OK | compose and persist version JSON | FE |
GET /sysVersion/downloadVersionJson |
Version.Download -> VersionData |
ID -> JSON attachment |
create/download serialized version | FE |
POST /sysVersion/importVersion |
Version.Import -> ImportRequest/ImportVersionBundle |
version JSON DTO -> OK | import menu/API/dictionary bundle and record import | FE |
10. Scheduled tasks and media
Task pipeline: Task handler -> TaskService -> TaskApplicationUsecase -> TaskUsecase -> TaskRepo -> data.taskRepo, plus the worker scheduler/runtime. Media pipeline:
Media handler -> MediaService -> MediaUsecase -> MediaRepo -> data.mediaRepo,
using configured object/local storage and upload-session persistence.
| Method/path | Call | Key input -> output | Primary effect | FE |
|---|---|---|---|---|
POST /timedTask/createTimedTask |
Task.Create -> CreateRequest |
task cron/executor DTO -> OK | persist task and schedule it | FE |
PUT /timedTask/updateTimedTask |
Task.Update -> UpdateRequest |
task DTO -> OK | update and reschedule | FE |
DELETE /timedTask/deleteTimedTask |
Task.Delete -> Delete |
{id} -> OK |
unschedule and delete task | FE |
POST /timedTask/toggleTimedTask |
Task.Toggle -> Toggle |
id,enabled -> OK |
enable/disable schedule | FE |
POST /timedTask/triggerTimedTask |
Task.Trigger -> Trigger |
{id} -> OK |
enqueue/manual execute; log result asynchronously | FE |
GET /timedTask/getTimedTaskList |
Task.List -> ListRequest |
page/name/type/enabled -> Page<Task> |
read | FE |
GET /timedTask/getTimedTaskLogList |
Task.Logs -> Logs |
page/task/status -> Page<TaskLog> |
read | FE |
GET /timedTask/getRegisteredMethods |
Task.Methods -> RegisteredMethods |
none -> {methods} |
read task method registry | FE |
GET /timedTask/alertStream |
Task.AlertStream -> Subscribe |
authenticated SSE -> event stream | subscribe/unsubscribe user failure alerts | FE-direct |
POST /fileUploadAndDownload/upload |
Media.Upload -> Upload |
multipart file/category/save -> media item | write storage; optionally persist metadata | FE |
POST /fileUploadAndDownload/getFileList |
Media.List -> MediaList |
media filter/page -> Page<Media> |
read | FE |
POST /fileUploadAndDownload/deleteFile |
Media.Delete -> Delete |
{id} -> OK |
delete metadata and storage object | FE |
POST /fileUploadAndDownload/deleteFiles |
Media.DeleteMany -> Delete |
ids[] -> OK |
batch delete files | -- |
GET /fileUploadAndDownload/findFile |
Media.Find -> Media |
id -> media item |
read | -- |
POST /fileUploadAndDownload/editFileName |
Media.Rename -> Rename |
id,name -> OK |
rename metadata/storage object per backend | FE |
POST /fileUploadAndDownload/importURL |
Media.ImportURLs -> ImportURLRequests |
URL items -> OK | import remote media references | FE |
POST /fileUploadAndDownload/listOssFiles |
Media.Storage -> Storage |
prefix/cursor/limit -> object page | list configured object storage | -- |
GET /attachmentCategory/getCategoryList |
Media.Categories -> Categories |
none -> categories | read | FE |
POST /attachmentCategory/addCategory |
Media.SaveCategory -> SaveCategoryRequest |
category DTO -> OK | create/update category | FE |
POST /attachmentCategory/deleteCategory |
Media.DeleteCategory -> DeleteCategory |
{id} -> OK |
delete category | FE |
POST /mediaUpload/init |
Media.InitUpload -> InitUpload |
name/hash/size/chunk metadata -> session/status | create/resume multipart upload session | FE |
POST /mediaUpload/chunk |
Media.SaveChunk -> SaveChunk |
multipart chunk + upload/index/hash -> OK | persist/verify upload chunk | FE |
POST /mediaUpload/complete |
Media.CompleteUpload -> CompleteUpload |
uploadId -> media item |
assemble/persist completed media | FE |
DELETE /mediaUpload/:uploadId |
Media.CancelUpload -> CancelUpload |
path upload id -> OK | remove pending upload session/chunks | FE |
11. Announcements and email
Announcement pipeline: Announcement handler -> AnnouncementService -> AnnouncementUsecase -> AnnouncementRepo -> data.announcementRepo. Email pipeline: Email handler -> EmailService -> EmailUsecase -> EmailRepo, where NewEmailRepo(runtime) uses the
configured runtime mail client rather than the database.
| Method/path | Visibility | Call | Key input -> output | Primary effect | FE |
|---|---|---|---|---|---|
POST /info/createInfo |
private | Announcement.Create -> Create |
announcement DTO -> OK | create announcement | FE |
DELETE /info/deleteInfo |
private | Announcement.Delete -> Delete |
ID -> OK |
delete announcement | FE |
DELETE /info/deleteInfoByIds |
private | Announcement.DeleteByIDs -> DeleteByIDs |
IDs[] -> OK |
batch delete | FE |
PUT /info/updateInfo |
private | Announcement.Update -> Update |
announcement DTO -> OK | update announcement | FE |
GET /info/findInfo |
private | Announcement.Find -> Find |
ID -> announcement |
read | FE |
GET /info/getInfoList |
private | Announcement.List -> List |
page/date range -> Page<Announcement> |
read | FE |
GET /info/getInfoDataSource |
public | Announcement.DataSource -> UserOptions |
none -> {userID: options} |
read selectable users | FE |
GET /info/getInfoPublic |
public | Announcement.Public |
none -> compatibility text | no business read/write | -- |
POST /email/emailTest |
private | Email.Test -> Test |
none -> OK | send configured test email | FE |
POST /email/sendEmail |
private | Email.Send -> Send |
to,subject,body -> OK |
send mail | FE |
Frontend coverage difference
The web client has no unmatched static API URL: all inspected service({url})
calls resolve to a registered local route, including the dynamic
DELETE /mediaUpload/:uploadId. One direct browser request,
GET /timedTask/alertStream, is used by EventSource and is therefore counted
as covered even though it has no web/src/api/timedTask.js wrapper.
Registered routes without a current frontend API call are:
- platform/operational:
GET /health,GET /swagger/*any; - dictionary:
GET /sysDictionary/getSysDictionaryListWithDetails; - audit:
GET /sysOperationRecord/findSysOperationRecord; - export:
POST /sysExportTemplate/importExcel, both public...ByTokendownload routes; - media:
POST /fileUploadAndDownload/deleteFiles,GET .../findFile,POST .../listOssFiles; - announcement compatibility endpoint:
GET /info/getInfoPublic.
The first group is operational or token-follow-up behavior. The others are backend capabilities not represented by a client function today; they should be explicitly marked as deliberately backend-only or added to the frontend when a GVA behavioral comparison shows they are user-facing.
Clearly excluded from the migration parity target
The supplied GVA checkout has router modules with no corresponding local router
registration: system/sys_auto_code.go, system/sys_auto_code_history.go,
system/sys_skills.go, and example/exa_customer.go. Its plugin tree also
contains AI/MCP/CLI/skills routes and auto/plugin-management routes. These
code-generation/history, AI/LLM/MCP/skills, plugin-management, and example
modules are explicitly outside this audit. The single GVA
GET /sysError/getSysErrorSolution action is likewise excluded because it
delegates to AutoCodeService.LLMAuto; the surrounding non-AI error CRUD is
included. No parity failure should be opened for excluded routes. The local
router inventory does include the GVA system/media modules that were migrated,
plus the local announcement and email modules.
Audit use
For the next phase, compare each row to the same GVA route by method and path, then verify: request binding location, validation/defaulting, response envelope, authorization/data-scope behavior, database/storage transaction effects, and side effects such as cache invalidation, token consumption, scheduler reload, or mail/file output. Keep the exclusions above out of the parity score.