package merch import "database/sql" type Repository interface { Origins } type Origins interface { createOrigin(origin *Origin) error getOrigins() ([]Origin, error) deleteOriginByName(name string, deletedAt sql.NullTime) error } type repo struct { db *sql.DB } func newRepo(db *sql.DB) Repository { return &repo{ db: db, } } func (r *repo) createOrigin(origin *Origin) error { q := `INSERT INTO merch_origins (created_at, deleted_at, name) VALUES ($1, $2, $3)` _, err := r.db.Exec(q, origin.CreatedAt, origin.DeletedAt, origin.Name) if err != nil { return err } return nil } func (r *repo) getOrigins() ([]Origin, error) { q := `SELECT * FROM merch_origins WHERE deleted_at IS NULL` rows, err := r.db.Query(q) if err != nil { return nil, err } defer rows.Close() var origins []Origin for rows.Next() { var o Origin if err = rows.Scan(&o.Id, &o.CreatedAt, &o.DeletedAt, &o.Name); err != nil { return nil, err } origins = append(origins, o) } if err = rows.Err(); err != nil { return nil, err } return origins, nil } func (r *repo) deleteOriginByName(name string, deletedAt sql.NullTime) error { q := `UPDATE merch_origins SET deleted_at = $1 WHERE name = $2` _, err := r.db.Exec(q, deletedAt.Time, name) if err != nil { return err } return nil }