Phase 4: upload, LLM extraction, import review flow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"crypto/sha256"
|
||||
"database/sql"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strings"
|
||||
@@ -373,3 +375,49 @@ func (r *Repo) GetStatsForUser(userID int64, questionIDs []string) (map[string]*
|
||||
}
|
||||
return result, rows.Err()
|
||||
}
|
||||
|
||||
// ── Draft (import review) ────────────────────────────────────────────────────
|
||||
|
||||
func newDraftID() string {
|
||||
b := make([]byte, 16)
|
||||
rand.Read(b)
|
||||
return hex.EncodeToString(b)
|
||||
}
|
||||
|
||||
func (r *Repo) CreateDraft(userID int64, source string, questions []models.DraftQuestion) (string, error) {
|
||||
data, err := json.Marshal(questions)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
id := newDraftID()
|
||||
_, err = r.db.Exec(
|
||||
"INSERT INTO import_drafts (id, user_id, source, questions) VALUES (?, ?, ?, ?)",
|
||||
id, userID, source, string(data),
|
||||
)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func (r *Repo) GetDraftForUser(id string, userID int64) (*models.Draft, error) {
|
||||
d := &models.Draft{}
|
||||
var questionsJSON, createdAt string
|
||||
err := r.db.QueryRow(
|
||||
"SELECT id, user_id, source, questions, created_at FROM import_drafts WHERE id = ? AND user_id = ?",
|
||||
id, userID,
|
||||
).Scan(&d.ID, &d.UserID, &d.Source, &questionsJSON, &createdAt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
d.CreatedAt = parseTime(createdAt)
|
||||
if err := json.Unmarshal([]byte(questionsJSON), &d.Questions); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return d, nil
|
||||
}
|
||||
|
||||
func (r *Repo) DeleteDraft(id string) error {
|
||||
_, err := r.db.Exec("DELETE FROM import_drafts WHERE id = ?", id)
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user