You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

85 lines
6.4 KiB

package comm
// 第三方服务池 + 会议记录服务编排 的共享数据结构。
//
// 这些表都存 console 共享库(postgres):console 后台读写(modules/console 里用 type alias 引用),
// 业务服务(如 home 的 echomeet 模块)运行时直读消费。加密字段与 console 用同一把
// ${FIELD_ENCRYPT_KEY}(comm.Encrypt/Decrypt,AES-256-GCM),两侧必须配同一个 key。
//
// 嵌套字段([]SvcField / map[string]string)借助 gorm `serializer:json` 存 jsonb 列。
// SvcField 第三方服务的自定义字段项(内嵌于 ThirdSvcConfig.fields jsonb 列,也复用于模板/区域专属字段)。
// 加密字段:DefValue 存 AES-GCM 密文;console API 对加密字段只返回 "[encrypted]" 占位。
type SvcField struct {
Key string `json:"key"` // 字段名,同服务内唯一,如 secret_key
Description string `json:"description"` // 字段用途描述,前端展示
Type string `json:"type"` // 字段类型:空/text 普通文本;langs 支持语言多选(值=逗号分隔 BCP-47);lang 单选默认语言
Encrypted bool `json:"encrypted"` // 是否加密存储
DefValue string `json:"def_value"` // 默认值(全区域共用;加密字段存 AES-GCM 密文)
Sort int32 `json:"sort"` // 展示排序,越小越靠前
}
// ThirdSvcConfig 第三方服务配置(表 TableSvcConfig,按应用分离)。每行 = 某应用作用域下的一个第三方服务。
// AppName=''为全局默认、'X'为应用X的覆盖;解析时应用有则用应用的、无则回退全局。
// (app_name,id) 唯一;categories 存逗号分隔的类别枚举值。凭据全部装在 Fields。
type ThirdSvcConfig struct {
RowId uint64 `gorm:"primaryKey;autoIncrement;column:row_id" json:"row_id"`
AppName string `gorm:"column:app_name;size:64;uniqueIndex:uidx_svc_config,priority:1" json:"app_name"` // ''=全局默认
Id string `gorm:"column:id;size:64;uniqueIndex:uidx_svc_config,priority:2" json:"id"`
Name string `gorm:"column:name;size:64" json:"name"`
Provider string `gorm:"column:provider;size:64" json:"provider"`
Categories string `gorm:"column:categories;size:64" json:"categories"`
Description string `gorm:"column:description" json:"description"`
Enable bool `gorm:"column:enable" json:"enable"`
Fields []SvcField `gorm:"column:fields;type:jsonb;serializer:json" json:"fields"`
Createtime int64 `gorm:"column:createtime" json:"createtime"`
Updatetime int64 `gorm:"column:updatetime" json:"updatetime"`
}
// SvcRegionOverride 第三方服务区域字段覆盖(表 TableSvcRegionOverride)。
// (app_name,svc_id,region) 唯一;svc_id 引用同作用域下的 ThirdSvcConfig.Id。
type SvcRegionOverride struct {
Id uint64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"`
AppName string `gorm:"column:app_name;size:64;uniqueIndex:uidx_svc_region,priority:1" json:"app_name"` // ''=全局默认
SvcId string `gorm:"column:svc_id;size:64;uniqueIndex:uidx_svc_region,priority:2" json:"svc_id"`
Region int32 `gorm:"column:region;uniqueIndex:uidx_svc_region,priority:3" json:"region"`
Overrides map[string]string `gorm:"column:overrides;type:jsonb;serializer:json" json:"overrides"` // 默认字段的值覆盖
ExtraFields []SvcField `gorm:"column:extra_fields;type:jsonb;serializer:json" json:"extra_fields"` // 区域专属新增字段
DisabledKeys []string `gorm:"column:disabled_keys;type:jsonb;serializer:json" json:"disabled_keys"` // 区域不适用的默认字段 key
Updatetime int64 `gorm:"column:updatetime" json:"updatetime"`
}
// 会议记录编排类别(三段)。
const (
EchoKindASR int32 = 1 // 识别(录音文件转写)
EchoKindMT int32 = 2 // 翻译
EchoKindLLM int32 = 3 // 总结(大模型)
)
// EchoOrchestration 会议记录服务编排(表 TableEchomeetOrch)。一行 = 某作用域(app_name,region)
// 下某类别选中的一个服务引用 + 排序/标记。不存凭据,svc_id 引用 ThirdSvcConfig.Id。
// 作用域解析顺序:(app,region) → (app,0) → ('',region) → ('',0) 全局默认兜底,越具体越优先。
type EchoOrchestration struct {
RowId uint64 `gorm:"primaryKey;autoIncrement;column:row_id" json:"row_id"`
AppName string `gorm:"column:app_name;size:64;uniqueIndex:uidx_echo_orch,priority:1" json:"app_name"` // ''=全局默认兜底
Region int32 `gorm:"column:region;uniqueIndex:uidx_echo_orch,priority:2" json:"region"` // 0=全区域兜底,>0=特定区域
Kind int32 `gorm:"column:kind;uniqueIndex:uidx_echo_orch,priority:3" json:"kind"` // EchoKindASR/MT/LLM
SvcId string `gorm:"column:svc_id;size:64;uniqueIndex:uidx_echo_orch,priority:4" json:"svc_id"` // 引用 svc_config 的服务 id
Priority int32 `gorm:"column:priority" json:"priority"` // 同类内升序,小=优先
IsDefault bool `gorm:"column:is_default" json:"is_default"` // 总结用:默认模型,同作用域内至多一条
ClientVisible bool `gorm:"column:client_visible" json:"client_visible"` // 总结用:是否允许客户端选择
CostHint float64 `gorm:"column:cost_hint" json:"cost_hint"` // 参考单价,仅排序/展示
Enabled bool `gorm:"column:enabled" json:"enabled"`
Createtime int64 `gorm:"column:createtime" json:"createtime"`
Updatetime int64 `gorm:"column:updatetime" json:"updatetime"`
}
// EchoOrchSetting 会议记录编排的作用域级开关(表 TableEchomeetOrchSetting)。每 (app_name, region) 一行。
type EchoOrchSetting struct {
RowId uint64 `gorm:"primaryKey;autoIncrement;column:row_id" json:"row_id"`
AppName string `gorm:"column:app_name;size:64;uniqueIndex:uidx_echo_orch_set,priority:1" json:"app_name"`
Region int32 `gorm:"column:region;uniqueIndex:uidx_echo_orch_set,priority:2" json:"region"`
// LLMClientChoice 是否允许客户端指定总结模型。false=强制默认模型;true=客户端可在 ClientVisible 且 Enabled 里选。
LLMClientChoice bool `gorm:"column:llm_client_choice" json:"llm_client_choice"`
Updatetime int64 `gorm:"column:updatetime" json:"updatetime"`
}