thread-master/backend/internal/logic/persona/schedule_persona_copy_draft...

58 lines
1.9 KiB
Go

package persona
import (
"context"
"fmt"
"haixun-backend/internal/library/clock"
copydraftdomain "haixun-backend/internal/model/copy_draft/domain/usecase"
pqdomain "haixun-backend/internal/model/publish_queue/domain/usecase"
"haixun-backend/internal/svc"
"haixun-backend/internal/types"
)
type SchedulePersonaCopyDraftLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewSchedulePersonaCopyDraftLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SchedulePersonaCopyDraftLogic {
return &SchedulePersonaCopyDraftLogic{ctx: ctx, svcCtx: svcCtx}
}
func (l *SchedulePersonaCopyDraftLogic) SchedulePersonaCopyDraft(req *types.SchedulePersonaCopyDraftHandlerReq) (*types.ScheduleCopyDraftsData, error) {
tenantID, uid, err := actorFrom(l.ctx)
if err != nil {
return nil, err
}
if _, err := l.svcCtx.Persona.Get(l.ctx, tenantID, uid, req.ID); err != nil {
return nil, err
}
if _, err := l.svcCtx.ThreadsAccount.Get(l.ctx, tenantID, uid, req.AccountID); err != nil {
return nil, err
}
draft, err := l.svcCtx.CopyDraft.Get(l.ctx, tenantID, uid, req.ID, req.DraftID)
if err != nil {
return nil, err
}
scheduledAt := req.ScheduledAt
if scheduledAt <= 0 {
scheduledAt = clock.NowUnixNano()
}
item, err := l.svcCtx.PublishQueue.Create(l.ctx, pqdomain.CreateRequest{
TenantID: tenantID, OwnerUID: uid, AccountID: req.AccountID,
PersonaID: req.ID, CopyMissionID: draft.CopyMissionID, CopyDraftID: draft.ID,
Text: draft.Text, ScheduledAt: scheduledAt,
})
if err != nil {
return nil, err
}
_, _ = l.svcCtx.CopyDraft.MarkScheduled(l.ctx, copydraftdomain.MarkScheduledRequest{
TenantID: tenantID, OwnerUID: uid, PersonaID: req.ID, DraftID: draft.ID, QueueID: item.ID,
})
return &types.ScheduleCopyDraftsData{
Scheduled: 1,
List: []types.PublishQueueItemData{publishQueueData(item)},
Message: fmt.Sprintf("已排程草稿 %s", draft.ID),
}, nil
}