Files
moteva/server/internal/logic/query_project_logic.go
T

115 lines
2.8 KiB
Go
Raw Normal View History

// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package logic
import (
"context"
"strings"
"time"
"img_infinite_canvas/internal/domain/design"
"img_infinite_canvas/internal/svc"
"img_infinite_canvas/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
const lovartProjectType int64 = 6
type QueryProjectLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewQueryProjectLogic(ctx context.Context, svcCtx *svc.ServiceContext) *QueryProjectLogic {
return &QueryProjectLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *QueryProjectLogic) QueryProject(req *types.QueryProjectRequest) (resp *types.QueryProjectResponse, err error) {
project, err := l.svcCtx.DesignService.GetProject(l.ctx, req.ProjectId)
if err != nil {
return nil, err
}
return toQueryProjectResponse(project), nil
}
func toQueryProjectResponse(project design.Project) *types.QueryProjectResponse {
covers := queryProjectCoverList(project)
updatedAt := formatLovartTime(project.UpdatedAt)
return &types.QueryProjectResponse{
Code: 0,
Msg: nil,
Data: types.QueryProjectData{
AssetMeta: types.QueryProjectAssetMeta{
AssetId: project.ID,
ProjectId: project.ID,
Name: project.Title,
ProjectType: lovartProjectType,
ContentType: "PROJECT_LOVART_V2",
OwnerType: "USER",
OwnerId: project.UserID,
Extra: types.QueryProjectExtra{
PicCount: int64(len(covers)),
ProjectCoverList: covers,
},
Meta: types.QueryProjectMeta{
UniqId: project.SnapshotID,
ParentUniqId: "",
},
EffectivePermission: "OWNER",
CopyTaskStatus: nil,
Visibility: "PRIVATE",
CreateTime: updatedAt,
UpdateTime: updatedAt,
},
UserId: project.UserID,
ProjectName: project.Title,
ProjectId: nil,
Canvas: project.Canvas,
ValidProjectId: true,
ProjectType: lovartProjectType,
Version: project.Version,
SnapshotId: nil,
ItemId: nil,
Permission: "OWNER",
},
}
}
func queryProjectCoverList(project design.Project) []string {
seen := make(map[string]bool)
covers := make([]string, 0, 4)
add := func(value string) {
value = strings.TrimSpace(value)
if value == "" || strings.HasPrefix(value, "data:") || strings.HasPrefix(value, "blob:") || seen[value] {
return
}
seen[value] = true
covers = append(covers, value)
}
add(project.Thumbnail)
for _, node := range project.Nodes {
if len(covers) >= 12 {
break
}
if (node.Type == design.NodeTypeImage || node.Type == design.NodeTypeFrame) && node.Status == "success" {
add(node.Content)
}
}
return covers
}
func formatLovartTime(value time.Time) string {
if value.IsZero() {
value = time.Now()
}
return value.Format("2006-01-02T15:04:05")
}