package repositories import ( "context" "log" "github.com/gofrs/uuid/v5" "github.com/jackc/pgx/v5/pgxpool" "michaelthomson.dev/mthomson/go-todos-app/models" ) type PostgresTodoRepository struct { db *pgxpool.Pool } func (ts *PostgresTodoRepository) List() ([]models.Todo, error) { var todos []models.Todo rows, err := ts.db.Query(context.Background(), "SELECT id, name, done FROM todo") if err != nil { log.Printf("Database error: %v", err) return todos, err } for rows.Next() { var r models.Todo err := rows.Scan(&r.Id, &r.Name, &r.Done) if err != nil { return todos, err } todos = append(todos, r) } return todos, err } func (ts *PostgresTodoRepository) Get(id uuid.UUID) (models.Todo, error) { var todo models.Todo err := ts.db.QueryRow(context.Background(), "SELECT id, name, done FROM todo WHERE id=$1", id).Scan(&todo.Id, &todo.Name, &todo.Done) if err != nil { log.Printf("Database error: %v", err) return todo, err } return todo, err } func (ts *PostgresTodoRepository) Update(id uuid.UUID, name string, done bool) error { _, err := ts.db.Exec(context.Background(), "UPDATE todo SET name=$1, done=$2 WHERE id=$3", name, done, id) if err != nil { log.Printf("Database error: %v", err) } return err } func (ts *PostgresTodoRepository) Add(todo models.Todo) error { _, err := ts.db.Exec(context.Background(), "INSERT INTO todo(id, name, done) values($1, $2, $3)", todo.Id, todo.Name, todo.Done) if err != nil { log.Printf("Database error: %v", err) return err } return err } func (ts *PostgresTodoRepository) Delete(id uuid.UUID) error { _, err := ts.db.Exec(context.Background(), "DELETE FROM todo where id=$1", id) if err != nil { log.Printf("Database error: %v", err) return err } return err } func NewPostgresTodoRepository(db *pgxpool.Pool) PostgresTodoRepository { return PostgresTodoRepository{ db: db, } }