Rework mailer database schema, add UUID to mailers
At this point, I sent out our first test mailers for Delta.
This commit is contained in:
parent
a7bb6181c7
commit
a0eee3a95f
24 changed files with 2662 additions and 247 deletions
17
db/dberrors/compliance_report_request_mailer.bob.go
Normal file
17
db/dberrors/compliance_report_request_mailer.bob.go
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
// Code generated by BobGen psql v0.42.5. DO NOT EDIT.
|
||||
// This file is meant to be re-generated in place and/or deleted at any time.
|
||||
|
||||
package dberrors
|
||||
|
||||
var ComplianceReportRequestMailerErrors = &complianceReportRequestMailerErrors{
|
||||
ErrUniqueComplianceReportRequestMaiComplianceReportRequestId_Key: &UniqueConstraintError{
|
||||
schema: "",
|
||||
table: "compliance_report_request_mailer",
|
||||
columns: []string{"compliance_report_request_id", "mailer_id"},
|
||||
s: "compliance_report_request_mai_compliance_report_request_id__key",
|
||||
},
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerErrors struct {
|
||||
ErrUniqueComplianceReportRequestMaiComplianceReportRequestId_Key *UniqueConstraintError
|
||||
}
|
||||
|
|
@ -161,6 +161,23 @@ var Addresses = Table[
|
|||
Where: "",
|
||||
Include: []string{},
|
||||
},
|
||||
IdxAddressGeom: index{
|
||||
Type: "gist",
|
||||
Name: "idx_address_geom",
|
||||
Columns: []indexColumn{
|
||||
{
|
||||
Name: "geom",
|
||||
Desc: null.FromCond(false, true),
|
||||
IsExpression: false,
|
||||
},
|
||||
},
|
||||
Unique: false,
|
||||
Comment: "",
|
||||
NullsFirst: []bool{false},
|
||||
NullsDistinct: false,
|
||||
Where: "",
|
||||
Include: []string{},
|
||||
},
|
||||
},
|
||||
PrimaryKey: &constraint{
|
||||
Name: "address_pkey",
|
||||
|
|
@ -201,11 +218,12 @@ func (c addressColumns) AsSlice() []column {
|
|||
type addressIndexes struct {
|
||||
AddressPkey index
|
||||
AddressCountryLocalityUnitNumberStreetKey index
|
||||
IdxAddressGeom index
|
||||
}
|
||||
|
||||
func (i addressIndexes) AsSlice() []index {
|
||||
return []index{
|
||||
i.AddressPkey, i.AddressCountryLocalityUnitNumberStreetKey,
|
||||
i.AddressPkey, i.AddressCountryLocalityUnitNumberStreetKey, i.IdxAddressGeom,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,15 @@ var CommsMailers = Table[
|
|||
Schema: "comms",
|
||||
Name: "mailer",
|
||||
Columns: commsMailerColumns{
|
||||
AddressID: column{
|
||||
Name: "address_id",
|
||||
DBType: "integer",
|
||||
Default: "",
|
||||
Comment: "",
|
||||
Nullable: false,
|
||||
Generated: false,
|
||||
AutoIncr: false,
|
||||
},
|
||||
Created: column{
|
||||
Name: "created",
|
||||
DBType: "timestamp without time zone",
|
||||
|
|
@ -33,9 +42,18 @@ var CommsMailers = Table[
|
|||
Generated: false,
|
||||
AutoIncr: false,
|
||||
},
|
||||
Type: column{
|
||||
Name: "type_",
|
||||
DBType: "comms.mailertype",
|
||||
Recipient: column{
|
||||
Name: "recipient",
|
||||
DBType: "text",
|
||||
Default: "",
|
||||
Comment: "",
|
||||
Nullable: false,
|
||||
Generated: false,
|
||||
AutoIncr: false,
|
||||
},
|
||||
UUID: column{
|
||||
Name: "uuid",
|
||||
DBType: "uuid",
|
||||
Default: "",
|
||||
Comment: "",
|
||||
Nullable: false,
|
||||
|
|
@ -67,19 +85,32 @@ var CommsMailers = Table[
|
|||
Columns: []string{"id"},
|
||||
Comment: "",
|
||||
},
|
||||
ForeignKeys: commsMailerForeignKeys{
|
||||
CommsMailerMailerAddressIDFkey: foreignKey{
|
||||
constraint: constraint{
|
||||
Name: "comms.mailer.mailer_address_id_fkey",
|
||||
Columns: []string{"address_id"},
|
||||
Comment: "",
|
||||
},
|
||||
ForeignTable: "address",
|
||||
ForeignColumns: []string{"id"},
|
||||
},
|
||||
},
|
||||
|
||||
Comment: "",
|
||||
}
|
||||
|
||||
type commsMailerColumns struct {
|
||||
Created column
|
||||
ID column
|
||||
Type column
|
||||
AddressID column
|
||||
Created column
|
||||
ID column
|
||||
Recipient column
|
||||
UUID column
|
||||
}
|
||||
|
||||
func (c commsMailerColumns) AsSlice() []column {
|
||||
return []column{
|
||||
c.Created, c.ID, c.Type,
|
||||
c.AddressID, c.Created, c.ID, c.Recipient, c.UUID,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -93,10 +124,14 @@ func (i commsMailerIndexes) AsSlice() []index {
|
|||
}
|
||||
}
|
||||
|
||||
type commsMailerForeignKeys struct{}
|
||||
type commsMailerForeignKeys struct {
|
||||
CommsMailerMailerAddressIDFkey foreignKey
|
||||
}
|
||||
|
||||
func (f commsMailerForeignKeys) AsSlice() []foreignKey {
|
||||
return []foreignKey{}
|
||||
return []foreignKey{
|
||||
f.CommsMailerMailerAddressIDFkey,
|
||||
}
|
||||
}
|
||||
|
||||
type commsMailerUniques struct{}
|
||||
|
|
|
|||
139
db/dbinfo/compliance_report_request_mailer.bob.go
Normal file
139
db/dbinfo/compliance_report_request_mailer.bob.go
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
// Code generated by BobGen psql v0.42.5. DO NOT EDIT.
|
||||
// This file is meant to be re-generated in place and/or deleted at any time.
|
||||
|
||||
package dbinfo
|
||||
|
||||
import "github.com/aarondl/opt/null"
|
||||
|
||||
var ComplianceReportRequestMailers = Table[
|
||||
complianceReportRequestMailerColumns,
|
||||
complianceReportRequestMailerIndexes,
|
||||
complianceReportRequestMailerForeignKeys,
|
||||
complianceReportRequestMailerUniques,
|
||||
complianceReportRequestMailerChecks,
|
||||
]{
|
||||
Schema: "",
|
||||
Name: "compliance_report_request_mailer",
|
||||
Columns: complianceReportRequestMailerColumns{
|
||||
ComplianceReportRequestID: column{
|
||||
Name: "compliance_report_request_id",
|
||||
DBType: "integer",
|
||||
Default: "",
|
||||
Comment: "",
|
||||
Nullable: false,
|
||||
Generated: false,
|
||||
AutoIncr: false,
|
||||
},
|
||||
MailerID: column{
|
||||
Name: "mailer_id",
|
||||
DBType: "integer",
|
||||
Default: "",
|
||||
Comment: "",
|
||||
Nullable: false,
|
||||
Generated: false,
|
||||
AutoIncr: false,
|
||||
},
|
||||
},
|
||||
Indexes: complianceReportRequestMailerIndexes{
|
||||
ComplianceReportRequestMaiComplianceReportRequestIDKey: index{
|
||||
Type: "btree",
|
||||
Name: "compliance_report_request_mai_compliance_report_request_id__key",
|
||||
Columns: []indexColumn{
|
||||
{
|
||||
Name: "compliance_report_request_id",
|
||||
Desc: null.FromCond(false, true),
|
||||
IsExpression: false,
|
||||
},
|
||||
{
|
||||
Name: "mailer_id",
|
||||
Desc: null.FromCond(false, true),
|
||||
IsExpression: false,
|
||||
},
|
||||
},
|
||||
Unique: true,
|
||||
Comment: "",
|
||||
NullsFirst: []bool{false, false},
|
||||
NullsDistinct: false,
|
||||
Where: "",
|
||||
Include: []string{},
|
||||
},
|
||||
},
|
||||
|
||||
ForeignKeys: complianceReportRequestMailerForeignKeys{
|
||||
ComplianceReportRequestMailerComplianceReportRequestMaiComplianceReportRequestIDFkey: foreignKey{
|
||||
constraint: constraint{
|
||||
Name: "compliance_report_request_mailer.compliance_report_request_mai_compliance_report_request_id_fkey",
|
||||
Columns: []string{"compliance_report_request_id"},
|
||||
Comment: "",
|
||||
},
|
||||
ForeignTable: "compliance_report_request",
|
||||
ForeignColumns: []string{"id"},
|
||||
},
|
||||
ComplianceReportRequestMailerComplianceReportRequestMailerMailerIDFkey: foreignKey{
|
||||
constraint: constraint{
|
||||
Name: "compliance_report_request_mailer.compliance_report_request_mailer_mailer_id_fkey",
|
||||
Columns: []string{"mailer_id"},
|
||||
Comment: "",
|
||||
},
|
||||
ForeignTable: "comms.mailer",
|
||||
ForeignColumns: []string{"id"},
|
||||
},
|
||||
},
|
||||
Uniques: complianceReportRequestMailerUniques{
|
||||
ComplianceReportRequestMaiComplianceReportRequestIDKey: constraint{
|
||||
Name: "compliance_report_request_mai_compliance_report_request_id__key",
|
||||
Columns: []string{"compliance_report_request_id", "mailer_id"},
|
||||
Comment: "",
|
||||
},
|
||||
},
|
||||
|
||||
Comment: "",
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerColumns struct {
|
||||
ComplianceReportRequestID column
|
||||
MailerID column
|
||||
}
|
||||
|
||||
func (c complianceReportRequestMailerColumns) AsSlice() []column {
|
||||
return []column{
|
||||
c.ComplianceReportRequestID, c.MailerID,
|
||||
}
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerIndexes struct {
|
||||
ComplianceReportRequestMaiComplianceReportRequestIDKey index
|
||||
}
|
||||
|
||||
func (i complianceReportRequestMailerIndexes) AsSlice() []index {
|
||||
return []index{
|
||||
i.ComplianceReportRequestMaiComplianceReportRequestIDKey,
|
||||
}
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerForeignKeys struct {
|
||||
ComplianceReportRequestMailerComplianceReportRequestMaiComplianceReportRequestIDFkey foreignKey
|
||||
ComplianceReportRequestMailerComplianceReportRequestMailerMailerIDFkey foreignKey
|
||||
}
|
||||
|
||||
func (f complianceReportRequestMailerForeignKeys) AsSlice() []foreignKey {
|
||||
return []foreignKey{
|
||||
f.ComplianceReportRequestMailerComplianceReportRequestMaiComplianceReportRequestIDFkey, f.ComplianceReportRequestMailerComplianceReportRequestMailerMailerIDFkey,
|
||||
}
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerUniques struct {
|
||||
ComplianceReportRequestMaiComplianceReportRequestIDKey constraint
|
||||
}
|
||||
|
||||
func (u complianceReportRequestMailerUniques) AsSlice() []constraint {
|
||||
return []constraint{
|
||||
u.ComplianceReportRequestMaiComplianceReportRequestIDKey,
|
||||
}
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerChecks struct{}
|
||||
|
||||
func (c complianceReportRequestMailerChecks) AsSlice() []check {
|
||||
return []check{}
|
||||
}
|
||||
|
|
@ -70,6 +70,23 @@ var Parcels = Table[
|
|||
Where: "",
|
||||
Include: []string{},
|
||||
},
|
||||
IdxParcelGeometry: index{
|
||||
Type: "gist",
|
||||
Name: "idx_parcel_geometry",
|
||||
Columns: []indexColumn{
|
||||
{
|
||||
Name: "geometry",
|
||||
Desc: null.FromCond(false, true),
|
||||
IsExpression: false,
|
||||
},
|
||||
},
|
||||
Unique: false,
|
||||
Comment: "",
|
||||
NullsFirst: []bool{false},
|
||||
NullsDistinct: false,
|
||||
Where: "",
|
||||
Include: []string{},
|
||||
},
|
||||
},
|
||||
PrimaryKey: &constraint{
|
||||
Name: "parcel_pkey",
|
||||
|
|
@ -94,12 +111,13 @@ func (c parcelColumns) AsSlice() []column {
|
|||
}
|
||||
|
||||
type parcelIndexes struct {
|
||||
ParcelPkey index
|
||||
ParcelPkey index
|
||||
IdxParcelGeometry index
|
||||
}
|
||||
|
||||
func (i parcelIndexes) AsSlice() []index {
|
||||
return []index{
|
||||
i.ParcelPkey,
|
||||
i.ParcelPkey, i.IdxParcelGeometry,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -457,76 +457,6 @@ func (e *Audiodatatype) Scan(value any) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Enum values for CommsMailertype
|
||||
const (
|
||||
CommsMailertypeGreenPool CommsMailertype = "green-pool"
|
||||
)
|
||||
|
||||
func AllCommsMailertype() []CommsMailertype {
|
||||
return []CommsMailertype{
|
||||
CommsMailertypeGreenPool,
|
||||
}
|
||||
}
|
||||
|
||||
type CommsMailertype string
|
||||
|
||||
func (e CommsMailertype) String() string {
|
||||
return string(e)
|
||||
}
|
||||
|
||||
func (e CommsMailertype) Valid() bool {
|
||||
switch e {
|
||||
case CommsMailertypeGreenPool:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// useful when testing in other packages
|
||||
func (e CommsMailertype) All() []CommsMailertype {
|
||||
return AllCommsMailertype()
|
||||
}
|
||||
|
||||
func (e CommsMailertype) MarshalText() ([]byte, error) {
|
||||
return []byte(e), nil
|
||||
}
|
||||
|
||||
func (e *CommsMailertype) UnmarshalText(text []byte) error {
|
||||
return e.Scan(text)
|
||||
}
|
||||
|
||||
func (e CommsMailertype) MarshalBinary() ([]byte, error) {
|
||||
return []byte(e), nil
|
||||
}
|
||||
|
||||
func (e *CommsMailertype) UnmarshalBinary(data []byte) error {
|
||||
return e.Scan(data)
|
||||
}
|
||||
|
||||
func (e CommsMailertype) Value() (driver.Value, error) {
|
||||
return string(e), nil
|
||||
}
|
||||
|
||||
func (e *CommsMailertype) Scan(value any) error {
|
||||
switch x := value.(type) {
|
||||
case string:
|
||||
*e = CommsMailertype(x)
|
||||
case []byte:
|
||||
*e = CommsMailertype(x)
|
||||
case nil:
|
||||
return fmt.Errorf("cannot nil into CommsMailertype")
|
||||
default:
|
||||
return fmt.Errorf("cannot scan type %T: %v", value, value)
|
||||
}
|
||||
|
||||
if !e.Valid() {
|
||||
return fmt.Errorf("invalid CommsMailertype value: %s", *e)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Enum values for CommsMessagetypeemail
|
||||
const (
|
||||
CommsMessagetypeemailInitialContact CommsMessagetypeemail = "initial-contact"
|
||||
|
|
|
|||
|
|
@ -54,10 +54,15 @@ type AddressTemplate struct {
|
|||
}
|
||||
|
||||
type addressR struct {
|
||||
Mailers []*addressRMailersR
|
||||
Residents []*addressRResidentsR
|
||||
Site *addressRSiteR
|
||||
}
|
||||
|
||||
type addressRMailersR struct {
|
||||
number int
|
||||
o *CommsMailerTemplate
|
||||
}
|
||||
type addressRResidentsR struct {
|
||||
number int
|
||||
o *ResidentTemplate
|
||||
|
|
@ -76,6 +81,19 @@ func (o *AddressTemplate) Apply(ctx context.Context, mods ...AddressMod) {
|
|||
// setModelRels creates and sets the relationships on *models.Address
|
||||
// according to the relationships in the template. Nothing is inserted into the db
|
||||
func (t AddressTemplate) setModelRels(o *models.Address) {
|
||||
if t.r.Mailers != nil {
|
||||
rel := models.CommsMailerSlice{}
|
||||
for _, r := range t.r.Mailers {
|
||||
related := r.o.BuildMany(r.number)
|
||||
for _, rel := range related {
|
||||
rel.AddressID = o.ID // h2
|
||||
rel.R.Address = o
|
||||
}
|
||||
rel = append(rel, related...)
|
||||
}
|
||||
o.R.Mailers = rel
|
||||
}
|
||||
|
||||
if t.r.Residents != nil {
|
||||
rel := models.ResidentSlice{}
|
||||
for _, r := range t.r.Residents {
|
||||
|
|
@ -258,6 +276,26 @@ func ensureCreatableAddress(m *models.AddressSetter) {
|
|||
func (o *AddressTemplate) insertOptRels(ctx context.Context, exec bob.Executor, m *models.Address) error {
|
||||
var err error
|
||||
|
||||
isMailersDone, _ := addressRelMailersCtx.Value(ctx)
|
||||
if !isMailersDone && o.r.Mailers != nil {
|
||||
ctx = addressRelMailersCtx.WithValue(ctx, true)
|
||||
for _, r := range o.r.Mailers {
|
||||
if r.o.alreadyPersisted {
|
||||
m.R.Mailers = append(m.R.Mailers, r.o.Build())
|
||||
} else {
|
||||
rel0, err := r.o.CreateMany(ctx, exec, r.number)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = m.AttachMailers(ctx, exec, rel0...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isResidentsDone, _ := addressRelResidentsCtx.Value(ctx)
|
||||
if !isResidentsDone && o.r.Residents != nil {
|
||||
ctx = addressRelResidentsCtx.WithValue(ctx, true)
|
||||
|
|
@ -265,12 +303,12 @@ func (o *AddressTemplate) insertOptRels(ctx context.Context, exec bob.Executor,
|
|||
if r.o.alreadyPersisted {
|
||||
m.R.Residents = append(m.R.Residents, r.o.Build())
|
||||
} else {
|
||||
rel0, err := r.o.CreateMany(ctx, exec, r.number)
|
||||
rel1, err := r.o.CreateMany(ctx, exec, r.number)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = m.AttachResidents(ctx, exec, rel0...)
|
||||
err = m.AttachResidents(ctx, exec, rel1...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -284,12 +322,12 @@ func (o *AddressTemplate) insertOptRels(ctx context.Context, exec bob.Executor,
|
|||
if o.r.Site.o.alreadyPersisted {
|
||||
m.R.Site = o.r.Site.o.Build()
|
||||
} else {
|
||||
var rel1 *models.Site
|
||||
rel1, err = o.r.Site.o.Create(ctx, exec)
|
||||
var rel2 *models.Site
|
||||
rel2, err = o.r.Site.o.Create(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = m.AttachSite(ctx, exec, rel1)
|
||||
err = m.AttachSite(ctx, exec, rel2)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -756,6 +794,54 @@ func (m addressMods) WithoutSite() AddressMod {
|
|||
})
|
||||
}
|
||||
|
||||
func (m addressMods) WithMailers(number int, related *CommsMailerTemplate) AddressMod {
|
||||
return AddressModFunc(func(ctx context.Context, o *AddressTemplate) {
|
||||
o.r.Mailers = []*addressRMailersR{{
|
||||
number: number,
|
||||
o: related,
|
||||
}}
|
||||
})
|
||||
}
|
||||
|
||||
func (m addressMods) WithNewMailers(number int, mods ...CommsMailerMod) AddressMod {
|
||||
return AddressModFunc(func(ctx context.Context, o *AddressTemplate) {
|
||||
related := o.f.NewCommsMailerWithContext(ctx, mods...)
|
||||
m.WithMailers(number, related).Apply(ctx, o)
|
||||
})
|
||||
}
|
||||
|
||||
func (m addressMods) AddMailers(number int, related *CommsMailerTemplate) AddressMod {
|
||||
return AddressModFunc(func(ctx context.Context, o *AddressTemplate) {
|
||||
o.r.Mailers = append(o.r.Mailers, &addressRMailersR{
|
||||
number: number,
|
||||
o: related,
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func (m addressMods) AddNewMailers(number int, mods ...CommsMailerMod) AddressMod {
|
||||
return AddressModFunc(func(ctx context.Context, o *AddressTemplate) {
|
||||
related := o.f.NewCommsMailerWithContext(ctx, mods...)
|
||||
m.AddMailers(number, related).Apply(ctx, o)
|
||||
})
|
||||
}
|
||||
|
||||
func (m addressMods) AddExistingMailers(existingModels ...*models.CommsMailer) AddressMod {
|
||||
return AddressModFunc(func(ctx context.Context, o *AddressTemplate) {
|
||||
for _, em := range existingModels {
|
||||
o.r.Mailers = append(o.r.Mailers, &addressRMailersR{
|
||||
o: o.f.FromExistingCommsMailer(em),
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (m addressMods) WithoutMailers() AddressMod {
|
||||
return AddressModFunc(func(ctx context.Context, o *AddressTemplate) {
|
||||
o.r.Mailers = nil
|
||||
})
|
||||
}
|
||||
|
||||
func (m addressMods) WithResidents(number int, related *ResidentTemplate) AddressMod {
|
||||
return AddressModFunc(func(ctx context.Context, o *AddressTemplate) {
|
||||
o.r.Residents = []*addressRResidentsR{{
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ type contextKey string
|
|||
var (
|
||||
// Relationship Contexts for address
|
||||
addressWithParentsCascadingCtx = newContextual[bool]("addressWithParentsCascading")
|
||||
addressRelMailersCtx = newContextual[bool]("address.comms.mailer.comms.mailer.mailer_address_id_fkey")
|
||||
addressRelResidentsCtx = newContextual[bool]("address.resident.resident.resident_address_id_fkey")
|
||||
addressRelSiteCtx = newContextual[bool]("address.site.site.site_address_id_fkey")
|
||||
|
||||
|
|
@ -84,7 +85,9 @@ var (
|
|||
commsEmailTemplateRelTemplateEmailLogsCtx = newContextual[bool]("comms.email_log.comms.email_template.comms.email_log.email_log_template_id_fkey")
|
||||
|
||||
// Relationship Contexts for comms.mailer
|
||||
commsMailerWithParentsCascadingCtx = newContextual[bool]("commsMailerWithParentsCascading")
|
||||
commsMailerWithParentsCascadingCtx = newContextual[bool]("commsMailerWithParentsCascading")
|
||||
commsMailerRelAddressCtx = newContextual[bool]("address.comms.mailer.comms.mailer.mailer_address_id_fkey")
|
||||
commsMailerRelComplianceReportRequestsCtx = newContextual[bool]("comms.mailer.compliance_report_request.compliance_report_request_mailer.compliance_report_request_mai_compliance_report_request_id_fkeycompliance_report_request_mailer.compliance_report_request_mailer_mailer_id_fkey")
|
||||
|
||||
// Relationship Contexts for comms.phone
|
||||
commsPhoneWithParentsCascadingCtx = newContextual[bool]("commsPhoneWithParentsCascading")
|
||||
|
|
@ -112,6 +115,12 @@ var (
|
|||
complianceReportRequestWithParentsCascadingCtx = newContextual[bool]("complianceReportRequestWithParentsCascading")
|
||||
complianceReportRequestRelCreatorUserCtx = newContextual[bool]("compliance_report_request.user_.compliance_report_request.compliance_report_request_creator_fkey")
|
||||
complianceReportRequestRelSiteCtx = newContextual[bool]("compliance_report_request.site.compliance_report_request.compliance_report_request_site_id_site_version_fkey")
|
||||
complianceReportRequestRelMailersCtx = newContextual[bool]("comms.mailer.compliance_report_request.compliance_report_request_mailer.compliance_report_request_mai_compliance_report_request_id_fkeycompliance_report_request_mailer.compliance_report_request_mailer_mailer_id_fkey")
|
||||
|
||||
// Relationship Contexts for compliance_report_request_mailer
|
||||
complianceReportRequestMailerWithParentsCascadingCtx = newContextual[bool]("complianceReportRequestMailerWithParentsCascading")
|
||||
complianceReportRequestMailerRelComplianceReportRequestCtx = newContextual[bool]("compliance_report_request.compliance_report_request_mailer.compliance_report_request_mailer.compliance_report_request_mai_compliance_report_request_id_fkey")
|
||||
complianceReportRequestMailerRelMailerCtx = newContextual[bool]("comms.mailer.compliance_report_request_mailer.compliance_report_request_mailer.compliance_report_request_mailer_mailer_id_fkey")
|
||||
|
||||
// Relationship Contexts for district_subscription_email
|
||||
districtSubscriptionEmailWithParentsCascadingCtx = newContextual[bool]("districtSubscriptionEmailWithParentsCascading")
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ type Factory struct {
|
|||
baseCommsTextJobMods CommsTextJobModSlice
|
||||
baseCommsTextLogMods CommsTextLogModSlice
|
||||
baseComplianceReportRequestMods ComplianceReportRequestModSlice
|
||||
baseComplianceReportRequestMailerMods ComplianceReportRequestMailerModSlice
|
||||
baseDistrictSubscriptionEmailMods DistrictSubscriptionEmailModSlice
|
||||
baseDistrictSubscriptionPhoneMods DistrictSubscriptionPhoneModSlice
|
||||
baseFieldseekerContainerrelateMods FieldseekerContainerrelateModSlice
|
||||
|
|
@ -147,6 +148,9 @@ func (f *Factory) FromExistingAddress(m *models.Address) *AddressTemplate {
|
|||
o.Unit = func() string { return m.Unit }
|
||||
|
||||
ctx := context.Background()
|
||||
if len(m.R.Mailers) > 0 {
|
||||
AddressMods.AddExistingMailers(m.R.Mailers...).Apply(ctx, o)
|
||||
}
|
||||
if len(m.R.Residents) > 0 {
|
||||
AddressMods.AddExistingResidents(m.R.Residents...).Apply(ctx, o)
|
||||
}
|
||||
|
|
@ -680,9 +684,19 @@ func (f *Factory) NewCommsMailerWithContext(ctx context.Context, mods ...CommsMa
|
|||
func (f *Factory) FromExistingCommsMailer(m *models.CommsMailer) *CommsMailerTemplate {
|
||||
o := &CommsMailerTemplate{f: f, alreadyPersisted: true}
|
||||
|
||||
o.AddressID = func() int32 { return m.AddressID }
|
||||
o.Created = func() time.Time { return m.Created }
|
||||
o.ID = func() int32 { return m.ID }
|
||||
o.Type = func() enums.CommsMailertype { return m.Type }
|
||||
o.Recipient = func() string { return m.Recipient }
|
||||
o.UUID = func() uuid.UUID { return m.UUID }
|
||||
|
||||
ctx := context.Background()
|
||||
if m.R.Address != nil {
|
||||
CommsMailerMods.WithExistingAddress(m.R.Address).Apply(ctx, o)
|
||||
}
|
||||
if len(m.R.ComplianceReportRequests) > 0 {
|
||||
CommsMailerMods.AddExistingComplianceReportRequests(m.R.ComplianceReportRequests...).Apply(ctx, o)
|
||||
}
|
||||
|
||||
return o
|
||||
}
|
||||
|
|
@ -854,6 +868,42 @@ func (f *Factory) FromExistingComplianceReportRequest(m *models.ComplianceReport
|
|||
if m.R.Site != nil {
|
||||
ComplianceReportRequestMods.WithExistingSite(m.R.Site).Apply(ctx, o)
|
||||
}
|
||||
if len(m.R.Mailers) > 0 {
|
||||
ComplianceReportRequestMods.AddExistingMailers(m.R.Mailers...).Apply(ctx, o)
|
||||
}
|
||||
|
||||
return o
|
||||
}
|
||||
|
||||
func (f *Factory) NewComplianceReportRequestMailer(mods ...ComplianceReportRequestMailerMod) *ComplianceReportRequestMailerTemplate {
|
||||
return f.NewComplianceReportRequestMailerWithContext(context.Background(), mods...)
|
||||
}
|
||||
|
||||
func (f *Factory) NewComplianceReportRequestMailerWithContext(ctx context.Context, mods ...ComplianceReportRequestMailerMod) *ComplianceReportRequestMailerTemplate {
|
||||
o := &ComplianceReportRequestMailerTemplate{f: f}
|
||||
|
||||
if f != nil {
|
||||
f.baseComplianceReportRequestMailerMods.Apply(ctx, o)
|
||||
}
|
||||
|
||||
ComplianceReportRequestMailerModSlice(mods).Apply(ctx, o)
|
||||
|
||||
return o
|
||||
}
|
||||
|
||||
func (f *Factory) FromExistingComplianceReportRequestMailer(m *models.ComplianceReportRequestMailer) *ComplianceReportRequestMailerTemplate {
|
||||
o := &ComplianceReportRequestMailerTemplate{f: f, alreadyPersisted: true}
|
||||
|
||||
o.ComplianceReportRequestID = func() int32 { return m.ComplianceReportRequestID }
|
||||
o.MailerID = func() int32 { return m.MailerID }
|
||||
|
||||
ctx := context.Background()
|
||||
if m.R.ComplianceReportRequest != nil {
|
||||
ComplianceReportRequestMailerMods.WithExistingComplianceReportRequest(m.R.ComplianceReportRequest).Apply(ctx, o)
|
||||
}
|
||||
if m.R.Mailer != nil {
|
||||
ComplianceReportRequestMailerMods.WithExistingMailer(m.R.Mailer).Apply(ctx, o)
|
||||
}
|
||||
|
||||
return o
|
||||
}
|
||||
|
|
@ -4644,6 +4694,14 @@ func (f *Factory) AddBaseComplianceReportRequestMod(mods ...ComplianceReportRequ
|
|||
f.baseComplianceReportRequestMods = append(f.baseComplianceReportRequestMods, mods...)
|
||||
}
|
||||
|
||||
func (f *Factory) ClearBaseComplianceReportRequestMailerMods() {
|
||||
f.baseComplianceReportRequestMailerMods = nil
|
||||
}
|
||||
|
||||
func (f *Factory) AddBaseComplianceReportRequestMailerMod(mods ...ComplianceReportRequestMailerMod) {
|
||||
f.baseComplianceReportRequestMailerMods = append(f.baseComplianceReportRequestMailerMods, mods...)
|
||||
}
|
||||
|
||||
func (f *Factory) ClearBaseDistrictSubscriptionEmailMods() {
|
||||
f.baseDistrictSubscriptionEmailMods = nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -121,16 +121,6 @@ func random_enums_Audiodatatype(f *faker.Faker, limits ...string) enums.Audiodat
|
|||
return all[f.IntBetween(0, len(all)-1)]
|
||||
}
|
||||
|
||||
func random_enums_CommsMailertype(f *faker.Faker, limits ...string) enums.CommsMailertype {
|
||||
if f == nil {
|
||||
f = &defaultFaker
|
||||
}
|
||||
|
||||
var e enums.CommsMailertype
|
||||
all := e.All()
|
||||
return all[f.IntBetween(0, len(all)-1)]
|
||||
}
|
||||
|
||||
func random_enums_CommsMessagetypeemail(f *faker.Faker, limits ...string) enums.CommsMessagetypeemail {
|
||||
if f == nil {
|
||||
f = &defaultFaker
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/Gleipnir-Technology/bob"
|
||||
enums "github.com/Gleipnir-Technology/nidus-sync/db/enums"
|
||||
models "github.com/Gleipnir-Technology/nidus-sync/db/models"
|
||||
"github.com/aarondl/opt/omit"
|
||||
"github.com/google/uuid"
|
||||
"github.com/jaswdr/faker/v2"
|
||||
)
|
||||
|
||||
|
|
@ -36,15 +36,31 @@ func (mods CommsMailerModSlice) Apply(ctx context.Context, n *CommsMailerTemplat
|
|||
// CommsMailerTemplate is an object representing the database table.
|
||||
// all columns are optional and should be set by mods
|
||||
type CommsMailerTemplate struct {
|
||||
Created func() time.Time
|
||||
ID func() int32
|
||||
Type func() enums.CommsMailertype
|
||||
AddressID func() int32
|
||||
Created func() time.Time
|
||||
ID func() int32
|
||||
Recipient func() string
|
||||
UUID func() uuid.UUID
|
||||
|
||||
r commsMailerR
|
||||
f *Factory
|
||||
|
||||
alreadyPersisted bool
|
||||
}
|
||||
|
||||
type commsMailerR struct {
|
||||
Address *commsMailerRAddressR
|
||||
ComplianceReportRequests []*commsMailerRComplianceReportRequestsR
|
||||
}
|
||||
|
||||
type commsMailerRAddressR struct {
|
||||
o *AddressTemplate
|
||||
}
|
||||
type commsMailerRComplianceReportRequestsR struct {
|
||||
number int
|
||||
o *ComplianceReportRequestTemplate
|
||||
}
|
||||
|
||||
// Apply mods to the CommsMailerTemplate
|
||||
func (o *CommsMailerTemplate) Apply(ctx context.Context, mods ...CommsMailerMod) {
|
||||
for _, mod := range mods {
|
||||
|
|
@ -54,13 +70,36 @@ func (o *CommsMailerTemplate) Apply(ctx context.Context, mods ...CommsMailerMod)
|
|||
|
||||
// setModelRels creates and sets the relationships on *models.CommsMailer
|
||||
// according to the relationships in the template. Nothing is inserted into the db
|
||||
func (t CommsMailerTemplate) setModelRels(o *models.CommsMailer) {}
|
||||
func (t CommsMailerTemplate) setModelRels(o *models.CommsMailer) {
|
||||
if t.r.Address != nil {
|
||||
rel := t.r.Address.o.Build()
|
||||
rel.R.Mailers = append(rel.R.Mailers, o)
|
||||
o.AddressID = rel.ID // h2
|
||||
o.R.Address = rel
|
||||
}
|
||||
|
||||
if t.r.ComplianceReportRequests != nil {
|
||||
rel := models.ComplianceReportRequestSlice{}
|
||||
for _, r := range t.r.ComplianceReportRequests {
|
||||
related := r.o.BuildMany(r.number)
|
||||
for _, rel := range related {
|
||||
rel.R.Mailers = append(rel.R.Mailers, o)
|
||||
}
|
||||
rel = append(rel, related...)
|
||||
}
|
||||
o.R.ComplianceReportRequests = rel
|
||||
}
|
||||
}
|
||||
|
||||
// BuildSetter returns an *models.CommsMailerSetter
|
||||
// this does nothing with the relationship templates
|
||||
func (o CommsMailerTemplate) BuildSetter() *models.CommsMailerSetter {
|
||||
m := &models.CommsMailerSetter{}
|
||||
|
||||
if o.AddressID != nil {
|
||||
val := o.AddressID()
|
||||
m.AddressID = omit.From(val)
|
||||
}
|
||||
if o.Created != nil {
|
||||
val := o.Created()
|
||||
m.Created = omit.From(val)
|
||||
|
|
@ -69,9 +108,13 @@ func (o CommsMailerTemplate) BuildSetter() *models.CommsMailerSetter {
|
|||
val := o.ID()
|
||||
m.ID = omit.From(val)
|
||||
}
|
||||
if o.Type != nil {
|
||||
val := o.Type()
|
||||
m.Type = omit.From(val)
|
||||
if o.Recipient != nil {
|
||||
val := o.Recipient()
|
||||
m.Recipient = omit.From(val)
|
||||
}
|
||||
if o.UUID != nil {
|
||||
val := o.UUID()
|
||||
m.UUID = omit.From(val)
|
||||
}
|
||||
|
||||
return m
|
||||
|
|
@ -95,14 +138,20 @@ func (o CommsMailerTemplate) BuildManySetter(number int) []*models.CommsMailerSe
|
|||
func (o CommsMailerTemplate) Build() *models.CommsMailer {
|
||||
m := &models.CommsMailer{}
|
||||
|
||||
if o.AddressID != nil {
|
||||
m.AddressID = o.AddressID()
|
||||
}
|
||||
if o.Created != nil {
|
||||
m.Created = o.Created()
|
||||
}
|
||||
if o.ID != nil {
|
||||
m.ID = o.ID()
|
||||
}
|
||||
if o.Type != nil {
|
||||
m.Type = o.Type()
|
||||
if o.Recipient != nil {
|
||||
m.Recipient = o.Recipient()
|
||||
}
|
||||
if o.UUID != nil {
|
||||
m.UUID = o.UUID()
|
||||
}
|
||||
|
||||
o.setModelRels(m)
|
||||
|
|
@ -124,13 +173,21 @@ func (o CommsMailerTemplate) BuildMany(number int) models.CommsMailerSlice {
|
|||
}
|
||||
|
||||
func ensureCreatableCommsMailer(m *models.CommsMailerSetter) {
|
||||
if !(m.AddressID.IsValue()) {
|
||||
val := random_int32(nil)
|
||||
m.AddressID = omit.From(val)
|
||||
}
|
||||
if !(m.Created.IsValue()) {
|
||||
val := random_time_Time(nil)
|
||||
m.Created = omit.From(val)
|
||||
}
|
||||
if !(m.Type.IsValue()) {
|
||||
val := random_enums_CommsMailertype(nil)
|
||||
m.Type = omit.From(val)
|
||||
if !(m.Recipient.IsValue()) {
|
||||
val := random_string(nil)
|
||||
m.Recipient = omit.From(val)
|
||||
}
|
||||
if !(m.UUID.IsValue()) {
|
||||
val := random_uuid_UUID(nil)
|
||||
m.UUID = omit.From(val)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -150,11 +207,30 @@ func (o *CommsMailerTemplate) Create(ctx context.Context, exec bob.Executor) (*m
|
|||
opt := o.BuildSetter()
|
||||
ensureCreatableCommsMailer(opt)
|
||||
|
||||
if o.r.Address == nil {
|
||||
CommsMailerMods.WithNewAddress().Apply(ctx, o)
|
||||
}
|
||||
|
||||
var rel0 *models.Address
|
||||
|
||||
if o.r.Address.o.alreadyPersisted {
|
||||
rel0 = o.r.Address.o.Build()
|
||||
} else {
|
||||
rel0, err = o.r.Address.o.Create(ctx, exec)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
opt.AddressID = omit.From(rel0.ID)
|
||||
|
||||
m, err := models.CommsMailers.Insert(opt).One(ctx, exec)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
m.R.Address = rel0
|
||||
|
||||
if err := o.insertOptRels(ctx, exec, m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -232,12 +308,45 @@ type commsMailerMods struct{}
|
|||
|
||||
func (m commsMailerMods) RandomizeAllColumns(f *faker.Faker) CommsMailerMod {
|
||||
return CommsMailerModSlice{
|
||||
CommsMailerMods.RandomAddressID(f),
|
||||
CommsMailerMods.RandomCreated(f),
|
||||
CommsMailerMods.RandomID(f),
|
||||
CommsMailerMods.RandomType(f),
|
||||
CommsMailerMods.RandomRecipient(f),
|
||||
CommsMailerMods.RandomUUID(f),
|
||||
}
|
||||
}
|
||||
|
||||
// Set the model columns to this value
|
||||
func (m commsMailerMods) AddressID(val int32) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
o.AddressID = func() int32 { return val }
|
||||
})
|
||||
}
|
||||
|
||||
// Set the Column from the function
|
||||
func (m commsMailerMods) AddressIDFunc(f func() int32) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
o.AddressID = f
|
||||
})
|
||||
}
|
||||
|
||||
// Clear any values for the column
|
||||
func (m commsMailerMods) UnsetAddressID() CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
o.AddressID = nil
|
||||
})
|
||||
}
|
||||
|
||||
// Generates a random value for the column using the given faker
|
||||
// if faker is nil, a default faker is used
|
||||
func (m commsMailerMods) RandomAddressID(f *faker.Faker) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
o.AddressID = func() int32 {
|
||||
return random_int32(f)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Set the model columns to this value
|
||||
func (m commsMailerMods) Created(val time.Time) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
|
|
@ -301,32 +410,63 @@ func (m commsMailerMods) RandomID(f *faker.Faker) CommsMailerMod {
|
|||
}
|
||||
|
||||
// Set the model columns to this value
|
||||
func (m commsMailerMods) Type(val enums.CommsMailertype) CommsMailerMod {
|
||||
func (m commsMailerMods) Recipient(val string) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
o.Type = func() enums.CommsMailertype { return val }
|
||||
o.Recipient = func() string { return val }
|
||||
})
|
||||
}
|
||||
|
||||
// Set the Column from the function
|
||||
func (m commsMailerMods) TypeFunc(f func() enums.CommsMailertype) CommsMailerMod {
|
||||
func (m commsMailerMods) RecipientFunc(f func() string) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
o.Type = f
|
||||
o.Recipient = f
|
||||
})
|
||||
}
|
||||
|
||||
// Clear any values for the column
|
||||
func (m commsMailerMods) UnsetType() CommsMailerMod {
|
||||
func (m commsMailerMods) UnsetRecipient() CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
o.Type = nil
|
||||
o.Recipient = nil
|
||||
})
|
||||
}
|
||||
|
||||
// Generates a random value for the column using the given faker
|
||||
// if faker is nil, a default faker is used
|
||||
func (m commsMailerMods) RandomType(f *faker.Faker) CommsMailerMod {
|
||||
func (m commsMailerMods) RandomRecipient(f *faker.Faker) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
o.Type = func() enums.CommsMailertype {
|
||||
return random_enums_CommsMailertype(f)
|
||||
o.Recipient = func() string {
|
||||
return random_string(f)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Set the model columns to this value
|
||||
func (m commsMailerMods) UUID(val uuid.UUID) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
o.UUID = func() uuid.UUID { return val }
|
||||
})
|
||||
}
|
||||
|
||||
// Set the Column from the function
|
||||
func (m commsMailerMods) UUIDFunc(f func() uuid.UUID) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
o.UUID = f
|
||||
})
|
||||
}
|
||||
|
||||
// Clear any values for the column
|
||||
func (m commsMailerMods) UnsetUUID() CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
o.UUID = nil
|
||||
})
|
||||
}
|
||||
|
||||
// Generates a random value for the column using the given faker
|
||||
// if faker is nil, a default faker is used
|
||||
func (m commsMailerMods) RandomUUID(f *faker.Faker) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(_ context.Context, o *CommsMailerTemplate) {
|
||||
o.UUID = func() uuid.UUID {
|
||||
return random_uuid_UUID(f)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -337,5 +477,88 @@ func (m commsMailerMods) WithParentsCascading() CommsMailerMod {
|
|||
return
|
||||
}
|
||||
ctx = commsMailerWithParentsCascadingCtx.WithValue(ctx, true)
|
||||
{
|
||||
|
||||
related := o.f.NewAddressWithContext(ctx, AddressMods.WithParentsCascading())
|
||||
m.WithAddress(related).Apply(ctx, o)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (m commsMailerMods) WithAddress(rel *AddressTemplate) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(ctx context.Context, o *CommsMailerTemplate) {
|
||||
o.r.Address = &commsMailerRAddressR{
|
||||
o: rel,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (m commsMailerMods) WithNewAddress(mods ...AddressMod) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(ctx context.Context, o *CommsMailerTemplate) {
|
||||
related := o.f.NewAddressWithContext(ctx, mods...)
|
||||
|
||||
m.WithAddress(related).Apply(ctx, o)
|
||||
})
|
||||
}
|
||||
|
||||
func (m commsMailerMods) WithExistingAddress(em *models.Address) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(ctx context.Context, o *CommsMailerTemplate) {
|
||||
o.r.Address = &commsMailerRAddressR{
|
||||
o: o.f.FromExistingAddress(em),
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (m commsMailerMods) WithoutAddress() CommsMailerMod {
|
||||
return CommsMailerModFunc(func(ctx context.Context, o *CommsMailerTemplate) {
|
||||
o.r.Address = nil
|
||||
})
|
||||
}
|
||||
|
||||
func (m commsMailerMods) WithComplianceReportRequests(number int, related *ComplianceReportRequestTemplate) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(ctx context.Context, o *CommsMailerTemplate) {
|
||||
o.r.ComplianceReportRequests = []*commsMailerRComplianceReportRequestsR{{
|
||||
number: number,
|
||||
o: related,
|
||||
}}
|
||||
})
|
||||
}
|
||||
|
||||
func (m commsMailerMods) WithNewComplianceReportRequests(number int, mods ...ComplianceReportRequestMod) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(ctx context.Context, o *CommsMailerTemplate) {
|
||||
related := o.f.NewComplianceReportRequestWithContext(ctx, mods...)
|
||||
m.WithComplianceReportRequests(number, related).Apply(ctx, o)
|
||||
})
|
||||
}
|
||||
|
||||
func (m commsMailerMods) AddComplianceReportRequests(number int, related *ComplianceReportRequestTemplate) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(ctx context.Context, o *CommsMailerTemplate) {
|
||||
o.r.ComplianceReportRequests = append(o.r.ComplianceReportRequests, &commsMailerRComplianceReportRequestsR{
|
||||
number: number,
|
||||
o: related,
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func (m commsMailerMods) AddNewComplianceReportRequests(number int, mods ...ComplianceReportRequestMod) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(ctx context.Context, o *CommsMailerTemplate) {
|
||||
related := o.f.NewComplianceReportRequestWithContext(ctx, mods...)
|
||||
m.AddComplianceReportRequests(number, related).Apply(ctx, o)
|
||||
})
|
||||
}
|
||||
|
||||
func (m commsMailerMods) AddExistingComplianceReportRequests(existingModels ...*models.ComplianceReportRequest) CommsMailerMod {
|
||||
return CommsMailerModFunc(func(ctx context.Context, o *CommsMailerTemplate) {
|
||||
for _, em := range existingModels {
|
||||
o.r.ComplianceReportRequests = append(o.r.ComplianceReportRequests, &commsMailerRComplianceReportRequestsR{
|
||||
o: o.f.FromExistingComplianceReportRequest(em),
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (m commsMailerMods) WithoutComplianceReportRequests() CommsMailerMod {
|
||||
return CommsMailerModFunc(func(ctx context.Context, o *CommsMailerTemplate) {
|
||||
o.r.ComplianceReportRequests = nil
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ type ComplianceReportRequestTemplate struct {
|
|||
type complianceReportRequestR struct {
|
||||
CreatorUser *complianceReportRequestRCreatorUserR
|
||||
Site *complianceReportRequestRSiteR
|
||||
Mailers []*complianceReportRequestRMailersR
|
||||
}
|
||||
|
||||
type complianceReportRequestRCreatorUserR struct {
|
||||
|
|
@ -59,6 +60,10 @@ type complianceReportRequestRCreatorUserR struct {
|
|||
type complianceReportRequestRSiteR struct {
|
||||
o *SiteTemplate
|
||||
}
|
||||
type complianceReportRequestRMailersR struct {
|
||||
number int
|
||||
o *CommsMailerTemplate
|
||||
}
|
||||
|
||||
// Apply mods to the ComplianceReportRequestTemplate
|
||||
func (o *ComplianceReportRequestTemplate) Apply(ctx context.Context, mods ...ComplianceReportRequestMod) {
|
||||
|
|
@ -84,6 +89,18 @@ func (t ComplianceReportRequestTemplate) setModelRels(o *models.ComplianceReport
|
|||
o.SiteVersion = rel.Version // h2
|
||||
o.R.Site = rel
|
||||
}
|
||||
|
||||
if t.r.Mailers != nil {
|
||||
rel := models.CommsMailerSlice{}
|
||||
for _, r := range t.r.Mailers {
|
||||
related := r.o.BuildMany(r.number)
|
||||
for _, rel := range related {
|
||||
rel.R.ComplianceReportRequests = append(rel.R.ComplianceReportRequests, o)
|
||||
}
|
||||
rel = append(rel, related...)
|
||||
}
|
||||
o.R.Mailers = rel
|
||||
}
|
||||
}
|
||||
|
||||
// BuildSetter returns an *models.ComplianceReportRequestSetter
|
||||
|
|
@ -606,3 +623,51 @@ func (m complianceReportRequestMods) WithoutSite() ComplianceReportRequestMod {
|
|||
o.r.Site = nil
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMods) WithMailers(number int, related *CommsMailerTemplate) ComplianceReportRequestMod {
|
||||
return ComplianceReportRequestModFunc(func(ctx context.Context, o *ComplianceReportRequestTemplate) {
|
||||
o.r.Mailers = []*complianceReportRequestRMailersR{{
|
||||
number: number,
|
||||
o: related,
|
||||
}}
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMods) WithNewMailers(number int, mods ...CommsMailerMod) ComplianceReportRequestMod {
|
||||
return ComplianceReportRequestModFunc(func(ctx context.Context, o *ComplianceReportRequestTemplate) {
|
||||
related := o.f.NewCommsMailerWithContext(ctx, mods...)
|
||||
m.WithMailers(number, related).Apply(ctx, o)
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMods) AddMailers(number int, related *CommsMailerTemplate) ComplianceReportRequestMod {
|
||||
return ComplianceReportRequestModFunc(func(ctx context.Context, o *ComplianceReportRequestTemplate) {
|
||||
o.r.Mailers = append(o.r.Mailers, &complianceReportRequestRMailersR{
|
||||
number: number,
|
||||
o: related,
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMods) AddNewMailers(number int, mods ...CommsMailerMod) ComplianceReportRequestMod {
|
||||
return ComplianceReportRequestModFunc(func(ctx context.Context, o *ComplianceReportRequestTemplate) {
|
||||
related := o.f.NewCommsMailerWithContext(ctx, mods...)
|
||||
m.AddMailers(number, related).Apply(ctx, o)
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMods) AddExistingMailers(existingModels ...*models.CommsMailer) ComplianceReportRequestMod {
|
||||
return ComplianceReportRequestModFunc(func(ctx context.Context, o *ComplianceReportRequestTemplate) {
|
||||
for _, em := range existingModels {
|
||||
o.r.Mailers = append(o.r.Mailers, &complianceReportRequestRMailersR{
|
||||
o: o.f.FromExistingCommsMailer(em),
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMods) WithoutMailers() ComplianceReportRequestMod {
|
||||
return ComplianceReportRequestModFunc(func(ctx context.Context, o *ComplianceReportRequestTemplate) {
|
||||
o.r.Mailers = nil
|
||||
})
|
||||
}
|
||||
|
|
|
|||
260
db/factory/compliance_report_request_mailer.bob.go
Normal file
260
db/factory/compliance_report_request_mailer.bob.go
Normal file
|
|
@ -0,0 +1,260 @@
|
|||
// Code generated by BobGen psql v0.42.5. DO NOT EDIT.
|
||||
// This file is meant to be re-generated in place and/or deleted at any time.
|
||||
|
||||
package factory
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
models "github.com/Gleipnir-Technology/nidus-sync/db/models"
|
||||
"github.com/jaswdr/faker/v2"
|
||||
)
|
||||
|
||||
type ComplianceReportRequestMailerMod interface {
|
||||
Apply(context.Context, *ComplianceReportRequestMailerTemplate)
|
||||
}
|
||||
|
||||
type ComplianceReportRequestMailerModFunc func(context.Context, *ComplianceReportRequestMailerTemplate)
|
||||
|
||||
func (f ComplianceReportRequestMailerModFunc) Apply(ctx context.Context, n *ComplianceReportRequestMailerTemplate) {
|
||||
f(ctx, n)
|
||||
}
|
||||
|
||||
type ComplianceReportRequestMailerModSlice []ComplianceReportRequestMailerMod
|
||||
|
||||
func (mods ComplianceReportRequestMailerModSlice) Apply(ctx context.Context, n *ComplianceReportRequestMailerTemplate) {
|
||||
for _, f := range mods {
|
||||
f.Apply(ctx, n)
|
||||
}
|
||||
}
|
||||
|
||||
// ComplianceReportRequestMailerTemplate is an object representing the database table.
|
||||
// all columns are optional and should be set by mods
|
||||
type ComplianceReportRequestMailerTemplate struct {
|
||||
ComplianceReportRequestID func() int32
|
||||
MailerID func() int32
|
||||
|
||||
r complianceReportRequestMailerR
|
||||
f *Factory
|
||||
|
||||
alreadyPersisted bool
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerR struct {
|
||||
ComplianceReportRequest *complianceReportRequestMailerRComplianceReportRequestR
|
||||
Mailer *complianceReportRequestMailerRMailerR
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerRComplianceReportRequestR struct {
|
||||
o *ComplianceReportRequestTemplate
|
||||
}
|
||||
type complianceReportRequestMailerRMailerR struct {
|
||||
o *CommsMailerTemplate
|
||||
}
|
||||
|
||||
// Apply mods to the ComplianceReportRequestMailerTemplate
|
||||
func (o *ComplianceReportRequestMailerTemplate) Apply(ctx context.Context, mods ...ComplianceReportRequestMailerMod) {
|
||||
for _, mod := range mods {
|
||||
mod.Apply(ctx, o)
|
||||
}
|
||||
}
|
||||
|
||||
// setModelRels creates and sets the relationships on *models.ComplianceReportRequestMailer
|
||||
// according to the relationships in the template. Nothing is inserted into the db
|
||||
func (t ComplianceReportRequestMailerTemplate) setModelRels(o *models.ComplianceReportRequestMailer) {
|
||||
if t.r.ComplianceReportRequest != nil {
|
||||
rel := t.r.ComplianceReportRequest.o.Build()
|
||||
o.ComplianceReportRequestID = rel.ID // h2
|
||||
o.R.ComplianceReportRequest = rel
|
||||
}
|
||||
|
||||
if t.r.Mailer != nil {
|
||||
rel := t.r.Mailer.o.Build()
|
||||
o.MailerID = rel.ID // h2
|
||||
o.R.Mailer = rel
|
||||
}
|
||||
}
|
||||
|
||||
// Build returns an *models.ComplianceReportRequestMailer
|
||||
// Related objects are also created and placed in the .R field
|
||||
// NOTE: Objects are not inserted into the database. Use ComplianceReportRequestMailerTemplate.Create
|
||||
func (o ComplianceReportRequestMailerTemplate) Build() *models.ComplianceReportRequestMailer {
|
||||
m := &models.ComplianceReportRequestMailer{}
|
||||
|
||||
if o.ComplianceReportRequestID != nil {
|
||||
m.ComplianceReportRequestID = o.ComplianceReportRequestID()
|
||||
}
|
||||
if o.MailerID != nil {
|
||||
m.MailerID = o.MailerID()
|
||||
}
|
||||
|
||||
o.setModelRels(m)
|
||||
|
||||
return m
|
||||
}
|
||||
|
||||
// BuildMany returns an models.ComplianceReportRequestMailerSlice
|
||||
// Related objects are also created and placed in the .R field
|
||||
// NOTE: Objects are not inserted into the database. Use ComplianceReportRequestMailerTemplate.CreateMany
|
||||
func (o ComplianceReportRequestMailerTemplate) BuildMany(number int) models.ComplianceReportRequestMailerSlice {
|
||||
m := make(models.ComplianceReportRequestMailerSlice, number)
|
||||
|
||||
for i := range m {
|
||||
m[i] = o.Build()
|
||||
}
|
||||
|
||||
return m
|
||||
}
|
||||
|
||||
// ComplianceReportRequestMailer has methods that act as mods for the ComplianceReportRequestMailerTemplate
|
||||
var ComplianceReportRequestMailerMods complianceReportRequestMailerMods
|
||||
|
||||
type complianceReportRequestMailerMods struct{}
|
||||
|
||||
func (m complianceReportRequestMailerMods) RandomizeAllColumns(f *faker.Faker) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModSlice{
|
||||
ComplianceReportRequestMailerMods.RandomComplianceReportRequestID(f),
|
||||
ComplianceReportRequestMailerMods.RandomMailerID(f),
|
||||
}
|
||||
}
|
||||
|
||||
// Set the model columns to this value
|
||||
func (m complianceReportRequestMailerMods) ComplianceReportRequestID(val int32) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(_ context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.ComplianceReportRequestID = func() int32 { return val }
|
||||
})
|
||||
}
|
||||
|
||||
// Set the Column from the function
|
||||
func (m complianceReportRequestMailerMods) ComplianceReportRequestIDFunc(f func() int32) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(_ context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.ComplianceReportRequestID = f
|
||||
})
|
||||
}
|
||||
|
||||
// Clear any values for the column
|
||||
func (m complianceReportRequestMailerMods) UnsetComplianceReportRequestID() ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(_ context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.ComplianceReportRequestID = nil
|
||||
})
|
||||
}
|
||||
|
||||
// Generates a random value for the column using the given faker
|
||||
// if faker is nil, a default faker is used
|
||||
func (m complianceReportRequestMailerMods) RandomComplianceReportRequestID(f *faker.Faker) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(_ context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.ComplianceReportRequestID = func() int32 {
|
||||
return random_int32(f)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Set the model columns to this value
|
||||
func (m complianceReportRequestMailerMods) MailerID(val int32) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(_ context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.MailerID = func() int32 { return val }
|
||||
})
|
||||
}
|
||||
|
||||
// Set the Column from the function
|
||||
func (m complianceReportRequestMailerMods) MailerIDFunc(f func() int32) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(_ context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.MailerID = f
|
||||
})
|
||||
}
|
||||
|
||||
// Clear any values for the column
|
||||
func (m complianceReportRequestMailerMods) UnsetMailerID() ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(_ context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.MailerID = nil
|
||||
})
|
||||
}
|
||||
|
||||
// Generates a random value for the column using the given faker
|
||||
// if faker is nil, a default faker is used
|
||||
func (m complianceReportRequestMailerMods) RandomMailerID(f *faker.Faker) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(_ context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.MailerID = func() int32 {
|
||||
return random_int32(f)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMailerMods) WithParentsCascading() ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(ctx context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
if isDone, _ := complianceReportRequestMailerWithParentsCascadingCtx.Value(ctx); isDone {
|
||||
return
|
||||
}
|
||||
ctx = complianceReportRequestMailerWithParentsCascadingCtx.WithValue(ctx, true)
|
||||
{
|
||||
|
||||
related := o.f.NewComplianceReportRequestWithContext(ctx, ComplianceReportRequestMods.WithParentsCascading())
|
||||
m.WithComplianceReportRequest(related).Apply(ctx, o)
|
||||
}
|
||||
{
|
||||
|
||||
related := o.f.NewCommsMailerWithContext(ctx, CommsMailerMods.WithParentsCascading())
|
||||
m.WithMailer(related).Apply(ctx, o)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMailerMods) WithComplianceReportRequest(rel *ComplianceReportRequestTemplate) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(ctx context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.r.ComplianceReportRequest = &complianceReportRequestMailerRComplianceReportRequestR{
|
||||
o: rel,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMailerMods) WithNewComplianceReportRequest(mods ...ComplianceReportRequestMod) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(ctx context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
related := o.f.NewComplianceReportRequestWithContext(ctx, mods...)
|
||||
|
||||
m.WithComplianceReportRequest(related).Apply(ctx, o)
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMailerMods) WithExistingComplianceReportRequest(em *models.ComplianceReportRequest) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(ctx context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.r.ComplianceReportRequest = &complianceReportRequestMailerRComplianceReportRequestR{
|
||||
o: o.f.FromExistingComplianceReportRequest(em),
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMailerMods) WithoutComplianceReportRequest() ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(ctx context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.r.ComplianceReportRequest = nil
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMailerMods) WithMailer(rel *CommsMailerTemplate) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(ctx context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.r.Mailer = &complianceReportRequestMailerRMailerR{
|
||||
o: rel,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMailerMods) WithNewMailer(mods ...CommsMailerMod) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(ctx context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
related := o.f.NewCommsMailerWithContext(ctx, mods...)
|
||||
|
||||
m.WithMailer(related).Apply(ctx, o)
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMailerMods) WithExistingMailer(em *models.CommsMailer) ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(ctx context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.r.Mailer = &complianceReportRequestMailerRMailerR{
|
||||
o: o.f.FromExistingCommsMailer(em),
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (m complianceReportRequestMailerMods) WithoutMailer() ComplianceReportRequestMailerMod {
|
||||
return ComplianceReportRequestMailerModFunc(func(ctx context.Context, o *ComplianceReportRequestMailerTemplate) {
|
||||
o.r.Mailer = nil
|
||||
})
|
||||
}
|
||||
29
db/migrations/00077_mailer_rework.sql
Normal file
29
db/migrations/00077_mailer_rework.sql
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
-- +goose Up
|
||||
DROP TABLE comms.mailer;
|
||||
DROP TYPE comms.MailerType;
|
||||
CREATE TABLE comms.mailer (
|
||||
address_id INTEGER NOT NULL REFERENCES address(id),
|
||||
created TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
||||
id SERIAL NOT NULL,
|
||||
recipient TEXT NOT NULL,
|
||||
uuid UUID NOT NULL,
|
||||
PRIMARY KEY(id)
|
||||
);
|
||||
CREATE TABLE compliance_report_request_mailer (
|
||||
compliance_report_request_id INTEGER NOT NULL REFERENCES compliance_report_request(id),
|
||||
mailer_id INTEGER NOT NULL REFERENCES comms.mailer(id),
|
||||
UNIQUE(compliance_report_request_id, mailer_id)
|
||||
);
|
||||
-- +goose Down
|
||||
DROP TABLE compliance_report_request_mailer;
|
||||
DROP TABLE comms.mailer;
|
||||
CREATE TYPE comms.MailerType AS ENUM (
|
||||
'green-pool'
|
||||
);
|
||||
CREATE TABLE comms.mailer (
|
||||
created TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
||||
id SERIAL NOT NULL,
|
||||
type_ comms.MailerType NOT NULL,
|
||||
PRIMARY KEY(id)
|
||||
);
|
||||
|
||||
|
|
@ -53,8 +53,9 @@ type AddressesQuery = *psql.ViewQuery[*Address, AddressSlice]
|
|||
|
||||
// addressR is where relationships are stored.
|
||||
type addressR struct {
|
||||
Residents ResidentSlice // resident.resident_address_id_fkey
|
||||
Site *Site // site.site_address_id_fkey
|
||||
Mailers CommsMailerSlice // comms.mailer.mailer_address_id_fkey
|
||||
Residents ResidentSlice // resident.resident_address_id_fkey
|
||||
Site *Site // site.site_address_id_fkey
|
||||
}
|
||||
|
||||
func buildAddressColumns(alias string) addressColumns {
|
||||
|
|
@ -557,6 +558,30 @@ func (o AddressSlice) ReloadAll(ctx context.Context, exec bob.Executor) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Mailers starts a query for related objects on comms.mailer
|
||||
func (o *Address) Mailers(mods ...bob.Mod[*dialect.SelectQuery]) CommsMailersQuery {
|
||||
return CommsMailers.Query(append(mods,
|
||||
sm.Where(CommsMailers.Columns.AddressID.EQ(psql.Arg(o.ID))),
|
||||
)...)
|
||||
}
|
||||
|
||||
func (os AddressSlice) Mailers(mods ...bob.Mod[*dialect.SelectQuery]) CommsMailersQuery {
|
||||
pkID := make(pgtypes.Array[int32], 0, len(os))
|
||||
for _, o := range os {
|
||||
if o == nil {
|
||||
continue
|
||||
}
|
||||
pkID = append(pkID, o.ID)
|
||||
}
|
||||
PKArgExpr := psql.Select(sm.Columns(
|
||||
psql.F("unnest", psql.Cast(psql.Arg(pkID), "integer[]")),
|
||||
))
|
||||
|
||||
return CommsMailers.Query(append(mods,
|
||||
sm.Where(psql.Group(CommsMailers.Columns.AddressID).OP("IN", PKArgExpr)),
|
||||
)...)
|
||||
}
|
||||
|
||||
// Residents starts a query for related objects on resident
|
||||
func (o *Address) Residents(mods ...bob.Mod[*dialect.SelectQuery]) ResidentsQuery {
|
||||
return Residents.Query(append(mods,
|
||||
|
|
@ -605,6 +630,74 @@ func (os AddressSlice) Site(mods ...bob.Mod[*dialect.SelectQuery]) SitesQuery {
|
|||
)...)
|
||||
}
|
||||
|
||||
func insertAddressMailers0(ctx context.Context, exec bob.Executor, commsMailers1 []*CommsMailerSetter, address0 *Address) (CommsMailerSlice, error) {
|
||||
for i := range commsMailers1 {
|
||||
commsMailers1[i].AddressID = omit.From(address0.ID)
|
||||
}
|
||||
|
||||
ret, err := CommsMailers.Insert(bob.ToMods(commsMailers1...)).All(ctx, exec)
|
||||
if err != nil {
|
||||
return ret, fmt.Errorf("insertAddressMailers0: %w", err)
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func attachAddressMailers0(ctx context.Context, exec bob.Executor, count int, commsMailers1 CommsMailerSlice, address0 *Address) (CommsMailerSlice, error) {
|
||||
setter := &CommsMailerSetter{
|
||||
AddressID: omit.From(address0.ID),
|
||||
}
|
||||
|
||||
err := commsMailers1.UpdateAll(ctx, exec, *setter)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("attachAddressMailers0: %w", err)
|
||||
}
|
||||
|
||||
return commsMailers1, nil
|
||||
}
|
||||
|
||||
func (address0 *Address) InsertMailers(ctx context.Context, exec bob.Executor, related ...*CommsMailerSetter) error {
|
||||
if len(related) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
commsMailers1, err := insertAddressMailers0(ctx, exec, related, address0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
address0.R.Mailers = append(address0.R.Mailers, commsMailers1...)
|
||||
|
||||
for _, rel := range commsMailers1 {
|
||||
rel.R.Address = address0
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (address0 *Address) AttachMailers(ctx context.Context, exec bob.Executor, related ...*CommsMailer) error {
|
||||
if len(related) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
var err error
|
||||
commsMailers1 := CommsMailerSlice(related)
|
||||
|
||||
_, err = attachAddressMailers0(ctx, exec, len(related), commsMailers1, address0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
address0.R.Mailers = append(address0.R.Mailers, commsMailers1...)
|
||||
|
||||
for _, rel := range related {
|
||||
rel.R.Address = address0
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func insertAddressResidents0(ctx context.Context, exec bob.Executor, residents1 []*ResidentSetter, address0 *Address) (ResidentSlice, error) {
|
||||
for i := range residents1 {
|
||||
residents1[i].AddressID = omit.From(address0.ID)
|
||||
|
|
@ -765,6 +858,20 @@ func (o *Address) Preload(name string, retrieved any) error {
|
|||
}
|
||||
|
||||
switch name {
|
||||
case "Mailers":
|
||||
rels, ok := retrieved.(CommsMailerSlice)
|
||||
if !ok {
|
||||
return fmt.Errorf("address cannot load %T as %q", retrieved, name)
|
||||
}
|
||||
|
||||
o.R.Mailers = rels
|
||||
|
||||
for _, rel := range rels {
|
||||
if rel != nil {
|
||||
rel.R.Address = o
|
||||
}
|
||||
}
|
||||
return nil
|
||||
case "Residents":
|
||||
rels, ok := retrieved.(ResidentSlice)
|
||||
if !ok {
|
||||
|
|
@ -819,11 +926,15 @@ func buildAddressPreloader() addressPreloader {
|
|||
}
|
||||
|
||||
type addressThenLoader[Q orm.Loadable] struct {
|
||||
Mailers func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
Residents func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
Site func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
}
|
||||
|
||||
func buildAddressThenLoader[Q orm.Loadable]() addressThenLoader[Q] {
|
||||
type MailersLoadInterface interface {
|
||||
LoadMailers(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
||||
}
|
||||
type ResidentsLoadInterface interface {
|
||||
LoadResidents(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
||||
}
|
||||
|
|
@ -832,6 +943,12 @@ func buildAddressThenLoader[Q orm.Loadable]() addressThenLoader[Q] {
|
|||
}
|
||||
|
||||
return addressThenLoader[Q]{
|
||||
Mailers: thenLoadBuilder[Q](
|
||||
"Mailers",
|
||||
func(ctx context.Context, exec bob.Executor, retrieved MailersLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
return retrieved.LoadMailers(ctx, exec, mods...)
|
||||
},
|
||||
),
|
||||
Residents: thenLoadBuilder[Q](
|
||||
"Residents",
|
||||
func(ctx context.Context, exec bob.Executor, retrieved ResidentsLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
|
|
@ -847,6 +964,67 @@ func buildAddressThenLoader[Q orm.Loadable]() addressThenLoader[Q] {
|
|||
}
|
||||
}
|
||||
|
||||
// LoadMailers loads the address's Mailers into the .R struct
|
||||
func (o *Address) LoadMailers(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Reset the relationship
|
||||
o.R.Mailers = nil
|
||||
|
||||
related, err := o.Mailers(mods...).All(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, rel := range related {
|
||||
rel.R.Address = o
|
||||
}
|
||||
|
||||
o.R.Mailers = related
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadMailers loads the address's Mailers into the .R struct
|
||||
func (os AddressSlice) LoadMailers(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if len(os) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
commsMailers, err := os.Mailers(mods...).All(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, o := range os {
|
||||
if o == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
o.R.Mailers = nil
|
||||
}
|
||||
|
||||
for _, o := range os {
|
||||
if o == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, rel := range commsMailers {
|
||||
|
||||
if !(o.ID == rel.AddressID) {
|
||||
continue
|
||||
}
|
||||
|
||||
rel.R.Address = o
|
||||
|
||||
o.R.Mailers = append(o.R.Mailers, rel)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadResidents loads the address's Residents into the .R struct
|
||||
func (o *Address) LoadResidents(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if o == nil {
|
||||
|
|
@ -962,6 +1140,7 @@ func (os AddressSlice) LoadSite(ctx context.Context, exec bob.Executor, mods ...
|
|||
|
||||
// addressC is where relationship counts are stored.
|
||||
type addressC struct {
|
||||
Mailers *int64
|
||||
Residents *int64
|
||||
}
|
||||
|
||||
|
|
@ -972,6 +1151,8 @@ func (o *Address) PreloadCount(name string, count int64) error {
|
|||
}
|
||||
|
||||
switch name {
|
||||
case "Mailers":
|
||||
o.C.Mailers = &count
|
||||
case "Residents":
|
||||
o.C.Residents = &count
|
||||
}
|
||||
|
|
@ -979,11 +1160,29 @@ func (o *Address) PreloadCount(name string, count int64) error {
|
|||
}
|
||||
|
||||
type addressCountPreloader struct {
|
||||
Mailers func(...bob.Mod[*dialect.SelectQuery]) psql.Preloader
|
||||
Residents func(...bob.Mod[*dialect.SelectQuery]) psql.Preloader
|
||||
}
|
||||
|
||||
func buildAddressCountPreloader() addressCountPreloader {
|
||||
return addressCountPreloader{
|
||||
Mailers: func(mods ...bob.Mod[*dialect.SelectQuery]) psql.Preloader {
|
||||
return countPreloader[*Address]("Mailers", func(parent string) bob.Expression {
|
||||
// Build a correlated subquery: (SELECT COUNT(*) FROM related WHERE fk = parent.pk)
|
||||
if parent == "" {
|
||||
parent = Addresses.Alias()
|
||||
}
|
||||
|
||||
subqueryMods := []bob.Mod[*dialect.SelectQuery]{
|
||||
sm.Columns(psql.Raw("count(*)")),
|
||||
|
||||
sm.From(CommsMailers.Name()),
|
||||
sm.Where(psql.Quote(CommsMailers.Alias(), "address_id").EQ(psql.Quote(parent, "id"))),
|
||||
}
|
||||
subqueryMods = append(subqueryMods, mods...)
|
||||
return psql.Group(psql.Select(subqueryMods...).Expression)
|
||||
})
|
||||
},
|
||||
Residents: func(mods ...bob.Mod[*dialect.SelectQuery]) psql.Preloader {
|
||||
return countPreloader[*Address]("Residents", func(parent string) bob.Expression {
|
||||
// Build a correlated subquery: (SELECT COUNT(*) FROM related WHERE fk = parent.pk)
|
||||
|
|
@ -1005,15 +1204,25 @@ func buildAddressCountPreloader() addressCountPreloader {
|
|||
}
|
||||
|
||||
type addressCountThenLoader[Q orm.Loadable] struct {
|
||||
Mailers func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
Residents func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
}
|
||||
|
||||
func buildAddressCountThenLoader[Q orm.Loadable]() addressCountThenLoader[Q] {
|
||||
type MailersCountInterface interface {
|
||||
LoadCountMailers(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
||||
}
|
||||
type ResidentsCountInterface interface {
|
||||
LoadCountResidents(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
||||
}
|
||||
|
||||
return addressCountThenLoader[Q]{
|
||||
Mailers: countThenLoadBuilder[Q](
|
||||
"Mailers",
|
||||
func(ctx context.Context, exec bob.Executor, retrieved MailersCountInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
return retrieved.LoadCountMailers(ctx, exec, mods...)
|
||||
},
|
||||
),
|
||||
Residents: countThenLoadBuilder[Q](
|
||||
"Residents",
|
||||
func(ctx context.Context, exec bob.Executor, retrieved ResidentsCountInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
|
|
@ -1023,6 +1232,36 @@ func buildAddressCountThenLoader[Q orm.Loadable]() addressCountThenLoader[Q] {
|
|||
}
|
||||
}
|
||||
|
||||
// LoadCountMailers loads the count of Mailers into the C struct
|
||||
func (o *Address) LoadCountMailers(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
count, err := o.Mailers(mods...).Count(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
o.C.Mailers = &count
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadCountMailers loads the count of Mailers for a slice
|
||||
func (os AddressSlice) LoadCountMailers(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.LoadCountMailers(ctx, exec, mods...); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadCountResidents loads the count of Residents into the C struct
|
||||
func (o *Address) LoadCountResidents(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if o == nil {
|
||||
|
|
@ -1055,6 +1294,7 @@ func (os AddressSlice) LoadCountResidents(ctx context.Context, exec bob.Executor
|
|||
|
||||
type addressJoins[Q dialect.Joinable] struct {
|
||||
typ string
|
||||
Mailers modAs[Q, commsMailerColumns]
|
||||
Residents modAs[Q, residentColumns]
|
||||
Site modAs[Q, siteColumns]
|
||||
}
|
||||
|
|
@ -1066,6 +1306,20 @@ func (j addressJoins[Q]) aliasedAs(alias string) addressJoins[Q] {
|
|||
func buildAddressJoins[Q dialect.Joinable](cols addressColumns, typ string) addressJoins[Q] {
|
||||
return addressJoins[Q]{
|
||||
typ: typ,
|
||||
Mailers: modAs[Q, commsMailerColumns]{
|
||||
c: CommsMailers.Columns,
|
||||
f: func(to commsMailerColumns) bob.Mod[Q] {
|
||||
mods := make(mods.QueryMods[Q], 0, 1)
|
||||
|
||||
{
|
||||
mods = append(mods, dialect.Join[Q](typ, CommsMailers.Name().As(to.Alias())).On(
|
||||
to.AddressID.EQ(cols.ID),
|
||||
))
|
||||
}
|
||||
|
||||
return mods
|
||||
},
|
||||
},
|
||||
Residents: modAs[Q, residentColumns]{
|
||||
c: Residents.Columns,
|
||||
f: func(to residentColumns) bob.Mod[Q] {
|
||||
|
|
|
|||
|
|
@ -21,102 +21,110 @@ var (
|
|||
)
|
||||
|
||||
type preloadCounts struct {
|
||||
Address addressCountPreloader
|
||||
ArcgisAccount arcgisAccountCountPreloader
|
||||
ArcgisLayer arcgisLayerCountPreloader
|
||||
ArcgisLayerField arcgisLayerFieldCountPreloader
|
||||
ArcgisServiceFeature arcgisServiceFeatureCountPreloader
|
||||
ArcgisUser arcgisuserCountPreloader
|
||||
CommsEmailContact commsEmailContactCountPreloader
|
||||
CommsEmailTemplate commsEmailTemplateCountPreloader
|
||||
CommsPhone commsPhoneCountPreloader
|
||||
FileuploadCSV fileuploadCSVCountPreloader
|
||||
FileuploadFile fileuploadFileCountPreloader
|
||||
NoteAudio noteAudioCountPreloader
|
||||
NoteImage noteImageCountPreloader
|
||||
Organization organizationCountPreloader
|
||||
Parcel parcelCountPreloader
|
||||
PublicreportImage publicreportImageCountPreloader
|
||||
PublicreportNuisance publicreportNuisanceCountPreloader
|
||||
PublicreportPool publicreportPoolCountPreloader
|
||||
PublicreportQuick publicreportQuickCountPreloader
|
||||
Site siteCountPreloader
|
||||
User userCountPreloader
|
||||
Address addressCountPreloader
|
||||
ArcgisAccount arcgisAccountCountPreloader
|
||||
ArcgisLayer arcgisLayerCountPreloader
|
||||
ArcgisLayerField arcgisLayerFieldCountPreloader
|
||||
ArcgisServiceFeature arcgisServiceFeatureCountPreloader
|
||||
ArcgisUser arcgisuserCountPreloader
|
||||
CommsEmailContact commsEmailContactCountPreloader
|
||||
CommsEmailTemplate commsEmailTemplateCountPreloader
|
||||
CommsMailer commsMailerCountPreloader
|
||||
CommsPhone commsPhoneCountPreloader
|
||||
ComplianceReportRequest complianceReportRequestCountPreloader
|
||||
FileuploadCSV fileuploadCSVCountPreloader
|
||||
FileuploadFile fileuploadFileCountPreloader
|
||||
NoteAudio noteAudioCountPreloader
|
||||
NoteImage noteImageCountPreloader
|
||||
Organization organizationCountPreloader
|
||||
Parcel parcelCountPreloader
|
||||
PublicreportImage publicreportImageCountPreloader
|
||||
PublicreportNuisance publicreportNuisanceCountPreloader
|
||||
PublicreportPool publicreportPoolCountPreloader
|
||||
PublicreportQuick publicreportQuickCountPreloader
|
||||
Site siteCountPreloader
|
||||
User userCountPreloader
|
||||
}
|
||||
|
||||
func getPreloadCount() preloadCounts {
|
||||
return preloadCounts{
|
||||
Address: buildAddressCountPreloader(),
|
||||
ArcgisAccount: buildArcgisAccountCountPreloader(),
|
||||
ArcgisLayer: buildArcgisLayerCountPreloader(),
|
||||
ArcgisLayerField: buildArcgisLayerFieldCountPreloader(),
|
||||
ArcgisServiceFeature: buildArcgisServiceFeatureCountPreloader(),
|
||||
ArcgisUser: buildArcgisUserCountPreloader(),
|
||||
CommsEmailContact: buildCommsEmailContactCountPreloader(),
|
||||
CommsEmailTemplate: buildCommsEmailTemplateCountPreloader(),
|
||||
CommsPhone: buildCommsPhoneCountPreloader(),
|
||||
FileuploadCSV: buildFileuploadCSVCountPreloader(),
|
||||
FileuploadFile: buildFileuploadFileCountPreloader(),
|
||||
NoteAudio: buildNoteAudioCountPreloader(),
|
||||
NoteImage: buildNoteImageCountPreloader(),
|
||||
Organization: buildOrganizationCountPreloader(),
|
||||
Parcel: buildParcelCountPreloader(),
|
||||
PublicreportImage: buildPublicreportImageCountPreloader(),
|
||||
PublicreportNuisance: buildPublicreportNuisanceCountPreloader(),
|
||||
PublicreportPool: buildPublicreportPoolCountPreloader(),
|
||||
PublicreportQuick: buildPublicreportQuickCountPreloader(),
|
||||
Site: buildSiteCountPreloader(),
|
||||
User: buildUserCountPreloader(),
|
||||
Address: buildAddressCountPreloader(),
|
||||
ArcgisAccount: buildArcgisAccountCountPreloader(),
|
||||
ArcgisLayer: buildArcgisLayerCountPreloader(),
|
||||
ArcgisLayerField: buildArcgisLayerFieldCountPreloader(),
|
||||
ArcgisServiceFeature: buildArcgisServiceFeatureCountPreloader(),
|
||||
ArcgisUser: buildArcgisUserCountPreloader(),
|
||||
CommsEmailContact: buildCommsEmailContactCountPreloader(),
|
||||
CommsEmailTemplate: buildCommsEmailTemplateCountPreloader(),
|
||||
CommsMailer: buildCommsMailerCountPreloader(),
|
||||
CommsPhone: buildCommsPhoneCountPreloader(),
|
||||
ComplianceReportRequest: buildComplianceReportRequestCountPreloader(),
|
||||
FileuploadCSV: buildFileuploadCSVCountPreloader(),
|
||||
FileuploadFile: buildFileuploadFileCountPreloader(),
|
||||
NoteAudio: buildNoteAudioCountPreloader(),
|
||||
NoteImage: buildNoteImageCountPreloader(),
|
||||
Organization: buildOrganizationCountPreloader(),
|
||||
Parcel: buildParcelCountPreloader(),
|
||||
PublicreportImage: buildPublicreportImageCountPreloader(),
|
||||
PublicreportNuisance: buildPublicreportNuisanceCountPreloader(),
|
||||
PublicreportPool: buildPublicreportPoolCountPreloader(),
|
||||
PublicreportQuick: buildPublicreportQuickCountPreloader(),
|
||||
Site: buildSiteCountPreloader(),
|
||||
User: buildUserCountPreloader(),
|
||||
}
|
||||
}
|
||||
|
||||
type thenLoadCounts[Q orm.Loadable] struct {
|
||||
Address addressCountThenLoader[Q]
|
||||
ArcgisAccount arcgisAccountCountThenLoader[Q]
|
||||
ArcgisLayer arcgisLayerCountThenLoader[Q]
|
||||
ArcgisLayerField arcgisLayerFieldCountThenLoader[Q]
|
||||
ArcgisServiceFeature arcgisServiceFeatureCountThenLoader[Q]
|
||||
ArcgisUser arcgisuserCountThenLoader[Q]
|
||||
CommsEmailContact commsEmailContactCountThenLoader[Q]
|
||||
CommsEmailTemplate commsEmailTemplateCountThenLoader[Q]
|
||||
CommsPhone commsPhoneCountThenLoader[Q]
|
||||
FileuploadCSV fileuploadCSVCountThenLoader[Q]
|
||||
FileuploadFile fileuploadFileCountThenLoader[Q]
|
||||
NoteAudio noteAudioCountThenLoader[Q]
|
||||
NoteImage noteImageCountThenLoader[Q]
|
||||
Organization organizationCountThenLoader[Q]
|
||||
Parcel parcelCountThenLoader[Q]
|
||||
PublicreportImage publicreportImageCountThenLoader[Q]
|
||||
PublicreportNuisance publicreportNuisanceCountThenLoader[Q]
|
||||
PublicreportPool publicreportPoolCountThenLoader[Q]
|
||||
PublicreportQuick publicreportQuickCountThenLoader[Q]
|
||||
Site siteCountThenLoader[Q]
|
||||
User userCountThenLoader[Q]
|
||||
Address addressCountThenLoader[Q]
|
||||
ArcgisAccount arcgisAccountCountThenLoader[Q]
|
||||
ArcgisLayer arcgisLayerCountThenLoader[Q]
|
||||
ArcgisLayerField arcgisLayerFieldCountThenLoader[Q]
|
||||
ArcgisServiceFeature arcgisServiceFeatureCountThenLoader[Q]
|
||||
ArcgisUser arcgisuserCountThenLoader[Q]
|
||||
CommsEmailContact commsEmailContactCountThenLoader[Q]
|
||||
CommsEmailTemplate commsEmailTemplateCountThenLoader[Q]
|
||||
CommsMailer commsMailerCountThenLoader[Q]
|
||||
CommsPhone commsPhoneCountThenLoader[Q]
|
||||
ComplianceReportRequest complianceReportRequestCountThenLoader[Q]
|
||||
FileuploadCSV fileuploadCSVCountThenLoader[Q]
|
||||
FileuploadFile fileuploadFileCountThenLoader[Q]
|
||||
NoteAudio noteAudioCountThenLoader[Q]
|
||||
NoteImage noteImageCountThenLoader[Q]
|
||||
Organization organizationCountThenLoader[Q]
|
||||
Parcel parcelCountThenLoader[Q]
|
||||
PublicreportImage publicreportImageCountThenLoader[Q]
|
||||
PublicreportNuisance publicreportNuisanceCountThenLoader[Q]
|
||||
PublicreportPool publicreportPoolCountThenLoader[Q]
|
||||
PublicreportQuick publicreportQuickCountThenLoader[Q]
|
||||
Site siteCountThenLoader[Q]
|
||||
User userCountThenLoader[Q]
|
||||
}
|
||||
|
||||
func getThenLoadCount[Q orm.Loadable]() thenLoadCounts[Q] {
|
||||
return thenLoadCounts[Q]{
|
||||
Address: buildAddressCountThenLoader[Q](),
|
||||
ArcgisAccount: buildArcgisAccountCountThenLoader[Q](),
|
||||
ArcgisLayer: buildArcgisLayerCountThenLoader[Q](),
|
||||
ArcgisLayerField: buildArcgisLayerFieldCountThenLoader[Q](),
|
||||
ArcgisServiceFeature: buildArcgisServiceFeatureCountThenLoader[Q](),
|
||||
ArcgisUser: buildArcgisUserCountThenLoader[Q](),
|
||||
CommsEmailContact: buildCommsEmailContactCountThenLoader[Q](),
|
||||
CommsEmailTemplate: buildCommsEmailTemplateCountThenLoader[Q](),
|
||||
CommsPhone: buildCommsPhoneCountThenLoader[Q](),
|
||||
FileuploadCSV: buildFileuploadCSVCountThenLoader[Q](),
|
||||
FileuploadFile: buildFileuploadFileCountThenLoader[Q](),
|
||||
NoteAudio: buildNoteAudioCountThenLoader[Q](),
|
||||
NoteImage: buildNoteImageCountThenLoader[Q](),
|
||||
Organization: buildOrganizationCountThenLoader[Q](),
|
||||
Parcel: buildParcelCountThenLoader[Q](),
|
||||
PublicreportImage: buildPublicreportImageCountThenLoader[Q](),
|
||||
PublicreportNuisance: buildPublicreportNuisanceCountThenLoader[Q](),
|
||||
PublicreportPool: buildPublicreportPoolCountThenLoader[Q](),
|
||||
PublicreportQuick: buildPublicreportQuickCountThenLoader[Q](),
|
||||
Site: buildSiteCountThenLoader[Q](),
|
||||
User: buildUserCountThenLoader[Q](),
|
||||
Address: buildAddressCountThenLoader[Q](),
|
||||
ArcgisAccount: buildArcgisAccountCountThenLoader[Q](),
|
||||
ArcgisLayer: buildArcgisLayerCountThenLoader[Q](),
|
||||
ArcgisLayerField: buildArcgisLayerFieldCountThenLoader[Q](),
|
||||
ArcgisServiceFeature: buildArcgisServiceFeatureCountThenLoader[Q](),
|
||||
ArcgisUser: buildArcgisUserCountThenLoader[Q](),
|
||||
CommsEmailContact: buildCommsEmailContactCountThenLoader[Q](),
|
||||
CommsEmailTemplate: buildCommsEmailTemplateCountThenLoader[Q](),
|
||||
CommsMailer: buildCommsMailerCountThenLoader[Q](),
|
||||
CommsPhone: buildCommsPhoneCountThenLoader[Q](),
|
||||
ComplianceReportRequest: buildComplianceReportRequestCountThenLoader[Q](),
|
||||
FileuploadCSV: buildFileuploadCSVCountThenLoader[Q](),
|
||||
FileuploadFile: buildFileuploadFileCountThenLoader[Q](),
|
||||
NoteAudio: buildNoteAudioCountThenLoader[Q](),
|
||||
NoteImage: buildNoteImageCountThenLoader[Q](),
|
||||
Organization: buildOrganizationCountThenLoader[Q](),
|
||||
Parcel: buildParcelCountThenLoader[Q](),
|
||||
PublicreportImage: buildPublicreportImageCountThenLoader[Q](),
|
||||
PublicreportNuisance: buildPublicreportNuisanceCountThenLoader[Q](),
|
||||
PublicreportPool: buildPublicreportPoolCountThenLoader[Q](),
|
||||
PublicreportQuick: buildPublicreportQuickCountThenLoader[Q](),
|
||||
Site: buildSiteCountThenLoader[Q](),
|
||||
User: buildUserCountThenLoader[Q](),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,10 +46,12 @@ type joins[Q dialect.Joinable] struct {
|
|||
CommsEmailContacts joinSet[commsEmailContactJoins[Q]]
|
||||
CommsEmailLogs joinSet[commsEmailLogJoins[Q]]
|
||||
CommsEmailTemplates joinSet[commsEmailTemplateJoins[Q]]
|
||||
CommsMailers joinSet[commsMailerJoins[Q]]
|
||||
CommsPhones joinSet[commsPhoneJoins[Q]]
|
||||
CommsTextJobs joinSet[commsTextJobJoins[Q]]
|
||||
CommsTextLogs joinSet[commsTextLogJoins[Q]]
|
||||
ComplianceReportRequests joinSet[complianceReportRequestJoins[Q]]
|
||||
ComplianceReportRequestMailers joinSet[complianceReportRequestMailerJoins[Q]]
|
||||
DistrictSubscriptionEmails joinSet[districtSubscriptionEmailJoins[Q]]
|
||||
DistrictSubscriptionPhones joinSet[districtSubscriptionPhoneJoins[Q]]
|
||||
FieldseekerContainerrelates joinSet[fieldseekerContainerrelateJoins[Q]]
|
||||
|
|
@ -140,10 +142,12 @@ func getJoins[Q dialect.Joinable]() joins[Q] {
|
|||
CommsEmailContacts: buildJoinSet[commsEmailContactJoins[Q]](CommsEmailContacts.Columns, buildCommsEmailContactJoins),
|
||||
CommsEmailLogs: buildJoinSet[commsEmailLogJoins[Q]](CommsEmailLogs.Columns, buildCommsEmailLogJoins),
|
||||
CommsEmailTemplates: buildJoinSet[commsEmailTemplateJoins[Q]](CommsEmailTemplates.Columns, buildCommsEmailTemplateJoins),
|
||||
CommsMailers: buildJoinSet[commsMailerJoins[Q]](CommsMailers.Columns, buildCommsMailerJoins),
|
||||
CommsPhones: buildJoinSet[commsPhoneJoins[Q]](CommsPhones.Columns, buildCommsPhoneJoins),
|
||||
CommsTextJobs: buildJoinSet[commsTextJobJoins[Q]](CommsTextJobs.Columns, buildCommsTextJobJoins),
|
||||
CommsTextLogs: buildJoinSet[commsTextLogJoins[Q]](CommsTextLogs.Columns, buildCommsTextLogJoins),
|
||||
ComplianceReportRequests: buildJoinSet[complianceReportRequestJoins[Q]](ComplianceReportRequests.Columns, buildComplianceReportRequestJoins),
|
||||
ComplianceReportRequestMailers: buildJoinSet[complianceReportRequestMailerJoins[Q]](ComplianceReportRequestMailers.Columns, buildComplianceReportRequestMailerJoins),
|
||||
DistrictSubscriptionEmails: buildJoinSet[districtSubscriptionEmailJoins[Q]](DistrictSubscriptionEmails.Columns, buildDistrictSubscriptionEmailJoins),
|
||||
DistrictSubscriptionPhones: buildJoinSet[districtSubscriptionPhoneJoins[Q]](DistrictSubscriptionPhones.Columns, buildDistrictSubscriptionPhoneJoins),
|
||||
FieldseekerContainerrelates: buildJoinSet[fieldseekerContainerrelateJoins[Q]](FieldseekerContainerrelates.Columns, buildFieldseekerContainerrelateJoins),
|
||||
|
|
|
|||
|
|
@ -31,10 +31,12 @@ type preloaders struct {
|
|||
CommsEmailContact commsEmailContactPreloader
|
||||
CommsEmailLog commsEmailLogPreloader
|
||||
CommsEmailTemplate commsEmailTemplatePreloader
|
||||
CommsMailer commsMailerPreloader
|
||||
CommsPhone commsPhonePreloader
|
||||
CommsTextJob commsTextJobPreloader
|
||||
CommsTextLog commsTextLogPreloader
|
||||
ComplianceReportRequest complianceReportRequestPreloader
|
||||
ComplianceReportRequestMailer complianceReportRequestMailerPreloader
|
||||
DistrictSubscriptionEmail districtSubscriptionEmailPreloader
|
||||
DistrictSubscriptionPhone districtSubscriptionPhonePreloader
|
||||
FieldseekerContainerrelate fieldseekerContainerrelatePreloader
|
||||
|
|
@ -117,10 +119,12 @@ func getPreloaders() preloaders {
|
|||
CommsEmailContact: buildCommsEmailContactPreloader(),
|
||||
CommsEmailLog: buildCommsEmailLogPreloader(),
|
||||
CommsEmailTemplate: buildCommsEmailTemplatePreloader(),
|
||||
CommsMailer: buildCommsMailerPreloader(),
|
||||
CommsPhone: buildCommsPhonePreloader(),
|
||||
CommsTextJob: buildCommsTextJobPreloader(),
|
||||
CommsTextLog: buildCommsTextLogPreloader(),
|
||||
ComplianceReportRequest: buildComplianceReportRequestPreloader(),
|
||||
ComplianceReportRequestMailer: buildComplianceReportRequestMailerPreloader(),
|
||||
DistrictSubscriptionEmail: buildDistrictSubscriptionEmailPreloader(),
|
||||
DistrictSubscriptionPhone: buildDistrictSubscriptionPhonePreloader(),
|
||||
FieldseekerContainerrelate: buildFieldseekerContainerrelatePreloader(),
|
||||
|
|
@ -209,10 +213,12 @@ type thenLoaders[Q orm.Loadable] struct {
|
|||
CommsEmailContact commsEmailContactThenLoader[Q]
|
||||
CommsEmailLog commsEmailLogThenLoader[Q]
|
||||
CommsEmailTemplate commsEmailTemplateThenLoader[Q]
|
||||
CommsMailer commsMailerThenLoader[Q]
|
||||
CommsPhone commsPhoneThenLoader[Q]
|
||||
CommsTextJob commsTextJobThenLoader[Q]
|
||||
CommsTextLog commsTextLogThenLoader[Q]
|
||||
ComplianceReportRequest complianceReportRequestThenLoader[Q]
|
||||
ComplianceReportRequestMailer complianceReportRequestMailerThenLoader[Q]
|
||||
DistrictSubscriptionEmail districtSubscriptionEmailThenLoader[Q]
|
||||
DistrictSubscriptionPhone districtSubscriptionPhoneThenLoader[Q]
|
||||
FieldseekerContainerrelate fieldseekerContainerrelateThenLoader[Q]
|
||||
|
|
@ -295,10 +301,12 @@ func getThenLoaders[Q orm.Loadable]() thenLoaders[Q] {
|
|||
CommsEmailContact: buildCommsEmailContactThenLoader[Q](),
|
||||
CommsEmailLog: buildCommsEmailLogThenLoader[Q](),
|
||||
CommsEmailTemplate: buildCommsEmailTemplateThenLoader[Q](),
|
||||
CommsMailer: buildCommsMailerThenLoader[Q](),
|
||||
CommsPhone: buildCommsPhoneThenLoader[Q](),
|
||||
CommsTextJob: buildCommsTextJobThenLoader[Q](),
|
||||
CommsTextLog: buildCommsTextLogThenLoader[Q](),
|
||||
ComplianceReportRequest: buildComplianceReportRequestThenLoader[Q](),
|
||||
ComplianceReportRequestMailer: buildComplianceReportRequestMailerThenLoader[Q](),
|
||||
DistrictSubscriptionEmail: buildDistrictSubscriptionEmailThenLoader[Q](),
|
||||
DistrictSubscriptionPhone: buildDistrictSubscriptionPhoneThenLoader[Q](),
|
||||
FieldseekerContainerrelate: buildFieldseekerContainerrelateThenLoader[Q](),
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ func Where[Q psql.Filterable]() struct {
|
|||
CommsTextJobs commsTextJobWhere[Q]
|
||||
CommsTextLogs commsTextLogWhere[Q]
|
||||
ComplianceReportRequests complianceReportRequestWhere[Q]
|
||||
ComplianceReportRequestMailers complianceReportRequestMailerWhere[Q]
|
||||
DistrictSubscriptionEmails districtSubscriptionEmailWhere[Q]
|
||||
DistrictSubscriptionPhones districtSubscriptionPhoneWhere[Q]
|
||||
FieldseekerContainerrelates fieldseekerContainerrelateWhere[Q]
|
||||
|
|
@ -129,6 +130,7 @@ func Where[Q psql.Filterable]() struct {
|
|||
CommsTextJobs commsTextJobWhere[Q]
|
||||
CommsTextLogs commsTextLogWhere[Q]
|
||||
ComplianceReportRequests complianceReportRequestWhere[Q]
|
||||
ComplianceReportRequestMailers complianceReportRequestMailerWhere[Q]
|
||||
DistrictSubscriptionEmails districtSubscriptionEmailWhere[Q]
|
||||
DistrictSubscriptionPhones districtSubscriptionPhoneWhere[Q]
|
||||
FieldseekerContainerrelates fieldseekerContainerrelateWhere[Q]
|
||||
|
|
@ -221,6 +223,7 @@ func Where[Q psql.Filterable]() struct {
|
|||
CommsTextJobs: buildCommsTextJobWhere[Q](CommsTextJobs.Columns),
|
||||
CommsTextLogs: buildCommsTextLogWhere[Q](CommsTextLogs.Columns),
|
||||
ComplianceReportRequests: buildComplianceReportRequestWhere[Q](ComplianceReportRequests.Columns),
|
||||
ComplianceReportRequestMailers: buildComplianceReportRequestMailerWhere[Q](ComplianceReportRequestMailers.Columns),
|
||||
DistrictSubscriptionEmails: buildDistrictSubscriptionEmailWhere[Q](DistrictSubscriptionEmails.Columns),
|
||||
DistrictSubscriptionPhones: buildDistrictSubscriptionPhoneWhere[Q](DistrictSubscriptionPhones.Columns),
|
||||
FieldseekerContainerrelates: buildFieldseekerContainerrelateWhere[Q](FieldseekerContainerrelates.Columns),
|
||||
|
|
|
|||
|
|
@ -5,7 +5,9 @@ package models
|
|||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/Gleipnir-Technology/bob"
|
||||
|
|
@ -15,15 +17,25 @@ import (
|
|||
"github.com/Gleipnir-Technology/bob/dialect/psql/sm"
|
||||
"github.com/Gleipnir-Technology/bob/dialect/psql/um"
|
||||
"github.com/Gleipnir-Technology/bob/expr"
|
||||
enums "github.com/Gleipnir-Technology/nidus-sync/db/enums"
|
||||
"github.com/Gleipnir-Technology/bob/mods"
|
||||
"github.com/Gleipnir-Technology/bob/orm"
|
||||
"github.com/Gleipnir-Technology/bob/types/pgtypes"
|
||||
"github.com/aarondl/opt/omit"
|
||||
"github.com/google/uuid"
|
||||
"github.com/stephenafamo/scan"
|
||||
)
|
||||
|
||||
// CommsMailer is an object representing the database table.
|
||||
type CommsMailer struct {
|
||||
Created time.Time `db:"created" `
|
||||
ID int32 `db:"id,pk" `
|
||||
Type enums.CommsMailertype `db:"type_" `
|
||||
AddressID int32 `db:"address_id" `
|
||||
Created time.Time `db:"created" `
|
||||
ID int32 `db:"id,pk" `
|
||||
Recipient string `db:"recipient" `
|
||||
UUID uuid.UUID `db:"uuid" `
|
||||
|
||||
R commsMailerR `db:"-" `
|
||||
|
||||
C commsMailerC `db:"-" `
|
||||
}
|
||||
|
||||
// CommsMailerSlice is an alias for a slice of pointers to CommsMailer.
|
||||
|
|
@ -36,24 +48,34 @@ var CommsMailers = psql.NewTablex[*CommsMailer, CommsMailerSlice, *CommsMailerSe
|
|||
// CommsMailersQuery is a query on the mailer table
|
||||
type CommsMailersQuery = *psql.ViewQuery[*CommsMailer, CommsMailerSlice]
|
||||
|
||||
// commsMailerR is where relationships are stored.
|
||||
type commsMailerR struct {
|
||||
Address *Address // comms.mailer.mailer_address_id_fkey
|
||||
ComplianceReportRequests ComplianceReportRequestSlice // compliance_report_request_mailer.compliance_report_request_mai_compliance_report_request_id_fkeycompliance_report_request_mailer.compliance_report_request_mailer_mailer_id_fkey
|
||||
}
|
||||
|
||||
func buildCommsMailerColumns(alias string) commsMailerColumns {
|
||||
return commsMailerColumns{
|
||||
ColumnsExpr: expr.NewColumnsExpr(
|
||||
"created", "id", "type_",
|
||||
"address_id", "created", "id", "recipient", "uuid",
|
||||
).WithParent("comms.mailer"),
|
||||
tableAlias: alias,
|
||||
AddressID: psql.Quote(alias, "address_id"),
|
||||
Created: psql.Quote(alias, "created"),
|
||||
ID: psql.Quote(alias, "id"),
|
||||
Type: psql.Quote(alias, "type_"),
|
||||
Recipient: psql.Quote(alias, "recipient"),
|
||||
UUID: psql.Quote(alias, "uuid"),
|
||||
}
|
||||
}
|
||||
|
||||
type commsMailerColumns struct {
|
||||
expr.ColumnsExpr
|
||||
tableAlias string
|
||||
AddressID psql.Expression
|
||||
Created psql.Expression
|
||||
ID psql.Expression
|
||||
Type psql.Expression
|
||||
Recipient psql.Expression
|
||||
UUID psql.Expression
|
||||
}
|
||||
|
||||
func (c commsMailerColumns) Alias() string {
|
||||
|
|
@ -68,34 +90,48 @@ func (commsMailerColumns) AliasedAs(alias string) commsMailerColumns {
|
|||
// All values are optional, and do not have to be set
|
||||
// Generated columns are not included
|
||||
type CommsMailerSetter struct {
|
||||
Created omit.Val[time.Time] `db:"created" `
|
||||
ID omit.Val[int32] `db:"id,pk" `
|
||||
Type omit.Val[enums.CommsMailertype] `db:"type_" `
|
||||
AddressID omit.Val[int32] `db:"address_id" `
|
||||
Created omit.Val[time.Time] `db:"created" `
|
||||
ID omit.Val[int32] `db:"id,pk" `
|
||||
Recipient omit.Val[string] `db:"recipient" `
|
||||
UUID omit.Val[uuid.UUID] `db:"uuid" `
|
||||
}
|
||||
|
||||
func (s CommsMailerSetter) SetColumns() []string {
|
||||
vals := make([]string, 0, 3)
|
||||
vals := make([]string, 0, 5)
|
||||
if s.AddressID.IsValue() {
|
||||
vals = append(vals, "address_id")
|
||||
}
|
||||
if s.Created.IsValue() {
|
||||
vals = append(vals, "created")
|
||||
}
|
||||
if s.ID.IsValue() {
|
||||
vals = append(vals, "id")
|
||||
}
|
||||
if s.Type.IsValue() {
|
||||
vals = append(vals, "type_")
|
||||
if s.Recipient.IsValue() {
|
||||
vals = append(vals, "recipient")
|
||||
}
|
||||
if s.UUID.IsValue() {
|
||||
vals = append(vals, "uuid")
|
||||
}
|
||||
return vals
|
||||
}
|
||||
|
||||
func (s CommsMailerSetter) Overwrite(t *CommsMailer) {
|
||||
if s.AddressID.IsValue() {
|
||||
t.AddressID = s.AddressID.MustGet()
|
||||
}
|
||||
if s.Created.IsValue() {
|
||||
t.Created = s.Created.MustGet()
|
||||
}
|
||||
if s.ID.IsValue() {
|
||||
t.ID = s.ID.MustGet()
|
||||
}
|
||||
if s.Type.IsValue() {
|
||||
t.Type = s.Type.MustGet()
|
||||
if s.Recipient.IsValue() {
|
||||
t.Recipient = s.Recipient.MustGet()
|
||||
}
|
||||
if s.UUID.IsValue() {
|
||||
t.UUID = s.UUID.MustGet()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -105,25 +141,37 @@ func (s *CommsMailerSetter) Apply(q *dialect.InsertQuery) {
|
|||
})
|
||||
|
||||
q.AppendValues(bob.ExpressionFunc(func(ctx context.Context, w io.StringWriter, d bob.Dialect, start int) ([]any, error) {
|
||||
vals := make([]bob.Expression, 3)
|
||||
if s.Created.IsValue() {
|
||||
vals[0] = psql.Arg(s.Created.MustGet())
|
||||
vals := make([]bob.Expression, 5)
|
||||
if s.AddressID.IsValue() {
|
||||
vals[0] = psql.Arg(s.AddressID.MustGet())
|
||||
} else {
|
||||
vals[0] = psql.Raw("DEFAULT")
|
||||
}
|
||||
|
||||
if s.ID.IsValue() {
|
||||
vals[1] = psql.Arg(s.ID.MustGet())
|
||||
if s.Created.IsValue() {
|
||||
vals[1] = psql.Arg(s.Created.MustGet())
|
||||
} else {
|
||||
vals[1] = psql.Raw("DEFAULT")
|
||||
}
|
||||
|
||||
if s.Type.IsValue() {
|
||||
vals[2] = psql.Arg(s.Type.MustGet())
|
||||
if s.ID.IsValue() {
|
||||
vals[2] = psql.Arg(s.ID.MustGet())
|
||||
} else {
|
||||
vals[2] = psql.Raw("DEFAULT")
|
||||
}
|
||||
|
||||
if s.Recipient.IsValue() {
|
||||
vals[3] = psql.Arg(s.Recipient.MustGet())
|
||||
} else {
|
||||
vals[3] = psql.Raw("DEFAULT")
|
||||
}
|
||||
|
||||
if s.UUID.IsValue() {
|
||||
vals[4] = psql.Arg(s.UUID.MustGet())
|
||||
} else {
|
||||
vals[4] = psql.Raw("DEFAULT")
|
||||
}
|
||||
|
||||
return bob.ExpressSlice(ctx, w, d, start, vals, "", ", ", "")
|
||||
}))
|
||||
}
|
||||
|
|
@ -133,7 +181,14 @@ func (s CommsMailerSetter) UpdateMod() bob.Mod[*dialect.UpdateQuery] {
|
|||
}
|
||||
|
||||
func (s CommsMailerSetter) Expressions(prefix ...string) []bob.Expression {
|
||||
exprs := make([]bob.Expression, 0, 3)
|
||||
exprs := make([]bob.Expression, 0, 5)
|
||||
|
||||
if s.AddressID.IsValue() {
|
||||
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
||||
psql.Quote(append(prefix, "address_id")...),
|
||||
psql.Arg(s.AddressID),
|
||||
}})
|
||||
}
|
||||
|
||||
if s.Created.IsValue() {
|
||||
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
||||
|
|
@ -149,10 +204,17 @@ func (s CommsMailerSetter) Expressions(prefix ...string) []bob.Expression {
|
|||
}})
|
||||
}
|
||||
|
||||
if s.Type.IsValue() {
|
||||
if s.Recipient.IsValue() {
|
||||
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
||||
psql.Quote(append(prefix, "type_")...),
|
||||
psql.Arg(s.Type),
|
||||
psql.Quote(append(prefix, "recipient")...),
|
||||
psql.Arg(s.Recipient),
|
||||
}})
|
||||
}
|
||||
|
||||
if s.UUID.IsValue() {
|
||||
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
||||
psql.Quote(append(prefix, "uuid")...),
|
||||
psql.Arg(s.UUID),
|
||||
}})
|
||||
}
|
||||
|
||||
|
|
@ -217,6 +279,7 @@ func (o *CommsMailer) Update(ctx context.Context, exec bob.Executor, s *CommsMai
|
|||
return err
|
||||
}
|
||||
|
||||
o.R = v.R
|
||||
*o = *v
|
||||
|
||||
return nil
|
||||
|
|
@ -236,7 +299,7 @@ func (o *CommsMailer) Reload(ctx context.Context, exec bob.Executor) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
o2.R = o.R
|
||||
*o = *o2
|
||||
|
||||
return nil
|
||||
|
|
@ -283,7 +346,7 @@ func (o CommsMailerSlice) copyMatchingRows(from ...*CommsMailer) {
|
|||
if new.ID != old.ID {
|
||||
continue
|
||||
}
|
||||
|
||||
new.R = old.R
|
||||
o[i] = new
|
||||
break
|
||||
}
|
||||
|
|
@ -381,10 +444,113 @@ func (o CommsMailerSlice) ReloadAll(ctx context.Context, exec bob.Executor) erro
|
|||
return nil
|
||||
}
|
||||
|
||||
// Address starts a query for related objects on address
|
||||
func (o *CommsMailer) Address(mods ...bob.Mod[*dialect.SelectQuery]) AddressesQuery {
|
||||
return Addresses.Query(append(mods,
|
||||
sm.Where(Addresses.Columns.ID.EQ(psql.Arg(o.AddressID))),
|
||||
)...)
|
||||
}
|
||||
|
||||
func (os CommsMailerSlice) Address(mods ...bob.Mod[*dialect.SelectQuery]) AddressesQuery {
|
||||
pkAddressID := make(pgtypes.Array[int32], 0, len(os))
|
||||
for _, o := range os {
|
||||
if o == nil {
|
||||
continue
|
||||
}
|
||||
pkAddressID = append(pkAddressID, o.AddressID)
|
||||
}
|
||||
PKArgExpr := psql.Select(sm.Columns(
|
||||
psql.F("unnest", psql.Cast(psql.Arg(pkAddressID), "integer[]")),
|
||||
))
|
||||
|
||||
return Addresses.Query(append(mods,
|
||||
sm.Where(psql.Group(Addresses.Columns.ID).OP("IN", PKArgExpr)),
|
||||
)...)
|
||||
}
|
||||
|
||||
// ComplianceReportRequests starts a query for related objects on compliance_report_request
|
||||
func (o *CommsMailer) ComplianceReportRequests(mods ...bob.Mod[*dialect.SelectQuery]) ComplianceReportRequestsQuery {
|
||||
return ComplianceReportRequests.Query(append(mods,
|
||||
sm.InnerJoin(ComplianceReportRequestMailers.NameAs()).On(
|
||||
ComplianceReportRequests.Columns.ID.EQ(ComplianceReportRequestMailers.Columns.ComplianceReportRequestID)),
|
||||
sm.Where(ComplianceReportRequestMailers.Columns.MailerID.EQ(psql.Arg(o.ID))),
|
||||
)...)
|
||||
}
|
||||
|
||||
func (os CommsMailerSlice) ComplianceReportRequests(mods ...bob.Mod[*dialect.SelectQuery]) ComplianceReportRequestsQuery {
|
||||
pkID := make(pgtypes.Array[int32], 0, len(os))
|
||||
for _, o := range os {
|
||||
if o == nil {
|
||||
continue
|
||||
}
|
||||
pkID = append(pkID, o.ID)
|
||||
}
|
||||
PKArgExpr := psql.Select(sm.Columns(
|
||||
psql.F("unnest", psql.Cast(psql.Arg(pkID), "integer[]")),
|
||||
))
|
||||
|
||||
return ComplianceReportRequests.Query(append(mods,
|
||||
sm.InnerJoin(ComplianceReportRequestMailers.NameAs()).On(
|
||||
ComplianceReportRequests.Columns.ID.EQ(ComplianceReportRequestMailers.Columns.ComplianceReportRequestID),
|
||||
),
|
||||
sm.Where(psql.Group(ComplianceReportRequestMailers.Columns.MailerID).OP("IN", PKArgExpr)),
|
||||
)...)
|
||||
}
|
||||
|
||||
func attachCommsMailerAddress0(ctx context.Context, exec bob.Executor, count int, commsMailer0 *CommsMailer, address1 *Address) (*CommsMailer, error) {
|
||||
setter := &CommsMailerSetter{
|
||||
AddressID: omit.From(address1.ID),
|
||||
}
|
||||
|
||||
err := commsMailer0.Update(ctx, exec, setter)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("attachCommsMailerAddress0: %w", err)
|
||||
}
|
||||
|
||||
return commsMailer0, nil
|
||||
}
|
||||
|
||||
func (commsMailer0 *CommsMailer) InsertAddress(ctx context.Context, exec bob.Executor, related *AddressSetter) error {
|
||||
var err error
|
||||
|
||||
address1, err := Addresses.Insert(related).One(ctx, exec)
|
||||
if err != nil {
|
||||
return fmt.Errorf("inserting related objects: %w", err)
|
||||
}
|
||||
|
||||
_, err = attachCommsMailerAddress0(ctx, exec, 1, commsMailer0, address1)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
commsMailer0.R.Address = address1
|
||||
|
||||
address1.R.Mailers = append(address1.R.Mailers, commsMailer0)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (commsMailer0 *CommsMailer) AttachAddress(ctx context.Context, exec bob.Executor, address1 *Address) error {
|
||||
var err error
|
||||
|
||||
_, err = attachCommsMailerAddress0(ctx, exec, 1, commsMailer0, address1)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
commsMailer0.R.Address = address1
|
||||
|
||||
address1.R.Mailers = append(address1.R.Mailers, commsMailer0)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type commsMailerWhere[Q psql.Filterable] struct {
|
||||
Created psql.WhereMod[Q, time.Time]
|
||||
ID psql.WhereMod[Q, int32]
|
||||
Type psql.WhereMod[Q, enums.CommsMailertype]
|
||||
AddressID psql.WhereMod[Q, int32]
|
||||
Created psql.WhereMod[Q, time.Time]
|
||||
ID psql.WhereMod[Q, int32]
|
||||
Recipient psql.WhereMod[Q, string]
|
||||
UUID psql.WhereMod[Q, uuid.UUID]
|
||||
}
|
||||
|
||||
func (commsMailerWhere[Q]) AliasedAs(alias string) commsMailerWhere[Q] {
|
||||
|
|
@ -393,8 +559,379 @@ func (commsMailerWhere[Q]) AliasedAs(alias string) commsMailerWhere[Q] {
|
|||
|
||||
func buildCommsMailerWhere[Q psql.Filterable](cols commsMailerColumns) commsMailerWhere[Q] {
|
||||
return commsMailerWhere[Q]{
|
||||
Created: psql.Where[Q, time.Time](cols.Created),
|
||||
ID: psql.Where[Q, int32](cols.ID),
|
||||
Type: psql.Where[Q, enums.CommsMailertype](cols.Type),
|
||||
AddressID: psql.Where[Q, int32](cols.AddressID),
|
||||
Created: psql.Where[Q, time.Time](cols.Created),
|
||||
ID: psql.Where[Q, int32](cols.ID),
|
||||
Recipient: psql.Where[Q, string](cols.Recipient),
|
||||
UUID: psql.Where[Q, uuid.UUID](cols.UUID),
|
||||
}
|
||||
}
|
||||
|
||||
func (o *CommsMailer) Preload(name string, retrieved any) error {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch name {
|
||||
case "Address":
|
||||
rel, ok := retrieved.(*Address)
|
||||
if !ok {
|
||||
return fmt.Errorf("commsMailer cannot load %T as %q", retrieved, name)
|
||||
}
|
||||
|
||||
o.R.Address = rel
|
||||
|
||||
if rel != nil {
|
||||
rel.R.Mailers = CommsMailerSlice{o}
|
||||
}
|
||||
return nil
|
||||
case "ComplianceReportRequests":
|
||||
rels, ok := retrieved.(ComplianceReportRequestSlice)
|
||||
if !ok {
|
||||
return fmt.Errorf("commsMailer cannot load %T as %q", retrieved, name)
|
||||
}
|
||||
|
||||
o.R.ComplianceReportRequests = rels
|
||||
|
||||
for _, rel := range rels {
|
||||
if rel != nil {
|
||||
rel.R.Mailers = CommsMailerSlice{o}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("commsMailer has no relationship %q", name)
|
||||
}
|
||||
}
|
||||
|
||||
type commsMailerPreloader struct {
|
||||
Address func(...psql.PreloadOption) psql.Preloader
|
||||
}
|
||||
|
||||
func buildCommsMailerPreloader() commsMailerPreloader {
|
||||
return commsMailerPreloader{
|
||||
Address: func(opts ...psql.PreloadOption) psql.Preloader {
|
||||
return psql.Preload[*Address, AddressSlice](psql.PreloadRel{
|
||||
Name: "Address",
|
||||
Sides: []psql.PreloadSide{
|
||||
{
|
||||
From: CommsMailers,
|
||||
To: Addresses,
|
||||
FromColumns: []string{"address_id"},
|
||||
ToColumns: []string{"id"},
|
||||
},
|
||||
},
|
||||
}, Addresses.Columns.Names(), opts...)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
type commsMailerThenLoader[Q orm.Loadable] struct {
|
||||
Address func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
ComplianceReportRequests func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
}
|
||||
|
||||
func buildCommsMailerThenLoader[Q orm.Loadable]() commsMailerThenLoader[Q] {
|
||||
type AddressLoadInterface interface {
|
||||
LoadAddress(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
||||
}
|
||||
type ComplianceReportRequestsLoadInterface interface {
|
||||
LoadComplianceReportRequests(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
||||
}
|
||||
|
||||
return commsMailerThenLoader[Q]{
|
||||
Address: thenLoadBuilder[Q](
|
||||
"Address",
|
||||
func(ctx context.Context, exec bob.Executor, retrieved AddressLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
return retrieved.LoadAddress(ctx, exec, mods...)
|
||||
},
|
||||
),
|
||||
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...)
|
||||
},
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
// LoadAddress loads the commsMailer's Address into the .R struct
|
||||
func (o *CommsMailer) LoadAddress(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Reset the relationship
|
||||
o.R.Address = nil
|
||||
|
||||
related, err := o.Address(mods...).One(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
related.R.Mailers = CommsMailerSlice{o}
|
||||
|
||||
o.R.Address = related
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadAddress loads the commsMailer's Address into the .R struct
|
||||
func (os CommsMailerSlice) LoadAddress(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if len(os) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
addresses, err := os.Address(mods...).All(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, o := range os {
|
||||
if o == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, rel := range addresses {
|
||||
|
||||
if !(o.AddressID == rel.ID) {
|
||||
continue
|
||||
}
|
||||
|
||||
rel.R.Mailers = append(rel.R.Mailers, o)
|
||||
|
||||
o.R.Address = rel
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadComplianceReportRequests loads the commsMailer's ComplianceReportRequests into the .R struct
|
||||
func (o *CommsMailer) LoadComplianceReportRequests(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Reset the relationship
|
||||
o.R.ComplianceReportRequests = nil
|
||||
|
||||
related, err := o.ComplianceReportRequests(mods...).All(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, rel := range related {
|
||||
rel.R.Mailers = CommsMailerSlice{o}
|
||||
}
|
||||
|
||||
o.R.ComplianceReportRequests = related
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadComplianceReportRequests loads the commsMailer's ComplianceReportRequests into the .R struct
|
||||
func (os CommsMailerSlice) LoadComplianceReportRequests(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if len(os) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// since we are changing the columns, we need to check if the original columns were set or add the defaults
|
||||
sq := dialect.SelectQuery{}
|
||||
for _, mod := range mods {
|
||||
mod.Apply(&sq)
|
||||
}
|
||||
|
||||
if len(sq.SelectList.Columns) == 0 {
|
||||
mods = append(mods, sm.Columns(ComplianceReportRequests.Columns))
|
||||
}
|
||||
|
||||
q := os.ComplianceReportRequests(append(
|
||||
mods,
|
||||
sm.Columns(ComplianceReportRequestMailers.Columns.MailerID.As("related_comms.mailer.ID")),
|
||||
)...)
|
||||
|
||||
IDSlice := []int32{}
|
||||
|
||||
mapper := scan.Mod(scan.StructMapper[*ComplianceReportRequest](), func(ctx context.Context, cols []string) (scan.BeforeFunc, func(any, any) error) {
|
||||
return func(row *scan.Row) (any, error) {
|
||||
IDSlice = append(IDSlice, *new(int32))
|
||||
row.ScheduleScanByName("related_comms.mailer.ID", &IDSlice[len(IDSlice)-1])
|
||||
|
||||
return nil, nil
|
||||
},
|
||||
func(any, any) error {
|
||||
return nil
|
||||
}
|
||||
})
|
||||
|
||||
complianceReportRequests, err := bob.Allx[bob.SliceTransformer[*ComplianceReportRequest, ComplianceReportRequestSlice]](ctx, exec, q, mapper)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, o := range os {
|
||||
o.R.ComplianceReportRequests = nil
|
||||
}
|
||||
|
||||
for _, o := range os {
|
||||
for i, rel := range complianceReportRequests {
|
||||
if !(o.ID == IDSlice[i]) {
|
||||
continue
|
||||
}
|
||||
|
||||
rel.R.Mailers = append(rel.R.Mailers, o)
|
||||
|
||||
o.R.ComplianceReportRequests = append(o.R.ComplianceReportRequests, rel)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// commsMailerC is where relationship counts are stored.
|
||||
type commsMailerC struct {
|
||||
ComplianceReportRequests *int64
|
||||
}
|
||||
|
||||
// PreloadCount sets a count in the C struct by name
|
||||
func (o *CommsMailer) PreloadCount(name string, count int64) error {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch name {
|
||||
case "ComplianceReportRequests":
|
||||
o.C.ComplianceReportRequests = &count
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type commsMailerCountPreloader struct {
|
||||
ComplianceReportRequests func(...bob.Mod[*dialect.SelectQuery]) psql.Preloader
|
||||
}
|
||||
|
||||
func buildCommsMailerCountPreloader() commsMailerCountPreloader {
|
||||
return commsMailerCountPreloader{
|
||||
ComplianceReportRequests: func(mods ...bob.Mod[*dialect.SelectQuery]) psql.Preloader {
|
||||
return countPreloader[*CommsMailer]("ComplianceReportRequests", func(parent string) bob.Expression {
|
||||
// Build a correlated subquery: (SELECT COUNT(*) FROM related WHERE fk = parent.pk)
|
||||
if parent == "" {
|
||||
parent = CommsMailers.Alias()
|
||||
}
|
||||
|
||||
subqueryMods := []bob.Mod[*dialect.SelectQuery]{
|
||||
sm.Columns(psql.Raw("count(*)")),
|
||||
|
||||
sm.From(ComplianceReportRequestMailers.Name()),
|
||||
sm.Where(psql.Quote(ComplianceReportRequestMailers.Alias(), "mailer_id").EQ(psql.Quote(parent, "id"))),
|
||||
sm.InnerJoin(ComplianceReportRequests.Name()).On(
|
||||
psql.Quote(ComplianceReportRequests.Alias(), "id").EQ(psql.Quote(ComplianceReportRequestMailers.Alias(), "compliance_report_request_id")),
|
||||
),
|
||||
}
|
||||
subqueryMods = append(subqueryMods, mods...)
|
||||
return psql.Group(psql.Select(subqueryMods...).Expression)
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
type commsMailerCountThenLoader[Q orm.Loadable] struct {
|
||||
ComplianceReportRequests func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
}
|
||||
|
||||
func buildCommsMailerCountThenLoader[Q orm.Loadable]() commsMailerCountThenLoader[Q] {
|
||||
type ComplianceReportRequestsCountInterface interface {
|
||||
LoadCountComplianceReportRequests(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
||||
}
|
||||
|
||||
return commsMailerCountThenLoader[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...)
|
||||
},
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
// LoadCountComplianceReportRequests loads the count of ComplianceReportRequests into the C struct
|
||||
func (o *CommsMailer) LoadCountComplianceReportRequests(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)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
o.C.ComplianceReportRequests = &count
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadCountComplianceReportRequests loads the count of ComplianceReportRequests for a slice
|
||||
func (os CommsMailerSlice) LoadCountComplianceReportRequests(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 {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type commsMailerJoins[Q dialect.Joinable] struct {
|
||||
typ string
|
||||
Address modAs[Q, addressColumns]
|
||||
ComplianceReportRequests modAs[Q, complianceReportRequestColumns]
|
||||
}
|
||||
|
||||
func (j commsMailerJoins[Q]) aliasedAs(alias string) commsMailerJoins[Q] {
|
||||
return buildCommsMailerJoins[Q](buildCommsMailerColumns(alias), j.typ)
|
||||
}
|
||||
|
||||
func buildCommsMailerJoins[Q dialect.Joinable](cols commsMailerColumns, typ string) commsMailerJoins[Q] {
|
||||
return commsMailerJoins[Q]{
|
||||
typ: typ,
|
||||
Address: modAs[Q, addressColumns]{
|
||||
c: Addresses.Columns,
|
||||
f: func(to addressColumns) bob.Mod[Q] {
|
||||
mods := make(mods.QueryMods[Q], 0, 1)
|
||||
|
||||
{
|
||||
mods = append(mods, dialect.Join[Q](typ, Addresses.Name().As(to.Alias())).On(
|
||||
to.ID.EQ(cols.AddressID),
|
||||
))
|
||||
}
|
||||
|
||||
return mods
|
||||
},
|
||||
},
|
||||
ComplianceReportRequests: modAs[Q, complianceReportRequestColumns]{
|
||||
c: ComplianceReportRequests.Columns,
|
||||
f: func(to complianceReportRequestColumns) bob.Mod[Q] {
|
||||
random := strconv.FormatInt(randInt(), 10)
|
||||
mods := make(mods.QueryMods[Q], 0, 2)
|
||||
|
||||
{
|
||||
to := ComplianceReportRequestMailers.Columns.AliasedAs(ComplianceReportRequestMailers.Columns.Alias() + random)
|
||||
mods = append(mods, dialect.Join[Q](typ, ComplianceReportRequestMailers.Name().As(to.Alias())).On(
|
||||
to.MailerID.EQ(cols.ID),
|
||||
))
|
||||
}
|
||||
{
|
||||
cols := ComplianceReportRequestMailers.Columns.AliasedAs(ComplianceReportRequestMailers.Columns.Alias() + random)
|
||||
mods = append(mods, dialect.Join[Q](typ, ComplianceReportRequests.Name().As(to.Alias())).On(
|
||||
to.ID.EQ(cols.ComplianceReportRequestID),
|
||||
))
|
||||
}
|
||||
|
||||
return mods
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import (
|
|||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/Gleipnir-Technology/bob"
|
||||
|
|
@ -20,6 +21,7 @@ import (
|
|||
"github.com/Gleipnir-Technology/bob/orm"
|
||||
"github.com/Gleipnir-Technology/bob/types/pgtypes"
|
||||
"github.com/aarondl/opt/omit"
|
||||
"github.com/stephenafamo/scan"
|
||||
)
|
||||
|
||||
// ComplianceReportRequest is an object representing the database table.
|
||||
|
|
@ -32,6 +34,8 @@ type ComplianceReportRequest struct {
|
|||
SiteVersion int32 `db:"site_version" `
|
||||
|
||||
R complianceReportRequestR `db:"-" `
|
||||
|
||||
C complianceReportRequestC `db:"-" `
|
||||
}
|
||||
|
||||
// ComplianceReportRequestSlice is an alias for a slice of pointers to ComplianceReportRequest.
|
||||
|
|
@ -46,8 +50,9 @@ type ComplianceReportRequestsQuery = *psql.ViewQuery[*ComplianceReportRequest, C
|
|||
|
||||
// complianceReportRequestR is where relationships are stored.
|
||||
type complianceReportRequestR struct {
|
||||
CreatorUser *User // compliance_report_request.compliance_report_request_creator_fkey
|
||||
Site *Site // compliance_report_request.compliance_report_request_site_id_site_version_fkey
|
||||
CreatorUser *User // compliance_report_request.compliance_report_request_creator_fkey
|
||||
Site *Site // compliance_report_request.compliance_report_request_site_id_site_version_fkey
|
||||
Mailers CommsMailerSlice // compliance_report_request_mailer.compliance_report_request_mai_compliance_report_request_id_fkeycompliance_report_request_mailer.compliance_report_request_mailer_mailer_id_fkey
|
||||
}
|
||||
|
||||
func buildComplianceReportRequestColumns(alias string) complianceReportRequestColumns {
|
||||
|
|
@ -514,6 +519,35 @@ func (os ComplianceReportRequestSlice) Site(mods ...bob.Mod[*dialect.SelectQuery
|
|||
)...)
|
||||
}
|
||||
|
||||
// Mailers starts a query for related objects on comms.mailer
|
||||
func (o *ComplianceReportRequest) Mailers(mods ...bob.Mod[*dialect.SelectQuery]) CommsMailersQuery {
|
||||
return CommsMailers.Query(append(mods,
|
||||
sm.InnerJoin(ComplianceReportRequestMailers.NameAs()).On(
|
||||
CommsMailers.Columns.ID.EQ(ComplianceReportRequestMailers.Columns.MailerID)),
|
||||
sm.Where(ComplianceReportRequestMailers.Columns.ComplianceReportRequestID.EQ(psql.Arg(o.ID))),
|
||||
)...)
|
||||
}
|
||||
|
||||
func (os ComplianceReportRequestSlice) Mailers(mods ...bob.Mod[*dialect.SelectQuery]) CommsMailersQuery {
|
||||
pkID := make(pgtypes.Array[int32], 0, len(os))
|
||||
for _, o := range os {
|
||||
if o == nil {
|
||||
continue
|
||||
}
|
||||
pkID = append(pkID, o.ID)
|
||||
}
|
||||
PKArgExpr := psql.Select(sm.Columns(
|
||||
psql.F("unnest", psql.Cast(psql.Arg(pkID), "integer[]")),
|
||||
))
|
||||
|
||||
return CommsMailers.Query(append(mods,
|
||||
sm.InnerJoin(ComplianceReportRequestMailers.NameAs()).On(
|
||||
CommsMailers.Columns.ID.EQ(ComplianceReportRequestMailers.Columns.MailerID),
|
||||
),
|
||||
sm.Where(psql.Group(ComplianceReportRequestMailers.Columns.ComplianceReportRequestID).OP("IN", PKArgExpr)),
|
||||
)...)
|
||||
}
|
||||
|
||||
func attachComplianceReportRequestCreatorUser0(ctx context.Context, exec bob.Executor, count int, complianceReportRequest0 *ComplianceReportRequest, user1 *User) (*ComplianceReportRequest, error) {
|
||||
setter := &ComplianceReportRequestSetter{
|
||||
Creator: omit.From(user1.ID),
|
||||
|
|
@ -665,6 +699,20 @@ func (o *ComplianceReportRequest) Preload(name string, retrieved any) error {
|
|||
rel.R.ComplianceReportRequests = ComplianceReportRequestSlice{o}
|
||||
}
|
||||
return nil
|
||||
case "Mailers":
|
||||
rels, ok := retrieved.(CommsMailerSlice)
|
||||
if !ok {
|
||||
return fmt.Errorf("complianceReportRequest cannot load %T as %q", retrieved, name)
|
||||
}
|
||||
|
||||
o.R.Mailers = rels
|
||||
|
||||
for _, rel := range rels {
|
||||
if rel != nil {
|
||||
rel.R.ComplianceReportRequests = ComplianceReportRequestSlice{o}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("complianceReportRequest has no relationship %q", name)
|
||||
}
|
||||
|
|
@ -709,6 +757,7 @@ func buildComplianceReportRequestPreloader() complianceReportRequestPreloader {
|
|||
type complianceReportRequestThenLoader[Q orm.Loadable] struct {
|
||||
CreatorUser func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
Site func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
Mailers func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
}
|
||||
|
||||
func buildComplianceReportRequestThenLoader[Q orm.Loadable]() complianceReportRequestThenLoader[Q] {
|
||||
|
|
@ -718,6 +767,9 @@ func buildComplianceReportRequestThenLoader[Q orm.Loadable]() complianceReportRe
|
|||
type SiteLoadInterface interface {
|
||||
LoadSite(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
||||
}
|
||||
type MailersLoadInterface interface {
|
||||
LoadMailers(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
||||
}
|
||||
|
||||
return complianceReportRequestThenLoader[Q]{
|
||||
CreatorUser: thenLoadBuilder[Q](
|
||||
|
|
@ -732,6 +784,12 @@ func buildComplianceReportRequestThenLoader[Q orm.Loadable]() complianceReportRe
|
|||
return retrieved.LoadSite(ctx, exec, mods...)
|
||||
},
|
||||
),
|
||||
Mailers: thenLoadBuilder[Q](
|
||||
"Mailers",
|
||||
func(ctx context.Context, exec bob.Executor, retrieved MailersLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
return retrieved.LoadMailers(ctx, exec, mods...)
|
||||
},
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -843,10 +901,188 @@ func (os ComplianceReportRequestSlice) LoadSite(ctx context.Context, exec bob.Ex
|
|||
return nil
|
||||
}
|
||||
|
||||
// LoadMailers loads the complianceReportRequest's Mailers into the .R struct
|
||||
func (o *ComplianceReportRequest) LoadMailers(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Reset the relationship
|
||||
o.R.Mailers = nil
|
||||
|
||||
related, err := o.Mailers(mods...).All(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, rel := range related {
|
||||
rel.R.ComplianceReportRequests = ComplianceReportRequestSlice{o}
|
||||
}
|
||||
|
||||
o.R.Mailers = related
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadMailers loads the complianceReportRequest's Mailers into the .R struct
|
||||
func (os ComplianceReportRequestSlice) LoadMailers(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if len(os) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// since we are changing the columns, we need to check if the original columns were set or add the defaults
|
||||
sq := dialect.SelectQuery{}
|
||||
for _, mod := range mods {
|
||||
mod.Apply(&sq)
|
||||
}
|
||||
|
||||
if len(sq.SelectList.Columns) == 0 {
|
||||
mods = append(mods, sm.Columns(CommsMailers.Columns))
|
||||
}
|
||||
|
||||
q := os.Mailers(append(
|
||||
mods,
|
||||
sm.Columns(ComplianceReportRequestMailers.Columns.ComplianceReportRequestID.As("related_compliance_report_request.ID")),
|
||||
)...)
|
||||
|
||||
IDSlice := []int32{}
|
||||
|
||||
mapper := scan.Mod(scan.StructMapper[*CommsMailer](), func(ctx context.Context, cols []string) (scan.BeforeFunc, func(any, any) error) {
|
||||
return func(row *scan.Row) (any, error) {
|
||||
IDSlice = append(IDSlice, *new(int32))
|
||||
row.ScheduleScanByName("related_compliance_report_request.ID", &IDSlice[len(IDSlice)-1])
|
||||
|
||||
return nil, nil
|
||||
},
|
||||
func(any, any) error {
|
||||
return nil
|
||||
}
|
||||
})
|
||||
|
||||
commsMailers, err := bob.Allx[bob.SliceTransformer[*CommsMailer, CommsMailerSlice]](ctx, exec, q, mapper)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, o := range os {
|
||||
o.R.Mailers = nil
|
||||
}
|
||||
|
||||
for _, o := range os {
|
||||
for i, rel := range commsMailers {
|
||||
if !(o.ID == IDSlice[i]) {
|
||||
continue
|
||||
}
|
||||
|
||||
rel.R.ComplianceReportRequests = append(rel.R.ComplianceReportRequests, o)
|
||||
|
||||
o.R.Mailers = append(o.R.Mailers, rel)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// complianceReportRequestC is where relationship counts are stored.
|
||||
type complianceReportRequestC struct {
|
||||
Mailers *int64
|
||||
}
|
||||
|
||||
// PreloadCount sets a count in the C struct by name
|
||||
func (o *ComplianceReportRequest) PreloadCount(name string, count int64) error {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch name {
|
||||
case "Mailers":
|
||||
o.C.Mailers = &count
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type complianceReportRequestCountPreloader struct {
|
||||
Mailers func(...bob.Mod[*dialect.SelectQuery]) psql.Preloader
|
||||
}
|
||||
|
||||
func buildComplianceReportRequestCountPreloader() complianceReportRequestCountPreloader {
|
||||
return complianceReportRequestCountPreloader{
|
||||
Mailers: func(mods ...bob.Mod[*dialect.SelectQuery]) psql.Preloader {
|
||||
return countPreloader[*ComplianceReportRequest]("Mailers", func(parent string) bob.Expression {
|
||||
// Build a correlated subquery: (SELECT COUNT(*) FROM related WHERE fk = parent.pk)
|
||||
if parent == "" {
|
||||
parent = ComplianceReportRequests.Alias()
|
||||
}
|
||||
|
||||
subqueryMods := []bob.Mod[*dialect.SelectQuery]{
|
||||
sm.Columns(psql.Raw("count(*)")),
|
||||
|
||||
sm.From(ComplianceReportRequestMailers.Name()),
|
||||
sm.Where(psql.Quote(ComplianceReportRequestMailers.Alias(), "compliance_report_request_id").EQ(psql.Quote(parent, "id"))),
|
||||
sm.InnerJoin(CommsMailers.Name()).On(
|
||||
psql.Quote(CommsMailers.Alias(), "id").EQ(psql.Quote(ComplianceReportRequestMailers.Alias(), "mailer_id")),
|
||||
),
|
||||
}
|
||||
subqueryMods = append(subqueryMods, mods...)
|
||||
return psql.Group(psql.Select(subqueryMods...).Expression)
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
type complianceReportRequestCountThenLoader[Q orm.Loadable] struct {
|
||||
Mailers func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
}
|
||||
|
||||
func buildComplianceReportRequestCountThenLoader[Q orm.Loadable]() complianceReportRequestCountThenLoader[Q] {
|
||||
type MailersCountInterface interface {
|
||||
LoadCountMailers(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
||||
}
|
||||
|
||||
return complianceReportRequestCountThenLoader[Q]{
|
||||
Mailers: countThenLoadBuilder[Q](
|
||||
"Mailers",
|
||||
func(ctx context.Context, exec bob.Executor, retrieved MailersCountInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
return retrieved.LoadCountMailers(ctx, exec, mods...)
|
||||
},
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
// LoadCountMailers loads the count of Mailers into the C struct
|
||||
func (o *ComplianceReportRequest) LoadCountMailers(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
count, err := o.Mailers(mods...).Count(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
o.C.Mailers = &count
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadCountMailers loads the count of Mailers for a slice
|
||||
func (os ComplianceReportRequestSlice) LoadCountMailers(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.LoadCountMailers(ctx, exec, mods...); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type complianceReportRequestJoins[Q dialect.Joinable] struct {
|
||||
typ string
|
||||
CreatorUser modAs[Q, userColumns]
|
||||
Site modAs[Q, siteColumns]
|
||||
Mailers modAs[Q, commsMailerColumns]
|
||||
}
|
||||
|
||||
func (j complianceReportRequestJoins[Q]) aliasedAs(alias string) complianceReportRequestJoins[Q] {
|
||||
|
|
@ -881,6 +1117,28 @@ func buildComplianceReportRequestJoins[Q dialect.Joinable](cols complianceReport
|
|||
))
|
||||
}
|
||||
|
||||
return mods
|
||||
},
|
||||
},
|
||||
Mailers: modAs[Q, commsMailerColumns]{
|
||||
c: CommsMailers.Columns,
|
||||
f: func(to commsMailerColumns) bob.Mod[Q] {
|
||||
random := strconv.FormatInt(randInt(), 10)
|
||||
mods := make(mods.QueryMods[Q], 0, 2)
|
||||
|
||||
{
|
||||
to := ComplianceReportRequestMailers.Columns.AliasedAs(ComplianceReportRequestMailers.Columns.Alias() + random)
|
||||
mods = append(mods, dialect.Join[Q](typ, ComplianceReportRequestMailers.Name().As(to.Alias())).On(
|
||||
to.ComplianceReportRequestID.EQ(cols.ID),
|
||||
))
|
||||
}
|
||||
{
|
||||
cols := ComplianceReportRequestMailers.Columns.AliasedAs(ComplianceReportRequestMailers.Columns.Alias() + random)
|
||||
mods = append(mods, dialect.Join[Q](typ, CommsMailers.Name().As(to.Alias())).On(
|
||||
to.ID.EQ(cols.MailerID),
|
||||
))
|
||||
}
|
||||
|
||||
return mods
|
||||
},
|
||||
},
|
||||
|
|
|
|||
464
db/models/compliance_report_request_mailer.bob.go
Normal file
464
db/models/compliance_report_request_mailer.bob.go
Normal file
|
|
@ -0,0 +1,464 @@
|
|||
// Code generated by BobGen psql v0.42.5. DO NOT EDIT.
|
||||
// This file is meant to be re-generated in place and/or deleted at any time.
|
||||
|
||||
package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"github.com/Gleipnir-Technology/bob"
|
||||
"github.com/Gleipnir-Technology/bob/dialect/psql"
|
||||
"github.com/Gleipnir-Technology/bob/dialect/psql/dialect"
|
||||
"github.com/Gleipnir-Technology/bob/dialect/psql/sm"
|
||||
"github.com/Gleipnir-Technology/bob/dialect/psql/um"
|
||||
"github.com/Gleipnir-Technology/bob/expr"
|
||||
"github.com/Gleipnir-Technology/bob/mods"
|
||||
"github.com/Gleipnir-Technology/bob/orm"
|
||||
"github.com/Gleipnir-Technology/bob/types/pgtypes"
|
||||
"github.com/aarondl/opt/omit"
|
||||
)
|
||||
|
||||
// ComplianceReportRequestMailer is an object representing the database table.
|
||||
type ComplianceReportRequestMailer struct {
|
||||
ComplianceReportRequestID int32 `db:"compliance_report_request_id" `
|
||||
MailerID int32 `db:"mailer_id" `
|
||||
|
||||
R complianceReportRequestMailerR `db:"-" `
|
||||
}
|
||||
|
||||
// ComplianceReportRequestMailerSlice is an alias for a slice of pointers to ComplianceReportRequestMailer.
|
||||
// This should almost always be used instead of []*ComplianceReportRequestMailer.
|
||||
type ComplianceReportRequestMailerSlice []*ComplianceReportRequestMailer
|
||||
|
||||
// ComplianceReportRequestMailers contains methods to work with the compliance_report_request_mailer view
|
||||
var ComplianceReportRequestMailers = psql.NewViewx[*ComplianceReportRequestMailer, ComplianceReportRequestMailerSlice]("", "compliance_report_request_mailer", buildComplianceReportRequestMailerColumns("compliance_report_request_mailer"))
|
||||
|
||||
// ComplianceReportRequestMailersQuery is a query on the compliance_report_request_mailer view
|
||||
type ComplianceReportRequestMailersQuery = *psql.ViewQuery[*ComplianceReportRequestMailer, ComplianceReportRequestMailerSlice]
|
||||
|
||||
// complianceReportRequestMailerR is where relationships are stored.
|
||||
type complianceReportRequestMailerR struct {
|
||||
ComplianceReportRequest *ComplianceReportRequest // compliance_report_request_mailer.compliance_report_request_mai_compliance_report_request_id_fkey
|
||||
Mailer *CommsMailer // compliance_report_request_mailer.compliance_report_request_mailer_mailer_id_fkey
|
||||
}
|
||||
|
||||
func buildComplianceReportRequestMailerColumns(alias string) complianceReportRequestMailerColumns {
|
||||
return complianceReportRequestMailerColumns{
|
||||
ColumnsExpr: expr.NewColumnsExpr(
|
||||
"compliance_report_request_id", "mailer_id",
|
||||
).WithParent("compliance_report_request_mailer"),
|
||||
tableAlias: alias,
|
||||
ComplianceReportRequestID: psql.Quote(alias, "compliance_report_request_id"),
|
||||
MailerID: psql.Quote(alias, "mailer_id"),
|
||||
}
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerColumns struct {
|
||||
expr.ColumnsExpr
|
||||
tableAlias string
|
||||
ComplianceReportRequestID psql.Expression
|
||||
MailerID psql.Expression
|
||||
}
|
||||
|
||||
func (c complianceReportRequestMailerColumns) Alias() string {
|
||||
return c.tableAlias
|
||||
}
|
||||
|
||||
func (complianceReportRequestMailerColumns) AliasedAs(alias string) complianceReportRequestMailerColumns {
|
||||
return buildComplianceReportRequestMailerColumns(alias)
|
||||
}
|
||||
|
||||
// ComplianceReportRequestMailerSetter is used for insert/upsert/update operations
|
||||
// All values are optional, and do not have to be set
|
||||
// Generated columns are not included
|
||||
type ComplianceReportRequestMailerSetter struct {
|
||||
ComplianceReportRequestID omit.Val[int32] `db:"compliance_report_request_id" `
|
||||
MailerID omit.Val[int32] `db:"mailer_id" `
|
||||
}
|
||||
|
||||
func (s ComplianceReportRequestMailerSetter) SetColumns() []string {
|
||||
vals := make([]string, 0, 2)
|
||||
if s.ComplianceReportRequestID.IsValue() {
|
||||
vals = append(vals, "compliance_report_request_id")
|
||||
}
|
||||
if s.MailerID.IsValue() {
|
||||
vals = append(vals, "mailer_id")
|
||||
}
|
||||
return vals
|
||||
}
|
||||
|
||||
func (s ComplianceReportRequestMailerSetter) Overwrite(t *ComplianceReportRequestMailer) {
|
||||
if s.ComplianceReportRequestID.IsValue() {
|
||||
t.ComplianceReportRequestID = s.ComplianceReportRequestID.MustGet()
|
||||
}
|
||||
if s.MailerID.IsValue() {
|
||||
t.MailerID = s.MailerID.MustGet()
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ComplianceReportRequestMailerSetter) Apply(q *dialect.InsertQuery) {
|
||||
q.AppendValues(bob.ExpressionFunc(func(ctx context.Context, w io.StringWriter, d bob.Dialect, start int) ([]any, error) {
|
||||
vals := make([]bob.Expression, 2)
|
||||
if s.ComplianceReportRequestID.IsValue() {
|
||||
vals[0] = psql.Arg(s.ComplianceReportRequestID.MustGet())
|
||||
} else {
|
||||
vals[0] = psql.Raw("DEFAULT")
|
||||
}
|
||||
|
||||
if s.MailerID.IsValue() {
|
||||
vals[1] = psql.Arg(s.MailerID.MustGet())
|
||||
} else {
|
||||
vals[1] = psql.Raw("DEFAULT")
|
||||
}
|
||||
|
||||
return bob.ExpressSlice(ctx, w, d, start, vals, "", ", ", "")
|
||||
}))
|
||||
}
|
||||
|
||||
func (s ComplianceReportRequestMailerSetter) UpdateMod() bob.Mod[*dialect.UpdateQuery] {
|
||||
return um.Set(s.Expressions()...)
|
||||
}
|
||||
|
||||
func (s ComplianceReportRequestMailerSetter) Expressions(prefix ...string) []bob.Expression {
|
||||
exprs := make([]bob.Expression, 0, 2)
|
||||
|
||||
if s.ComplianceReportRequestID.IsValue() {
|
||||
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
||||
psql.Quote(append(prefix, "compliance_report_request_id")...),
|
||||
psql.Arg(s.ComplianceReportRequestID),
|
||||
}})
|
||||
}
|
||||
|
||||
if s.MailerID.IsValue() {
|
||||
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
||||
psql.Quote(append(prefix, "mailer_id")...),
|
||||
psql.Arg(s.MailerID),
|
||||
}})
|
||||
}
|
||||
|
||||
return exprs
|
||||
}
|
||||
|
||||
// AfterQueryHook is called after ComplianceReportRequestMailer is retrieved from the database
|
||||
func (o *ComplianceReportRequestMailer) AfterQueryHook(ctx context.Context, exec bob.Executor, queryType bob.QueryType) error {
|
||||
var err error
|
||||
|
||||
switch queryType {
|
||||
case bob.QueryTypeSelect:
|
||||
ctx, err = ComplianceReportRequestMailers.AfterSelectHooks.RunHooks(ctx, exec, ComplianceReportRequestMailerSlice{o})
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// AfterQueryHook is called after ComplianceReportRequestMailerSlice is retrieved from the database
|
||||
func (o ComplianceReportRequestMailerSlice) AfterQueryHook(ctx context.Context, exec bob.Executor, queryType bob.QueryType) error {
|
||||
var err error
|
||||
|
||||
switch queryType {
|
||||
case bob.QueryTypeSelect:
|
||||
ctx, err = ComplianceReportRequestMailers.AfterSelectHooks.RunHooks(ctx, exec, o)
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// ComplianceReportRequest starts a query for related objects on compliance_report_request
|
||||
func (o *ComplianceReportRequestMailer) ComplianceReportRequest(mods ...bob.Mod[*dialect.SelectQuery]) ComplianceReportRequestsQuery {
|
||||
return ComplianceReportRequests.Query(append(mods,
|
||||
sm.Where(ComplianceReportRequests.Columns.ID.EQ(psql.Arg(o.ComplianceReportRequestID))),
|
||||
)...)
|
||||
}
|
||||
|
||||
func (os ComplianceReportRequestMailerSlice) ComplianceReportRequest(mods ...bob.Mod[*dialect.SelectQuery]) ComplianceReportRequestsQuery {
|
||||
pkComplianceReportRequestID := make(pgtypes.Array[int32], 0, len(os))
|
||||
for _, o := range os {
|
||||
if o == nil {
|
||||
continue
|
||||
}
|
||||
pkComplianceReportRequestID = append(pkComplianceReportRequestID, o.ComplianceReportRequestID)
|
||||
}
|
||||
PKArgExpr := psql.Select(sm.Columns(
|
||||
psql.F("unnest", psql.Cast(psql.Arg(pkComplianceReportRequestID), "integer[]")),
|
||||
))
|
||||
|
||||
return ComplianceReportRequests.Query(append(mods,
|
||||
sm.Where(psql.Group(ComplianceReportRequests.Columns.ID).OP("IN", PKArgExpr)),
|
||||
)...)
|
||||
}
|
||||
|
||||
// Mailer starts a query for related objects on comms.mailer
|
||||
func (o *ComplianceReportRequestMailer) Mailer(mods ...bob.Mod[*dialect.SelectQuery]) CommsMailersQuery {
|
||||
return CommsMailers.Query(append(mods,
|
||||
sm.Where(CommsMailers.Columns.ID.EQ(psql.Arg(o.MailerID))),
|
||||
)...)
|
||||
}
|
||||
|
||||
func (os ComplianceReportRequestMailerSlice) Mailer(mods ...bob.Mod[*dialect.SelectQuery]) CommsMailersQuery {
|
||||
pkMailerID := make(pgtypes.Array[int32], 0, len(os))
|
||||
for _, o := range os {
|
||||
if o == nil {
|
||||
continue
|
||||
}
|
||||
pkMailerID = append(pkMailerID, o.MailerID)
|
||||
}
|
||||
PKArgExpr := psql.Select(sm.Columns(
|
||||
psql.F("unnest", psql.Cast(psql.Arg(pkMailerID), "integer[]")),
|
||||
))
|
||||
|
||||
return CommsMailers.Query(append(mods,
|
||||
sm.Where(psql.Group(CommsMailers.Columns.ID).OP("IN", PKArgExpr)),
|
||||
)...)
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerWhere[Q psql.Filterable] struct {
|
||||
ComplianceReportRequestID psql.WhereMod[Q, int32]
|
||||
MailerID psql.WhereMod[Q, int32]
|
||||
}
|
||||
|
||||
func (complianceReportRequestMailerWhere[Q]) AliasedAs(alias string) complianceReportRequestMailerWhere[Q] {
|
||||
return buildComplianceReportRequestMailerWhere[Q](buildComplianceReportRequestMailerColumns(alias))
|
||||
}
|
||||
|
||||
func buildComplianceReportRequestMailerWhere[Q psql.Filterable](cols complianceReportRequestMailerColumns) complianceReportRequestMailerWhere[Q] {
|
||||
return complianceReportRequestMailerWhere[Q]{
|
||||
ComplianceReportRequestID: psql.Where[Q, int32](cols.ComplianceReportRequestID),
|
||||
MailerID: psql.Where[Q, int32](cols.MailerID),
|
||||
}
|
||||
}
|
||||
|
||||
func (o *ComplianceReportRequestMailer) Preload(name string, retrieved any) error {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch name {
|
||||
case "ComplianceReportRequest":
|
||||
rel, ok := retrieved.(*ComplianceReportRequest)
|
||||
if !ok {
|
||||
return fmt.Errorf("complianceReportRequestMailer cannot load %T as %q", retrieved, name)
|
||||
}
|
||||
|
||||
o.R.ComplianceReportRequest = rel
|
||||
|
||||
return nil
|
||||
case "Mailer":
|
||||
rel, ok := retrieved.(*CommsMailer)
|
||||
if !ok {
|
||||
return fmt.Errorf("complianceReportRequestMailer cannot load %T as %q", retrieved, name)
|
||||
}
|
||||
|
||||
o.R.Mailer = rel
|
||||
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("complianceReportRequestMailer has no relationship %q", name)
|
||||
}
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerPreloader struct {
|
||||
ComplianceReportRequest func(...psql.PreloadOption) psql.Preloader
|
||||
Mailer func(...psql.PreloadOption) psql.Preloader
|
||||
}
|
||||
|
||||
func buildComplianceReportRequestMailerPreloader() complianceReportRequestMailerPreloader {
|
||||
return complianceReportRequestMailerPreloader{
|
||||
ComplianceReportRequest: func(opts ...psql.PreloadOption) psql.Preloader {
|
||||
return psql.Preload[*ComplianceReportRequest, ComplianceReportRequestSlice](psql.PreloadRel{
|
||||
Name: "ComplianceReportRequest",
|
||||
Sides: []psql.PreloadSide{
|
||||
{
|
||||
From: ComplianceReportRequestMailers,
|
||||
To: ComplianceReportRequests,
|
||||
FromColumns: []string{"compliance_report_request_id"},
|
||||
ToColumns: []string{"id"},
|
||||
},
|
||||
},
|
||||
}, ComplianceReportRequests.Columns.Names(), opts...)
|
||||
},
|
||||
Mailer: func(opts ...psql.PreloadOption) psql.Preloader {
|
||||
return psql.Preload[*CommsMailer, CommsMailerSlice](psql.PreloadRel{
|
||||
Name: "Mailer",
|
||||
Sides: []psql.PreloadSide{
|
||||
{
|
||||
From: ComplianceReportRequestMailers,
|
||||
To: CommsMailers,
|
||||
FromColumns: []string{"mailer_id"},
|
||||
ToColumns: []string{"id"},
|
||||
},
|
||||
},
|
||||
}, CommsMailers.Columns.Names(), opts...)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerThenLoader[Q orm.Loadable] struct {
|
||||
ComplianceReportRequest func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
Mailer func(...bob.Mod[*dialect.SelectQuery]) orm.Loader[Q]
|
||||
}
|
||||
|
||||
func buildComplianceReportRequestMailerThenLoader[Q orm.Loadable]() complianceReportRequestMailerThenLoader[Q] {
|
||||
type ComplianceReportRequestLoadInterface interface {
|
||||
LoadComplianceReportRequest(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
||||
}
|
||||
type MailerLoadInterface interface {
|
||||
LoadMailer(context.Context, bob.Executor, ...bob.Mod[*dialect.SelectQuery]) error
|
||||
}
|
||||
|
||||
return complianceReportRequestMailerThenLoader[Q]{
|
||||
ComplianceReportRequest: thenLoadBuilder[Q](
|
||||
"ComplianceReportRequest",
|
||||
func(ctx context.Context, exec bob.Executor, retrieved ComplianceReportRequestLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
return retrieved.LoadComplianceReportRequest(ctx, exec, mods...)
|
||||
},
|
||||
),
|
||||
Mailer: thenLoadBuilder[Q](
|
||||
"Mailer",
|
||||
func(ctx context.Context, exec bob.Executor, retrieved MailerLoadInterface, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
return retrieved.LoadMailer(ctx, exec, mods...)
|
||||
},
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
// LoadComplianceReportRequest loads the complianceReportRequestMailer's ComplianceReportRequest into the .R struct
|
||||
func (o *ComplianceReportRequestMailer) LoadComplianceReportRequest(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Reset the relationship
|
||||
o.R.ComplianceReportRequest = nil
|
||||
|
||||
related, err := o.ComplianceReportRequest(mods...).One(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
o.R.ComplianceReportRequest = related
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadComplianceReportRequest loads the complianceReportRequestMailer's ComplianceReportRequest into the .R struct
|
||||
func (os ComplianceReportRequestMailerSlice) LoadComplianceReportRequest(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if len(os) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
complianceReportRequests, err := os.ComplianceReportRequest(mods...).All(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, o := range os {
|
||||
if o == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, rel := range complianceReportRequests {
|
||||
|
||||
if !(o.ComplianceReportRequestID == rel.ID) {
|
||||
continue
|
||||
}
|
||||
|
||||
o.R.ComplianceReportRequest = rel
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadMailer loads the complianceReportRequestMailer's Mailer into the .R struct
|
||||
func (o *ComplianceReportRequestMailer) LoadMailer(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Reset the relationship
|
||||
o.R.Mailer = nil
|
||||
|
||||
related, err := o.Mailer(mods...).One(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
o.R.Mailer = related
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadMailer loads the complianceReportRequestMailer's Mailer into the .R struct
|
||||
func (os ComplianceReportRequestMailerSlice) LoadMailer(ctx context.Context, exec bob.Executor, mods ...bob.Mod[*dialect.SelectQuery]) error {
|
||||
if len(os) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
commsMailers, err := os.Mailer(mods...).All(ctx, exec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, o := range os {
|
||||
if o == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, rel := range commsMailers {
|
||||
|
||||
if !(o.MailerID == rel.ID) {
|
||||
continue
|
||||
}
|
||||
|
||||
o.R.Mailer = rel
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type complianceReportRequestMailerJoins[Q dialect.Joinable] struct {
|
||||
typ string
|
||||
ComplianceReportRequest modAs[Q, complianceReportRequestColumns]
|
||||
Mailer modAs[Q, commsMailerColumns]
|
||||
}
|
||||
|
||||
func (j complianceReportRequestMailerJoins[Q]) aliasedAs(alias string) complianceReportRequestMailerJoins[Q] {
|
||||
return buildComplianceReportRequestMailerJoins[Q](buildComplianceReportRequestMailerColumns(alias), j.typ)
|
||||
}
|
||||
|
||||
func buildComplianceReportRequestMailerJoins[Q dialect.Joinable](cols complianceReportRequestMailerColumns, typ string) complianceReportRequestMailerJoins[Q] {
|
||||
return complianceReportRequestMailerJoins[Q]{
|
||||
typ: typ,
|
||||
ComplianceReportRequest: modAs[Q, complianceReportRequestColumns]{
|
||||
c: ComplianceReportRequests.Columns,
|
||||
f: func(to complianceReportRequestColumns) bob.Mod[Q] {
|
||||
mods := make(mods.QueryMods[Q], 0, 1)
|
||||
|
||||
{
|
||||
mods = append(mods, dialect.Join[Q](typ, ComplianceReportRequests.Name().As(to.Alias())).On(
|
||||
to.ID.EQ(cols.ComplianceReportRequestID),
|
||||
))
|
||||
}
|
||||
|
||||
return mods
|
||||
},
|
||||
},
|
||||
Mailer: modAs[Q, commsMailerColumns]{
|
||||
c: CommsMailers.Columns,
|
||||
f: func(to commsMailerColumns) bob.Mod[Q] {
|
||||
mods := make(mods.QueryMods[Q], 0, 1)
|
||||
|
||||
{
|
||||
mods = append(mods, dialect.Join[Q](typ, CommsMailers.Name().As(to.Alias())).On(
|
||||
to.ID.EQ(cols.MailerID),
|
||||
))
|
||||
}
|
||||
|
||||
return mods
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue