Send compliance report data with lead data

This commit is contained in:
Eli Ribble 2026-04-17 20:51:07 +00:00
parent cedbb3372e
commit ac552be7e7
No known key found for this signature in database
4 changed files with 45 additions and 10 deletions

View file

@ -97,3 +97,21 @@ func ComplianceRequestMailerCreate(ctx context.Context, user User, site_id int32
return req.ID, nil
}
func ComplianceReportRequestByLeadID(ctx context.Context, lead_ids []int32) (map[int32][]*types.ComplianceReportRequest, error) {
rows, err := models.ComplianceReportRequests.Query(
sm.Where(models.ComplianceReportRequests.Columns.LeadID.EQ(psql.Any(lead_ids))),
).All(ctx, db.PGInstance.BobDB)
if err != nil {
return nil, fmt.Errorf("query reports: %w", err)
}
results := make(map[int32][]*types.ComplianceReportRequest, len(lead_ids))
for _, row := range rows {
crrs, ok := results[row.LeadID.MustGet()]
if !ok {
return nil, fmt.Errorf("impossible")
}
crrs = append(crrs, types.ComplianceReportRequestFromModel(row))
}
return results, nil
}

View file

@ -54,13 +54,8 @@ func leadsBySiteID(ctx context.Context, site_ids []int32) (map[int32][]types.Lea
models.Leads.Columns.ID.As("id"),
models.Leads.Columns.SiteID.As("site_id"),
models.Leads.Columns.Type.As("type"),
models.ComplianceReportRequests.Columns.ID.As("compliance_report_request_id"),
),
sm.From(models.Leads.Name()),
sm.LeftJoin(models.ComplianceReportRequests.Name()).OnEQ(
models.Leads.Columns.ID,
models.ComplianceReportRequests.Columns.LeadID,
),
sm.Where(
models.Leads.Columns.SiteID.EQ(psql.Any(site_ids)),
),
@ -68,6 +63,18 @@ func leadsBySiteID(ctx context.Context, site_ids []int32) (map[int32][]types.Lea
if err != nil {
return nil, fmt.Errorf("query leads: %w", err)
}
lead_ids := make([]int32, len(rows))
for i, row := range rows {
lead_ids[i] = row.ID
}
compliance_report_requests, err := ComplianceReportRequestByLeadID(ctx, lead_ids)
for _, row := range rows {
crrs, ok := compliance_report_requests[row.ID]
if !ok {
return nil, fmt.Errorf("impossible")
}
row.ComplianceReportRequests = crrs
}
results := make(map[int32][]types.Lead, len(site_ids))
for _, site_id := range site_ids {
results[site_id] = make([]types.Lead, 0)

View file

@ -1,6 +1,17 @@
package types
import (
"github.com/Gleipnir-Technology/nidus-sync/db/models"
)
type ComplianceReportRequest struct {
ID int32 `db:"id" json:"id"`
PublicID string `db:"public_id" json:"public_id"`
}
func ComplianceReportRequestFromModel(crr *models.ComplianceReportRequest) *ComplianceReportRequest {
return &ComplianceReportRequest{
ID: crr.ID,
PublicID: crr.PublicID,
}
}

View file

@ -1,9 +1,8 @@
package types
type Lead struct {
ComplianceReportRequest *ComplianceReportRequest `db:"-" json:"compliance_report_request"`
ComplianceReportRequestID *int32 `db:"compliance_report_request_id" json:"-"`
ID int32 `db:"id" json:"id"`
SiteID int32 `db:"site_id" json:"site_id"`
Type string `db:"type" json:"type"`
ComplianceReportRequests []*ComplianceReportRequest `db:"-" json:"compliance_report_requests"`
ID int32 `db:"id" json:"id"`
SiteID int32 `db:"site_id" json:"site_id"`
Type string `db:"type" json:"type"`
}