fix: генерить task_tag (UUID) при создании задачи; защита feat/' при пустом tag
This commit is contained in:
@@ -2,13 +2,31 @@ package storage
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/rand"
|
||||
"database/sql"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
// newTaskTag генерирует стабильный UUID задачи (task_tag) — он же ложится в
|
||||
// feature-ветку git (feat/<taskTag>). Генерится при создании и НЕ меняется.
|
||||
func newTaskTag() string {
|
||||
b := make([]byte, 8)
|
||||
if _, err := rand.Read(b); err != nil {
|
||||
// крипто-rand недоступен — fallback по времени
|
||||
return hex.EncodeToString([]byte(time.Now().Format("150405.000000000")))
|
||||
}
|
||||
return hex.EncodeToString(b)
|
||||
}
|
||||
|
||||
// CreateTask создаёт задачу со статусом draft. Возвращает её ID.
|
||||
// chat_id и task_tag передаются извне (в диалоге — chat.Address + uuid).
|
||||
// chat_id и task_tag передаются извне; если task_tag не задан — генерится уник
|
||||
// UUID (стабильный на всё время жизни, нужен для feature-ветки feat/<tag>).
|
||||
func (s *Storage) CreateTask(ctx context.Context, t *Task) (int64, error) {
|
||||
if t.TaskTag == "" {
|
||||
t.TaskTag = newTaskTag()
|
||||
}
|
||||
now := Now()
|
||||
res, err := s.db.ExecContext(ctx, `
|
||||
INSERT INTO tasks (chat_id, title, goal, repo, repos, why, ac, task_tag, status, created_at, updated_at)
|
||||
@@ -161,4 +179,4 @@ func (s *Storage) DeleteTask(ctx context.Context, id int64) error {
|
||||
return fmt.Errorf("%w: task %d", ErrNotFound, id)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user