// Code scaffolded by goctl. Safe to edit. // goctl 1.10.1 package logic import ( "context" "time" "img_infinite_canvas/internal/domain/design" sharingmodule "img_infinite_canvas/internal/modules/sharing" "img_infinite_canvas/internal/svc" "img_infinite_canvas/internal/types" "github.com/zeromicro/go-zero/core/logx" ) type ResolveShareLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewResolveShareLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ResolveShareLogic { return &ResolveShareLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *ResolveShareLogic) ResolveShare(req *types.ResolveShareRequest) (resp *types.ResolveShareResponse, err error) { actor := sharingmodule.ActorFromContext(l.ctx) access, err := l.svcCtx.ShareService.ResolveAccess(l.ctx, req.ShareId, actor) if err != nil { return nil, err } ownerCtx := design.ContextWithUserID(l.ctx, access.OwnerID) project, err := l.svcCtx.DesignService.GetProject(ownerCtx, access.ProjectID) if err != nil { return nil, err } if err := l.svcCtx.ShareService.RecordVisit(l.ctx, access, actor, req.VisitorId); err != nil { l.Errorf("record share visit: %v", err) } project = filterSharedProject(project, access) updatedAt := project.UpdatedAt if updatedAt.IsZero() { updatedAt = time.Now().UTC() } return &types.ResolveShareResponse{ ShareId: access.ShareID, Project: toAPIProject(project), Access: toShareAccess(access), UpdatedAt: formatTime(updatedAt), }, nil }