package main import ( "context" "database/sql" ) const ( getAllBanners = "SELECT banner_name, project_id, banner_edge_id FROM banners" getAllBannerClusters = "SELECT cluster_name, cluster_edge_id FROM clusters WHERE banner_edge_id = $1 AND deleted = false;" ) type Provider struct { db *sql.DB } func New(db *sql.DB) *Provider { return &Provider{db: db} } func (p Provider) Banners(ctx context.Context) ([]Banner, error) { banners := make([]Banner, 0) rows, err := p.db.QueryContext(ctx, getAllBanners) if err != nil { return banners, err } for rows.Next() { banner := Banner{} if err := rows.Scan(&banner.Name, &banner.ProjectID, &banner.BannerEdgeID); err != nil { return banners, err } clusterRows, err := p.db.QueryContext(ctx, getAllBannerClusters, banner.BannerEdgeID) if err != nil { return banners, err } for clusterRows.Next() { cluster := Cluster{} if err := clusterRows.Scan(&cluster.Name, &cluster.ClusterEdgeID); err != nil { return banners, err } banner.Clusters = append(banner.Clusters, cluster) } banners = append(banners, banner) } return banners, nil }