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