feat(kol): repository layer for all KOL tables
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/jackc/pgx/v5"
|
||||
|
||||
"github.com/geo-platform/tenant-api/internal/tenant/repository/generated"
|
||||
)
|
||||
|
||||
type KolAssistTask struct {
|
||||
ID string
|
||||
TenantID int64
|
||||
KolProfileID int64
|
||||
PromptID *int64
|
||||
OperatorID int64
|
||||
TaskType string
|
||||
Status string
|
||||
RequestJSON []byte
|
||||
ResultJSON []byte
|
||||
ErrorMessage *string
|
||||
StartedAt *time.Time
|
||||
CompletedAt *time.Time
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
type CreateKolAssistInput struct {
|
||||
ID string
|
||||
TenantID int64
|
||||
KolProfileID int64
|
||||
PromptID *int64
|
||||
OperatorID int64
|
||||
TaskType string
|
||||
RequestJSON []byte
|
||||
}
|
||||
|
||||
type KolAssistRepository interface {
|
||||
Create(ctx context.Context, input CreateKolAssistInput) error
|
||||
Get(ctx context.Context, tenantID int64, id string) (*KolAssistTask, error)
|
||||
MarkStarted(ctx context.Context, tenantID int64, id string) error
|
||||
MarkCompleted(ctx context.Context, tenantID int64, id string, resultJSON []byte) error
|
||||
MarkFailed(ctx context.Context, tenantID int64, id string, errorMsg string) error
|
||||
}
|
||||
|
||||
type kolAssistRepository struct {
|
||||
q generated.Querier
|
||||
}
|
||||
|
||||
func NewKolAssistRepository(db generated.DBTX) KolAssistRepository {
|
||||
return &kolAssistRepository{q: newQuerier(db)}
|
||||
}
|
||||
|
||||
func (r *kolAssistRepository) Create(ctx context.Context, input CreateKolAssistInput) error {
|
||||
return r.q.CreateKolAssistTask(ctx, generated.CreateKolAssistTaskParams{
|
||||
ID: input.ID,
|
||||
TenantID: input.TenantID,
|
||||
KolProfileID: input.KolProfileID,
|
||||
PromptID: pgInt8(input.PromptID),
|
||||
OperatorID: input.OperatorID,
|
||||
TaskType: input.TaskType,
|
||||
RequestJson: input.RequestJSON,
|
||||
})
|
||||
}
|
||||
|
||||
func (r *kolAssistRepository) Get(ctx context.Context, tenantID int64, id string) (*KolAssistTask, error) {
|
||||
row, err := r.q.GetKolAssistTask(ctx, generated.GetKolAssistTaskParams{
|
||||
ID: id,
|
||||
TenantID: tenantID,
|
||||
})
|
||||
if err != nil {
|
||||
if errors.Is(err, pgx.ErrNoRows) {
|
||||
return nil, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return &KolAssistTask{
|
||||
ID: row.ID,
|
||||
TenantID: row.TenantID,
|
||||
KolProfileID: row.KolProfileID,
|
||||
PromptID: nullableInt64(row.PromptID),
|
||||
OperatorID: row.OperatorID,
|
||||
TaskType: row.TaskType,
|
||||
Status: row.Status,
|
||||
RequestJSON: row.RequestJson,
|
||||
ResultJSON: row.ResultJson,
|
||||
ErrorMessage: nullableText(row.ErrorMessage),
|
||||
StartedAt: optionalTime(row.StartedAt),
|
||||
CompletedAt: optionalTime(row.CompletedAt),
|
||||
CreatedAt: timeFromTimestamp(row.CreatedAt),
|
||||
UpdatedAt: timeFromTimestamp(row.UpdatedAt),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (r *kolAssistRepository) MarkStarted(ctx context.Context, tenantID int64, id string) error {
|
||||
return r.q.MarkKolAssistStarted(ctx, generated.MarkKolAssistStartedParams{
|
||||
ID: id,
|
||||
TenantID: tenantID,
|
||||
})
|
||||
}
|
||||
|
||||
func (r *kolAssistRepository) MarkCompleted(ctx context.Context, tenantID int64, id string, resultJSON []byte) error {
|
||||
return r.q.MarkKolAssistCompleted(ctx, generated.MarkKolAssistCompletedParams{
|
||||
ResultJson: resultJSON,
|
||||
ID: id,
|
||||
TenantID: tenantID,
|
||||
})
|
||||
}
|
||||
|
||||
func (r *kolAssistRepository) MarkFailed(ctx context.Context, tenantID int64, id string, errorMsg string) error {
|
||||
return r.q.MarkKolAssistFailed(ctx, generated.MarkKolAssistFailedParams{
|
||||
ErrorMessage: pgText(&errorMsg),
|
||||
ID: id,
|
||||
TenantID: tenantID,
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user