Refactor brand service and related components

- Removed ListQuestionVersions method and associated types from BrandService and Queries.
- Updated PromptRuleGenerationService to change task naming and handling.
- Enhanced ScheduleTaskService to support filtering by created date range and keyword.
- Introduced InstantTaskService for managing instant tasks with appropriate filtering and response structures.
- Added InstantTaskHandler for handling API requests related to instant tasks.
- Created InstantTaskTab component for the admin web interface to display and manage instant tasks.
- Updated database migrations to rename source types for articles and generation tasks.
- Adjusted models and repository queries to reflect the removal of question version handling.
This commit is contained in:
2026-04-02 21:16:12 +08:00
parent 111498a65f
commit 8958cb44c0
36 changed files with 1378 additions and 358 deletions
@@ -345,47 +345,6 @@ func (q *Queries) ListKeywords(ctx context.Context, arg ListKeywordsParams) ([]L
return items, nil
}
const listQuestionVersions = `-- name: ListQuestionVersions :many
SELECT v.id, v.question_id, v.question_text, v.question_hash, v.version_no, v.is_active, v.created_at
FROM brand_question_versions v
JOIN brand_questions q ON q.id = v.question_id
WHERE q.brand_id = $1 AND q.tenant_id = $2
ORDER BY v.created_at DESC
`
type ListQuestionVersionsParams struct {
BrandID int64 `json:"brand_id"`
TenantID int64 `json:"tenant_id"`
}
func (q *Queries) ListQuestionVersions(ctx context.Context, arg ListQuestionVersionsParams) ([]BrandQuestionVersion, error) {
rows, err := q.db.Query(ctx, listQuestionVersions, arg.BrandID, arg.TenantID)
if err != nil {
return nil, err
}
defer rows.Close()
var items []BrandQuestionVersion
for rows.Next() {
var i BrandQuestionVersion
if err := rows.Scan(
&i.ID,
&i.QuestionID,
&i.QuestionText,
&i.QuestionHash,
&i.VersionNo,
&i.IsActive,
&i.CreatedAt,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const listQuestions = `-- name: ListQuestions :many
SELECT q.id, q.tenant_id, q.brand_id, q.keyword_id, q.current_version_id, q.status, q.created_at,
v.question_text, v.version_no
@@ -79,6 +79,7 @@ type Brand struct {
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
DeletedAt pgtype.Timestamptz `json:"deleted_at"`
Website pgtype.Text `json:"website"`
}
type BrandKeyword struct {
@@ -61,7 +61,6 @@ type Querier interface {
// ============================================================
ListPromptRules(ctx context.Context, arg ListPromptRulesParams) ([]ListPromptRulesRow, error)
ListPromptRulesUngrouped(ctx context.Context, arg ListPromptRulesUngroupedParams) ([]ListPromptRulesUngroupedRow, error)
ListQuestionVersions(ctx context.Context, arg ListQuestionVersionsParams) ([]BrandQuestionVersion, error)
ListQuestions(ctx context.Context, arg ListQuestionsParams) ([]ListQuestionsRow, error)
ListScheduleTasks(ctx context.Context, arg ListScheduleTasksParams) ([]ListScheduleTasksRow, error)
ListTemplates(ctx context.Context, tenantID int64) ([]ListTemplatesRow, error)