38005c0618
Go's encoding/json does not bridge snake_case <-> PascalCase field names, so store.Endpoint, store.Task and the anonymous request bodies in accounts.go/auth.go were silently decoding empty/zero values from the frontend's snake_case JSON contract (tls_mode, role_label, src_endpoint_id, dst_endpoint_id, src_login/pass, dst_login/pass). Adds explicit json tags; DB layer is unaffected since pgx binds by positional params, not struct-tag reflection. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MMHQTtnQtQqL8muAXHr9kd
58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
package store
|
|
|
|
import "context"
|
|
|
|
type Task struct {
|
|
ID int64 `json:"id"`
|
|
Name string `json:"name"`
|
|
SrcEndpointID int64 `json:"src_endpoint_id"`
|
|
DstEndpointID int64 `json:"dst_endpoint_id"`
|
|
Status string `json:"status"`
|
|
FolderMapping map[string]string `json:"folder_mapping"`
|
|
}
|
|
|
|
func (s *Store) CreateTask(ctx context.Context, t Task) (int64, error) {
|
|
if t.FolderMapping == nil {
|
|
t.FolderMapping = map[string]string{}
|
|
}
|
|
var id int64
|
|
err := s.Pool.QueryRow(ctx,
|
|
`INSERT INTO tasks (name, src_endpoint_id, dst_endpoint_id, folder_mapping)
|
|
VALUES ($1,$2,$3,$4) RETURNING id`,
|
|
t.Name, t.SrcEndpointID, t.DstEndpointID, t.FolderMapping).Scan(&id)
|
|
return id, err
|
|
}
|
|
|
|
func (s *Store) GetTask(ctx context.Context, id int64) (Task, error) {
|
|
var t Task
|
|
err := s.Pool.QueryRow(ctx,
|
|
`SELECT id, name, src_endpoint_id, dst_endpoint_id, status, folder_mapping
|
|
FROM tasks WHERE id=$1`, id).
|
|
Scan(&t.ID, &t.Name, &t.SrcEndpointID, &t.DstEndpointID, &t.Status, &t.FolderMapping)
|
|
return t, err
|
|
}
|
|
|
|
func (s *Store) ListTasks(ctx context.Context) ([]Task, error) {
|
|
rows, err := s.Pool.Query(ctx,
|
|
`SELECT id, name, src_endpoint_id, dst_endpoint_id, status, folder_mapping
|
|
FROM tasks ORDER BY id DESC`)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var out []Task
|
|
for rows.Next() {
|
|
var t Task
|
|
if err := rows.Scan(&t.ID, &t.Name, &t.SrcEndpointID, &t.DstEndpointID, &t.Status, &t.FolderMapping); err != nil {
|
|
return nil, err
|
|
}
|
|
out = append(out, t)
|
|
}
|
|
return out, rows.Err()
|
|
}
|
|
|
|
func (s *Store) SetTaskStatus(ctx context.Context, id int64, status string) error {
|
|
_, err := s.Pool.Exec(ctx, `UPDATE tasks SET status=$2 WHERE id=$1`, id, status)
|
|
return err
|
|
}
|