app: composition root (A1-A4), Run(ctx), handleIncoming (вариант A), фикс config.Load(""), GetActiveTaskByChatID, main.go обновлён
All checks were successful
build-test / build (push) Successful in 35s
All checks were successful
build-test / build (push) Successful in 35s
This commit is contained in:
@@ -87,7 +87,27 @@ func (s *Storage) UpdateTask(ctx context.Context, t *Task) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// ListTasks возвращает список задач с фильтрацией.
|
||||
// GetActiveTaskByChatID возвращает последнюю не-терминальную задачу чата.
|
||||
// Терминальные статусы: success, cancelled, aborted, closed.
|
||||
func (s *Storage) GetActiveTaskByChatID(ctx context.Context, chatID string) (*Task, error) {
|
||||
t := &Task{}
|
||||
err := s.db.QueryRowContext(ctx, `
|
||||
SELECT id, chat_id, title, goal, repo, why, ac, task_tag, status, created_at, updated_at
|
||||
FROM tasks
|
||||
WHERE chat_id = ? AND status NOT IN ('success','cancelled','aborted','closed')
|
||||
ORDER BY updated_at DESC LIMIT 1`, chatID).Scan(
|
||||
&t.ID, &t.ChatID, &t.Title, &t.Goal, &t.Repo,
|
||||
&t.Why, &t.AC, &t.TaskTag, &t.Status, &t.CreatedAt, &t.UpdatedAt)
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, fmt.Errorf("%w: no active task for chat %s", ErrNotFound, chatID)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("%w: get active task %s: %w", ErrDB, chatID, err)
|
||||
}
|
||||
return t, nil
|
||||
}
|
||||
|
||||
// ListTasks возвращает задачи по фильтру.
|
||||
func (s *Storage) ListTasks(ctx context.Context, filter TaskFilter) ([]*Task, error) {
|
||||
if filter.Limit <= 0 {
|
||||
filter.Limit = 50
|
||||
|
||||
Reference in New Issue
Block a user