// 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") }