package store import ( "context" "errors" "fmt" "time" "github.com/jackc/pgx/v5" ) // Account ist ein Mandant (ein Unternehmen, das die Antragsprüfung // nutzt). Jeder Antrag gehört genau einem Account. type Account struct { ID string Name string CreatedAt time.Time } // CreateAccount legt einen neuen Mandanten an. func (s *Store) CreateAccount(ctx context.Context, name string) (Account, error) { var a Account err := s.Pool.QueryRow(ctx, ` INSERT INTO account (name) VALUES ($1) RETURNING id, name, created_at `, name).Scan(&a.ID, &a.Name, &a.CreatedAt) if err != nil { return Account{}, fmt.Errorf("store: create account: %w", err) } return a, nil } // GetAccount liest einen Mandanten anhand seiner ID. func (s *Store) GetAccount(ctx context.Context, id string) (Account, error) { var a Account err := s.Pool.QueryRow(ctx, ` SELECT id, name, created_at FROM account WHERE id = $1 `, id).Scan(&a.ID, &a.Name, &a.CreatedAt) if errors.Is(err, pgx.ErrNoRows) { return Account{}, ErrNotFound } if err != nil { return Account{}, fmt.Errorf("store: get account: %w", err) } return a, nil } // ListAccounts liefert alle Mandanten, neueste zuerst — für den // Admin-Bereich (Accounts-Verwaltung). func (s *Store) ListAccounts(ctx context.Context) ([]Account, error) { rows, err := s.Pool.Query(ctx, ` SELECT id, name, created_at FROM account ORDER BY created_at DESC `) if err != nil { return nil, fmt.Errorf("store: list accounts: %w", err) } defer rows.Close() var out []Account for rows.Next() { var a Account if err := rows.Scan(&a.ID, &a.Name, &a.CreatedAt); err != nil { return nil, fmt.Errorf("store: scan account: %w", err) } out = append(out, a) } if err := rows.Err(); err != nil { return nil, fmt.Errorf("store: list accounts: %w", err) } return out, nil }