feat: add tenant entry application pages
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
// Package sys
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2026 HotGo
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package sys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"hotgo/internal/library/storager"
|
||||
"hotgo/internal/model/input/sysin"
|
||||
"hotgo/internal/service"
|
||||
"strings"
|
||||
|
||||
"github.com/gogf/gf/v2/encoding/gjson"
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
func loadImPublicUploads(ctx context.Context, fileIds []string) (files []*sysin.ImPublicUploadModel, err error) {
|
||||
fileIds = compactStringSlice(fileIds)
|
||||
if len(fileIds) == 0 {
|
||||
return []*sysin.ImPublicUploadModel{}, nil
|
||||
}
|
||||
if err = g.DB().Model("im_public_uploads").Safe().Ctx(ctx).
|
||||
Fields(
|
||||
"id",
|
||||
"file_id",
|
||||
"purpose",
|
||||
"mime_type",
|
||||
"size",
|
||||
"etag",
|
||||
"location",
|
||||
"expires_at",
|
||||
"created_at",
|
||||
"uploaded_at",
|
||||
).
|
||||
WhereIn("file_id", fileIds).
|
||||
OrderAsc("id").
|
||||
Scan(&files); err != nil {
|
||||
return nil, gerror.Wrap(err, "获取公共上传文件信息失败,请稍后重试!")
|
||||
}
|
||||
|
||||
drive := ""
|
||||
if conf, confErr := service.SysConfig().GetUpload(ctx); confErr == nil && conf != nil {
|
||||
drive = conf.Drive
|
||||
}
|
||||
for _, file := range files {
|
||||
file.Url = storager.LastUrl(ctx, file.Location, drive)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func firstImPublicUpload(ctx context.Context, fileId string) (file *sysin.ImPublicUploadModel, err error) {
|
||||
files, err := loadImPublicUploads(ctx, []string{fileId})
|
||||
if err != nil || len(files) == 0 {
|
||||
return
|
||||
}
|
||||
return files[0], nil
|
||||
}
|
||||
|
||||
func parseJSONStringSlice(raw string) []string {
|
||||
raw = strings.TrimSpace(raw)
|
||||
if raw == "" || raw == "null" {
|
||||
return nil
|
||||
}
|
||||
|
||||
var ids []string
|
||||
if err := gjson.DecodeTo([]byte(raw), &ids); err == nil && len(ids) > 0 {
|
||||
return compactStringSlice(ids)
|
||||
}
|
||||
return compactStringSlice([]string{raw})
|
||||
}
|
||||
|
||||
func compactStringSlice(values []string) []string {
|
||||
res := make([]string, 0, len(values))
|
||||
seen := make(map[string]struct{}, len(values))
|
||||
for _, value := range values {
|
||||
value = strings.TrimSpace(value)
|
||||
if value == "" {
|
||||
continue
|
||||
}
|
||||
if _, ok := seen[value]; ok {
|
||||
continue
|
||||
}
|
||||
seen[value] = struct{}{}
|
||||
res = append(res, value)
|
||||
}
|
||||
return res
|
||||
}
|
||||
Reference in New Issue
Block a user