package merch import ( "context" "database/sql" ) type Origins interface { createOrigin(ctx context.Context, origin *Origin) error getOrigins(ctx context.Context) ([]Origin, error) deleteOriginByName(ctx context.Context, name string, deletedAt sql.NullTime) error } func (r *repo) createOrigin(ctx context.Context, origin *Origin) error { q := `INSERT INTO merch_origins (created_at, deleted_at, name) VALUES ($1, $2, $3)` _, err := r.db.Exec(ctx, q, origin.CreatedAt, origin.DeletedAt, origin.Name) if err != nil { return err } return nil } func (r *repo) getOrigins(ctx context.Context) ([]Origin, error) { q := `SELECT * FROM merch_origins WHERE deleted_at IS NULL` rows, err := r.db.Query(ctx, 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(ctx context.Context, name string, deletedAt sql.NullTime) error { q := `UPDATE merch_origins SET deleted_at = $1 WHERE name = $2` _, err := r.db.Exec(ctx, q, deletedAt.Time, name) if err != nil { return err } return nil }