diff --git a/platform/compliance.go b/platform/compliance.go index 4e5a88de..81ebf35a 100644 --- a/platform/compliance.go +++ b/platform/compliance.go @@ -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 +} diff --git a/platform/lead.go b/platform/lead.go index 429b03e5..c3e245b1 100644 --- a/platform/lead.go +++ b/platform/lead.go @@ -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) diff --git a/platform/types/compliance_report_request.go b/platform/types/compliance_report_request.go index aaf57e1c..f53763a9 100644 --- a/platform/types/compliance_report_request.go +++ b/platform/types/compliance_report_request.go @@ -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, + } +} diff --git a/platform/types/lead.go b/platform/types/lead.go index d9aee046..a3d72f18 100644 --- a/platform/types/lead.go +++ b/platform/types/lead.go @@ -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"` }