Files
simapi-cj/src/controllers/simapi_common_controller.cj
T

73 lines
2.2 KiB
Plaintext
Raw Normal View History

2026-08-16 12:46:15 +08:00
/*
* Copyright (c) 2025 SimcuTeam. All rights reserved.
* 遵循 MIT 许可证。
2026-08-16 12:46:15 +08:00
* Controllers/SimApiCommonController:通用内置路由。
*/
package simcu::simapi.controllers
2026-08-16 12:46:15 +08:00
import std.collection.*
import soulsoft_web_mvc.annotations.*
import simcu::simapi.communications.*
import simcu::simapi.configurations.*
import simcu::simapi.helpers.*
2026-08-31 23:47:33 +08:00
import simcu::simapi.openapi.annotations.*
2026-08-16 12:46:15 +08:00
/**
* 通用控制器:错误反馈、WebConfig、用户信息。
* 控制器直接返回 SimApiBaseResponse / SimApiResponse<T>。
2026-08-16 12:46:15 +08:00
*/
public class SimApiCommonController <: SimApiBaseController {
private let _options: SimApiOptions
public init(options: SimApiOptions) {
this._options = options
}
/**
* GET /exception/{code}:错误反馈页面(始终注册)。
* 抛 SimApiException,由异常中间件统一输出。
2026-08-16 12:46:15 +08:00
*/
@HttpGet["exception/{code}"]
2026-08-31 23:47:33 +08:00
@SimApiDoc[tags:"公共",summary:"异常报错"]
public func exceptionHandler(@FromRoute[] code: Int64): Unit { // cjlint-ignore !G.FUN.02 注解绑定参数误报
SimApiError.error(code: code)
2026-08-16 12:46:15 +08:00
}
/**
* POST/GET /config:给前端的自定义信息(含版本)。
2026-08-31 23:47:33 +08:00
* 动态注册:路由路径由 SimApiRouteOptions.webConfigRoute 决定(见 simapi_extensions.cj)。
2026-08-16 12:46:15 +08:00
*/
public func webConfig(): HashMap<String, Any> {
webConfigMap()
}
/**
* POST /user/info:获取已登录用户信息(需登录)。
2026-08-31 23:47:33 +08:00
* 动态注册:路由路径由 SimApiRouteOptions.userInfoRoute 决定(见 simapi_extensions.cj)。
2026-08-16 12:46:15 +08:00
*/
public func userInfo(): SimApiLoginItem {
requireLogin()
loginInfo
}
private func versionsMap(): HashMap<String, Any> {
var map = HashMap<String, Any>()
map["SimApi"] = SimApiUtil.simApiVersion
map["App"] = SimApiUtil.appVersion
map
}
private func webConfigMap(): HashMap<String, Any> {
var map = HashMap<String, Any>()
for ((key, value) in _options.webConfig) {
map[key] = value
}
if (_options.webConfigIncludeVersion) {
map["Versions"] = versionsMap()
}
map
}
}