Relate compliance report requests through leads

This commit is contained in:
Eli Ribble 2026-03-05 01:22:21 +00:00
parent a28377d8f8
commit 60344e3c30
No known key found for this signature in database
41 changed files with 4825 additions and 819 deletions

View file

@ -57,13 +57,13 @@ type SitesQuery = *psql.ViewQuery[*Site, SiteSlice]
// siteR is where relationships are stored.
type siteR struct {
ComplianceReportRequests ComplianceReportRequestSlice // compliance_report_request.compliance_report_request_site_id_site_version_fkey
Pools PoolSlice // pool.pool_site_id_site_version_fkey
Residents ResidentSlice // resident.resident_site_id_site_version_fkey
Address *Address // site.site_address_id_fkey
CreatorUser *User // site.site_creator_id_fkey
File *FileuploadFile // site.site_file_id_fkey
Parcel *Parcel // site.site_parcel_id_fkey
Leads LeadSlice // lead.lead_site_id_site_version_fkey
Pools PoolSlice // pool.pool_site_id_site_version_fkey
Residents ResidentSlice // resident.resident_site_id_site_version_fkey
Address *Address // site.site_address_id_fkey
CreatorUser *User // site.site_creator_id_fkey
File *FileuploadFile // site.site_file_id_fkey
Parcel *Parcel // site.site_parcel_id_fkey
}
func buildSiteColumns(alias string) siteColumns {
@ -642,14 +642,14 @@ func (o SiteSlice) ReloadAll(ctx context.Context, exec bob.Executor) error {
return nil
}
// ComplianceReportRequests starts a query for related objects on compliance_report_request
func (o *Site) ComplianceReportRequests(mods ...bob.Mod[*dialect.SelectQuery]) ComplianceReportRequestsQuery {
return ComplianceReportRequests.Query(append(mods,
sm.Where(ComplianceReportRequests.Columns.SiteID.EQ(psql.Arg(o.ID))), sm.Where(ComplianceReportRequests.Columns.SiteVersion.EQ(psql.Arg(o.Version))),
// Leads starts a query for related objects on lead
func (o *Site) Leads(mods ...bob.Mod[*dialect.SelectQuery]) LeadsQuery {
return Leads.Query(append(mods,
sm.Where(Leads.Columns.SiteID.EQ(psql.Arg(o.ID))), sm.Where(Leads.Columns.SiteVersion.EQ(psql.Arg(o.Version))),
)...)
}
func (os SiteSlice) ComplianceReportRequests(mods ...bob.Mod[*dialect.SelectQuery]) ComplianceReportRequestsQuery {
func (os SiteSlice) Leads(mods ...bob.Mod[*dialect.SelectQuery]) LeadsQuery {
pkID := make(pgtypes.Array[int32], 0, len(os))
pkVersion := make(pgtypes.Array[int32], 0, len(os))
@ -665,8 +665,8 @@ func (os SiteSlice) ComplianceReportRequests(mods ...bob.Mod[*dialect.SelectQuer
psql.F("unnest", psql.Cast(psql.Arg(pkVersion), "integer[]")),
))
return ComplianceReportRequests.Query(append(mods,
sm.Where(psql.Group(ComplianceReportRequests.Columns.SiteID, ComplianceReportRequests.Columns.SiteVersion).OP("IN", PKArgExpr)),
return Leads.Query(append(mods,
sm.Where(psql.Group(Leads.Columns.SiteID, Leads.Columns.SiteVersion).OP("IN", PKArgExpr)),
)...)
}
@ -822,68 +822,68 @@ func (os SiteSlice) Parcel(mods ...bob.Mod[*dialect.SelectQuery]) ParcelsQuery {
)...)
}
func insertSiteComplianceReportRequests0(ctx context.Context, exec bob.Executor, complianceReportRequests1 []*ComplianceReportRequestSetter, site0 *Site) (ComplianceReportRequestSlice, error) {
for i := range complianceReportRequests1 {
complianceReportRequests1[i].SiteID = omit.From(site0.ID)
complianceReportRequests1[i].SiteVersion = omit.From(site0.Version)
func insertSiteLeads0(ctx context.Context, exec bob.Executor, leads1 []*LeadSetter, site0 *Site) (LeadSlice, error) {
for i := range leads1 {
leads1[i].SiteID = omitnull.From(site0.ID)
leads1[i].SiteVersion = omitnull.From(site0.Version)
}
ret, err := ComplianceReportRequests.Insert(bob.ToMods(complianceReportRequests1...)).All(ctx, exec)
ret, err := Leads.Insert(bob.ToMods(leads1...)).All(ctx, exec)
if err != nil {
return ret, fmt.Errorf("insertSiteComplianceReportRequests0: %w", err)
return ret, fmt.Errorf("insertSiteLeads0: %w", err)
}
return ret, nil
}
func attachSiteComplianceReportRequests0(ctx context.Context, exec bob.Executor, count int, complianceReportRequests1 ComplianceReportRequestSlice, site0 *Site) (ComplianceReportRequestSlice, error) {
setter := &ComplianceReportRequestSetter{
SiteID: omit.From(site0.ID),
SiteVersion: omit.From(site0.Version),
func attachSiteLeads0(ctx context.Context, exec bob.Executor, count int, leads1 LeadSlice, site0 *Site) (LeadSlice, error) {
setter := &LeadSetter{
SiteID: omitnull.From(site0.ID),
SiteVersion: omitnull.From(site0.Version),
}
err := complianceReportRequests1.UpdateAll(ctx, exec, *setter)
err := leads1.UpdateAll(ctx, exec, *setter)
if err != nil {
return nil, fmt.Errorf("attachSiteComplianceReportRequests0: %w", err)
return nil, fmt.Errorf("attachSiteLeads0: %w", err)
}
return complianceReportRequests1, nil
return leads1, nil
}
func (site0 *Site) InsertComplianceReportRequests(ctx context.Context, exec bob.Executor, related ...*ComplianceReportRequestSetter) error {
func (site0 *Site) InsertLeads(ctx context.Context, exec bob.Executor, related ...*LeadSetter) error {
if len(related) == 0 {
return nil
}
var err error
complianceReportRequests1, err := insertSiteComplianceReportRequests0(ctx, exec, related, site0)
leads1, err := insertSiteLeads0(ctx, exec, related, site0)
if err != nil {
return err
}
site0.R.ComplianceReportRequests = append(site0.R.ComplianceReportRequests, complianceReportRequests1...)
site0.R.Leads = append(site0.R.Leads, leads1...)
for _, rel := range complianceReportRequests1 {
for _, rel := range leads1 {
rel.R.Site = site0
}
return nil
}
func (site0 *Site) AttachComplianceReportRequests(ctx context.Context, exec bob.Executor, related ...*ComplianceReportRequest) error {
func (site0 *Site) AttachLeads(ctx context.Context, exec bob.Executor, related ...*Lead) error {
if len(related) == 0 {
return nil
}
var err error
complianceReportRequests1 := ComplianceReportRequestSlice(related)
leads1 := LeadSlice(related)
_, err = attachSiteComplianceReportRequests0(ctx, exec, len(related), complianceReportRequests1, site0)
_, err = attachSiteLeads0(ctx, exec, len(related), leads1, site0)
if err != nil {
return err
}
site0.R.ComplianceReportRequests = append(site0.R.ComplianceReportRequests, complianceReportRequests1...)
site0.R.Leads = append(site0.R.Leads, leads1...)
for _, rel := range related {
rel.R.Site = site0
@ -1268,13 +1268,13 @@ func (o *Site) Preload(name string, retrieved any) error {
}
switch name {
case "ComplianceReportRequests":
rels, ok := retrieved.(ComplianceReportRequestSlice)
case "Leads":
rels, ok := retrieved.(LeadSlice)
if !ok {
return fmt.Errorf("site cannot load %T as %q", retrieved, name)
}
o.R.ComplianceReportRequests = rels
o.R.Leads = rels
for _, rel := range rels {
if rel != nil {
@ -1428,18 +1428,18 @@ func buildSitePreloader() sitePreloader {
}
type siteThenLoader[Q orm.Loadable] struct {
ComplianceReportRequests func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Pools func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Residents func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Address func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
CreatorUser func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
File func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Parcel func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Leads func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Pools func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Residents func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Address func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
CreatorUser func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
File func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Parcel func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
}
func buildSiteThenLoader[Q orm.Loadable]() siteThenLoader[Q] {
type ComplianceReportRequestsLoadInterface interface {
LoadComplianceReportRequests(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
type LeadsLoadInterface interface {
LoadLeads(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
}
type PoolsLoadInterface interface {
LoadPools(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
@ -1461,10 +1461,10 @@ func buildSiteThenLoader[Q orm.Loadable]() siteThenLoader[Q] {
}
return siteThenLoader[Q]{
ComplianceReportRequests: thenLoadBuilder[Q](
"ComplianceReportRequests",
func(ctx context.Context, exec bob.Executor, retrieved ComplianceReportRequestsLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
return retrieved.LoadComplianceReportRequests(ctx, exec, mods...)
Leads: thenLoadBuilder[Q](
"Leads",
func(ctx context.Context, exec bob.Executor, retrieved LeadsLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
return retrieved.LoadLeads(ctx, exec, mods...)
},
),
Pools: thenLoadBuilder[Q](
@ -1506,16 +1506,16 @@ func buildSiteThenLoader[Q orm.Loadable]() siteThenLoader[Q] {
}
}
// LoadComplianceReportRequests loads the site's ComplianceReportRequests into the .R struct
func (o *Site) LoadComplianceReportRequests(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
// LoadLeads loads the site's Leads into the .R struct
func (o *Site) LoadLeads(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
if o == nil {
return nil
}
// Reset the relationship
o.R.ComplianceReportRequests = nil
o.R.Leads = nil
related, err := o.ComplianceReportRequests(mods...).All(ctx, exec)
related, err := o.Leads(mods...).All(ctx, exec)
if err != nil {
return err
}
@ -1524,17 +1524,17 @@ func (o *Site) LoadComplianceReportRequests(ctx context.Context, exec bob.Execut
rel.R.Site = o
}
o.R.ComplianceReportRequests = related
o.R.Leads = related
return nil
}
// LoadComplianceReportRequests loads the site's ComplianceReportRequests into the .R struct
func (os SiteSlice) LoadComplianceReportRequests(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
// LoadLeads loads the site's Leads into the .R struct
func (os SiteSlice) LoadLeads(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
if len(os) == 0 {
return nil
}
complianceReportRequests, err := os.ComplianceReportRequests(mods...).All(ctx, exec)
leads, err := os.Leads(mods...).All(ctx, exec)
if err != nil {
return err
}
@ -1544,7 +1544,7 @@ func (os SiteSlice) LoadComplianceReportRequests(ctx context.Context, exec bob.E
continue
}
o.R.ComplianceReportRequests = nil
o.R.Leads = nil
}
for _, o := range os {
@ -1552,19 +1552,25 @@ func (os SiteSlice) LoadComplianceReportRequests(ctx context.Context, exec bob.E
continue
}
for _, rel := range complianceReportRequests {
for _, rel := range leads {
if !(o.ID == rel.SiteID) {
if !rel.SiteID.IsValue() {
continue
}
if !(rel.SiteID.IsValue() && o.ID == rel.SiteID.MustGet()) {
continue
}
if !(o.Version == rel.SiteVersion) {
if !rel.SiteVersion.IsValue() {
continue
}
if !(rel.SiteVersion.IsValue() && o.Version == rel.SiteVersion.MustGet()) {
continue
}
rel.R.Site = o
o.R.ComplianceReportRequests = append(o.R.ComplianceReportRequests, rel)
o.R.Leads = append(o.R.Leads, rel)
}
}
@ -1914,9 +1920,9 @@ func (os SiteSlice) LoadParcel(ctx context.Context, exec bob.Executor, mods ...b
// siteC is where relationship counts are stored.
type siteC struct {
ComplianceReportRequests *int64
Pools *int64
Residents *int64
Leads *int64
Pools *int64
Residents *int64
}
// PreloadCount sets a count in the C struct by name
@ -1926,8 +1932,8 @@ func (o *Site) PreloadCount(name string, count int64) error {
}
switch name {
case "ComplianceReportRequests":
o.C.ComplianceReportRequests = &count
case "Leads":
o.C.Leads = &count
case "Pools":
o.C.Pools = &count
case "Residents":
@ -1937,15 +1943,15 @@ func (o *Site) PreloadCount(name string, count int64) error {
}
type siteCountPreloader struct {
ComplianceReportRequests func(...bob.Mod[*dialect.SelectQuery]) psql.Preloader
Pools func(...bob.Mod[*dialect.SelectQuery]) psql.Preloader
Residents func(...bob.Mod[*dialect.SelectQuery]) psql.Preloader
Leads func(...bob.Mod[*dialect.SelectQuery]) psql.Preloader
Pools func(...bob.Mod[*dialect.SelectQuery]) psql.Preloader
Residents func(...bob.Mod[*dialect.SelectQuery]) psql.Preloader
}
func buildSiteCountPreloader() siteCountPreloader {
return siteCountPreloader{
ComplianceReportRequests: func(mods ...bob.Mod[*dialect.SelectQuery]) psql.Preloader {
return countPreloader[*Site]("ComplianceReportRequests", func(parent string) bob.Expression {
Leads: func(mods ...bob.Mod[*dialect.SelectQuery]) psql.Preloader {
return countPreloader[*Site]("Leads", func(parent string) bob.Expression {
// Build a correlated subquery: (SELECT COUNT(*) FROM related WHERE fk = parent.pk)
if parent == "" {
parent = Sites.Alias()
@ -1954,9 +1960,9 @@ func buildSiteCountPreloader() siteCountPreloader {
subqueryMods := []bob.Mod[*dialect.SelectQuery]{
sm.Columns(psql.Raw("count(*)")),
sm.From(ComplianceReportRequests.Name()),
sm.Where(psql.Quote(ComplianceReportRequests.Alias(), "site_id").EQ(psql.Quote(parent, "id"))),
sm.Where(psql.Quote(ComplianceReportRequests.Alias(), "site_version").EQ(psql.Quote(parent, "version"))),
sm.From(Leads.Name()),
sm.Where(psql.Quote(Leads.Alias(), "site_id").EQ(psql.Quote(parent, "id"))),
sm.Where(psql.Quote(Leads.Alias(), "site_version").EQ(psql.Quote(parent, "version"))),
}
subqueryMods = append(subqueryMods, mods...)
return psql.Group(psql.Select(subqueryMods...).Expression)
@ -2002,14 +2008,14 @@ func buildSiteCountPreloader() siteCountPreloader {
}
type siteCountThenLoader[Q orm.Loadable] struct {
ComplianceReportRequests func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Pools func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Residents func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Leads func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Pools func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
Residents func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
}
func buildSiteCountThenLoader[Q orm.Loadable]() siteCountThenLoader[Q] {
type ComplianceReportRequestsCountInterface interface {
LoadCountComplianceReportRequests(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
type LeadsCountInterface interface {
LoadCountLeads(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
}
type PoolsCountInterface interface {
LoadCountPools(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
@ -2019,10 +2025,10 @@ func buildSiteCountThenLoader[Q orm.Loadable]() siteCountThenLoader[Q] {
}
return siteCountThenLoader[Q]{
ComplianceReportRequests: countThenLoadBuilder[Q](
"ComplianceReportRequests",
func(ctx context.Context, exec bob.Executor, retrieved ComplianceReportRequestsCountInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
return retrieved.LoadCountComplianceReportRequests(ctx, exec, mods...)
Leads: countThenLoadBuilder[Q](
"Leads",
func(ctx context.Context, exec bob.Executor, retrieved LeadsCountInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
return retrieved.LoadCountLeads(ctx, exec, mods...)
},
),
Pools: countThenLoadBuilder[Q](
@ -2040,29 +2046,29 @@ func buildSiteCountThenLoader[Q orm.Loadable]() siteCountThenLoader[Q] {
}
}
// LoadCountComplianceReportRequests loads the count of ComplianceReportRequests into the C struct
func (o *Site) LoadCountComplianceReportRequests(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
// LoadCountLeads loads the count of Leads into the C struct
func (o *Site) LoadCountLeads(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
if o == nil {
return nil
}
count, err := o.ComplianceReportRequests(mods...).Count(ctx, exec)
count, err := o.Leads(mods...).Count(ctx, exec)
if err != nil {
return err
}
o.C.ComplianceReportRequests = &count
o.C.Leads = &count
return nil
}
// LoadCountComplianceReportRequests loads the count of ComplianceReportRequests for a slice
func (os SiteSlice) LoadCountComplianceReportRequests(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
// LoadCountLeads loads the count of Leads for a slice
func (os SiteSlice) LoadCountLeads(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
if len(os) == 0 {
return nil
}
for _, o := range os {
if err := o.LoadCountComplianceReportRequests(ctx, exec, mods...); err != nil {
if err := o.LoadCountLeads(ctx, exec, mods...); err != nil {
return err
}
}
@ -2131,14 +2137,14 @@ func (os SiteSlice) LoadCountResidents(ctx context.Context, exec bob.Executor, m
}
type siteJoins[Q dialect.Joinable] struct {
typ string
ComplianceReportRequests modAs[Q, complianceReportRequestColumns]
Pools modAs[Q, poolColumns]
Residents modAs[Q, residentColumns]
Address modAs[Q, addressColumns]
CreatorUser modAs[Q, userColumns]
File modAs[Q, fileuploadFileColumns]
Parcel modAs[Q, parcelColumns]
typ string
Leads modAs[Q, leadColumns]
Pools modAs[Q, poolColumns]
Residents modAs[Q, residentColumns]
Address modAs[Q, addressColumns]
CreatorUser modAs[Q, userColumns]
File modAs[Q, fileuploadFileColumns]
Parcel modAs[Q, parcelColumns]
}
func (j siteJoins[Q]) aliasedAs(alias string) siteJoins[Q] {
@ -2148,13 +2154,13 @@ func (j siteJoins[Q]) aliasedAs(alias string) siteJoins[Q] {
func buildSiteJoins[Q dialect.Joinable](cols siteColumns, typ string) siteJoins[Q] {
return siteJoins[Q]{
typ: typ,
ComplianceReportRequests: modAs[Q, complianceReportRequestColumns]{
c: ComplianceReportRequests.Columns,
f: func(to complianceReportRequestColumns) bob.Mod[Q] {
Leads: modAs[Q, leadColumns]{
c: Leads.Columns,
f: func(to leadColumns) bob.Mod[Q] {
mods := make(mods.QueryMods[Q], 0, 1)
{
mods = append(mods, dialect.Join[Q](typ, ComplianceReportRequests.Name().As(to.Alias())).On(
mods = append(mods, dialect.Join[Q](typ, Leads.Name().As(to.Alias())).On(
to.SiteID.EQ(cols.ID), to.SiteVersion.EQ(cols.Version),
))
}