All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m20s
74 lines
2.4 KiB
Go
74 lines
2.4 KiB
Go
// Package systemconfig 提供受控系统配置的超级管理员读取投影。
|
|
package systemconfig
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/break/junhong_cmp_fiber/internal/infrastructure/systemconfig"
|
|
"github.com/break/junhong_cmp_fiber/internal/model/dto"
|
|
"github.com/break/junhong_cmp_fiber/pkg/constants"
|
|
"github.com/break/junhong_cmp_fiber/pkg/errors"
|
|
"github.com/break/junhong_cmp_fiber/pkg/middleware"
|
|
)
|
|
|
|
// ListQuery 按模块分页查询代码注册配置和未注册遗留记录。
|
|
type ListQuery struct {
|
|
reader *systemconfig.Reader
|
|
}
|
|
|
|
// NewListQuery 创建系统配置列表查询。
|
|
func NewListQuery(reader *systemconfig.Reader) *ListQuery {
|
|
return &ListQuery{reader: reader}
|
|
}
|
|
|
|
// Execute 执行超级管理员系统配置查询。
|
|
func (q *ListQuery) Execute(ctx context.Context, request dto.SystemConfigListRequest) (*dto.SystemConfigListResponse, error) {
|
|
if middleware.GetUserTypeFromContext(ctx) != constants.UserTypeSuperAdmin {
|
|
return nil, errors.New(errors.CodeForbidden)
|
|
}
|
|
page := request.Page
|
|
if page <= 0 {
|
|
page = 1
|
|
}
|
|
pageSize := request.PageSize
|
|
if pageSize <= 0 {
|
|
pageSize = constants.DefaultPageSize
|
|
}
|
|
if pageSize > constants.MaxPageSize {
|
|
pageSize = constants.MaxPageSize
|
|
}
|
|
items, err := q.reader.List(ctx, request.Module)
|
|
if err != nil {
|
|
return nil, errors.Wrap(errors.CodeDatabaseError, err, "查询系统配置失败")
|
|
}
|
|
total := len(items)
|
|
start := (page - 1) * pageSize
|
|
if start > total {
|
|
start = total
|
|
}
|
|
end := start + pageSize
|
|
if end > total {
|
|
end = total
|
|
}
|
|
result := make([]dto.SystemConfigItem, 0, end-start)
|
|
for _, item := range items[start:end] {
|
|
value := item.Value
|
|
if item.Definition.Sensitive && value != "" {
|
|
value = "[已配置]"
|
|
}
|
|
projection := dto.SystemConfigItem{
|
|
ConfigKey: item.Definition.Key, Value: value, ValueType: item.Definition.ValueType,
|
|
Module: item.Definition.Module, Description: item.Definition.Description,
|
|
Readonly: item.Definition.Readonly || !item.Registered, Sensitive: item.Definition.Sensitive,
|
|
Registered: item.Registered, Control: item.Definition.Control,
|
|
EnumValues: item.Definition.EnumValues, Min: item.Definition.Min, Max: item.Definition.Max,
|
|
}
|
|
if item.Record != nil {
|
|
updatedAt := item.Record.UpdatedAt
|
|
projection.UpdatedAt = &updatedAt
|
|
}
|
|
result = append(result, projection)
|
|
}
|
|
return &dto.SystemConfigListResponse{List: result, Total: int64(total), Page: page, PageSize: pageSize}, nil
|
|
}
|