115 lines
2.8 KiB
Go
115 lines
2.8 KiB
Go
|
|
// 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")
|
||
|
|
}
|