Move publicreport.image to have a point location

This commit is contained in:
Eli Ribble 2026-03-09 00:43:14 +00:00
parent cfe399e44f
commit 2f7ecdfae8
No known key found for this signature in database
4 changed files with 50 additions and 44 deletions

View file

@ -42,15 +42,6 @@ var PublicreportImages = Table[
Generated: false,
AutoIncr: false,
},
Location: column{
Name: "location",
DBType: "geography",
Default: "NULL",
Comment: "",
Nullable: true,
Generated: false,
AutoIncr: false,
},
ResolutionX: column{
Name: "resolution_x",
DBType: "integer",
@ -96,6 +87,15 @@ var PublicreportImages = Table[
Generated: false,
AutoIncr: false,
},
Location: column{
Name: "location",
DBType: "geometry",
Default: "NULL",
Comment: "",
Nullable: true,
Generated: false,
AutoIncr: false,
},
},
Indexes: publicreportImageIndexes{
ImagePkey: index{
@ -129,17 +129,17 @@ type publicreportImageColumns struct {
ID column
ContentType column
Created column
Location column
ResolutionX column
ResolutionY column
StorageUUID column
StorageSize column
UploadedFilename column
Location column
}
func (c publicreportImageColumns) AsSlice() []column {
return []column{
c.ID, c.ContentType, c.Created, c.Location, c.ResolutionX, c.ResolutionY, c.StorageUUID, c.StorageSize, c.UploadedFilename,
c.ID, c.ContentType, c.Created, c.ResolutionX, c.ResolutionY, c.StorageUUID, c.StorageSize, c.UploadedFilename, c.Location,
}
}

View file

@ -0,0 +1,6 @@
-- +goose Up
ALTER TABLE publicreport.image ADD COLUMN loc2 geometry(Point, 4326);
UPDATE publicreport.image SET loc2 = location::geometry(Point, 4326);
ALTER TABLE publicreport.image DROP COLUMN location;
ALTER TABLE publicreport.image RENAME COLUMN loc2 TO location;

View file

@ -30,12 +30,12 @@ type PublicreportImage struct {
ID int32 `db:"id,pk" `
ContentType string `db:"content_type" `
Created time.Time `db:"created" `
Location null.Val[string] `db:"location" `
ResolutionX int32 `db:"resolution_x" `
ResolutionY int32 `db:"resolution_y" `
StorageUUID uuid.UUID `db:"storage_uuid" `
StorageSize int64 `db:"storage_size" `
UploadedFilename string `db:"uploaded_filename" `
Location null.Val[string] `db:"location" `
R publicreportImageR `db:"-" `
}
@ -60,18 +60,18 @@ type publicreportImageR struct {
func buildPublicreportImageColumns(alias string) publicreportImageColumns {
return publicreportImageColumns{
ColumnsExpr: expr.NewColumnsExpr(
"id", "content_type", "created", "location", "resolution_x", "resolution_y", "storage_uuid", "storage_size", "uploaded_filename",
"id", "content_type", "created", "resolution_x", "resolution_y", "storage_uuid", "storage_size", "uploaded_filename", "location",
).WithParent("publicreport.image"),
tableAlias: alias,
ID: psql.Quote(alias, "id"),
ContentType: psql.Quote(alias, "content_type"),
Created: psql.Quote(alias, "created"),
Location: psql.Quote(alias, "location"),
ResolutionX: psql.Quote(alias, "resolution_x"),
ResolutionY: psql.Quote(alias, "resolution_y"),
StorageUUID: psql.Quote(alias, "storage_uuid"),
StorageSize: psql.Quote(alias, "storage_size"),
UploadedFilename: psql.Quote(alias, "uploaded_filename"),
Location: psql.Quote(alias, "location"),
}
}
@ -81,12 +81,12 @@ type publicreportImageColumns struct {
ID psql.Expression
ContentType psql.Expression
Created psql.Expression
Location psql.Expression
ResolutionX psql.Expression
ResolutionY psql.Expression
StorageUUID psql.Expression
StorageSize psql.Expression
UploadedFilename psql.Expression
Location psql.Expression
}
func (c publicreportImageColumns) Alias() string {
@ -104,12 +104,12 @@ type PublicreportImageSetter struct {
ID omit.Val[int32] `db:"id,pk" `
ContentType omit.Val[string] `db:"content_type" `
Created omit.Val[time.Time] `db:"created" `
Location omitnull.Val[string] `db:"location" `
ResolutionX omit.Val[int32] `db:"resolution_x" `
ResolutionY omit.Val[int32] `db:"resolution_y" `
StorageUUID omit.Val[uuid.UUID] `db:"storage_uuid" `
StorageSize omit.Val[int64] `db:"storage_size" `
UploadedFilename omit.Val[string] `db:"uploaded_filename" `
Location omitnull.Val[string] `db:"location" `
}
func (s PublicreportImageSetter) SetColumns() []string {
@ -123,9 +123,6 @@ func (s PublicreportImageSetter) SetColumns() []string {
if s.Created.IsValue() {
vals = append(vals, "created")
}
if !s.Location.IsUnset() {
vals = append(vals, "location")
}
if s.ResolutionX.IsValue() {
vals = append(vals, "resolution_x")
}
@ -141,6 +138,9 @@ func (s PublicreportImageSetter) SetColumns() []string {
if s.UploadedFilename.IsValue() {
vals = append(vals, "uploaded_filename")
}
if !s.Location.IsUnset() {
vals = append(vals, "location")
}
return vals
}
@ -154,9 +154,6 @@ func (s PublicreportImageSetter) Overwrite(t *PublicreportImage) {
if s.Created.IsValue() {
t.Created = s.Created.MustGet()
}
if !s.Location.IsUnset() {
t.Location = s.Location.MustGetNull()
}
if s.ResolutionX.IsValue() {
t.ResolutionX = s.ResolutionX.MustGet()
}
@ -172,6 +169,9 @@ func (s PublicreportImageSetter) Overwrite(t *PublicreportImage) {
if s.UploadedFilename.IsValue() {
t.UploadedFilename = s.UploadedFilename.MustGet()
}
if !s.Location.IsUnset() {
t.Location = s.Location.MustGetNull()
}
}
func (s *PublicreportImageSetter) Apply(q *dialect.InsertQuery) {
@ -199,38 +199,38 @@ func (s *PublicreportImageSetter) Apply(q *dialect.InsertQuery) {
vals[2] = psql.Raw("DEFAULT")
}
if !s.Location.IsUnset() {
vals[3] = psql.Arg(s.Location.MustGetNull())
if s.ResolutionX.IsValue() {
vals[3] = psql.Arg(s.ResolutionX.MustGet())
} else {
vals[3] = psql.Raw("DEFAULT")
}
if s.ResolutionX.IsValue() {
vals[4] = psql.Arg(s.ResolutionX.MustGet())
if s.ResolutionY.IsValue() {
vals[4] = psql.Arg(s.ResolutionY.MustGet())
} else {
vals[4] = psql.Raw("DEFAULT")
}
if s.ResolutionY.IsValue() {
vals[5] = psql.Arg(s.ResolutionY.MustGet())
if s.StorageUUID.IsValue() {
vals[5] = psql.Arg(s.StorageUUID.MustGet())
} else {
vals[5] = psql.Raw("DEFAULT")
}
if s.StorageUUID.IsValue() {
vals[6] = psql.Arg(s.StorageUUID.MustGet())
if s.StorageSize.IsValue() {
vals[6] = psql.Arg(s.StorageSize.MustGet())
} else {
vals[6] = psql.Raw("DEFAULT")
}
if s.StorageSize.IsValue() {
vals[7] = psql.Arg(s.StorageSize.MustGet())
if s.UploadedFilename.IsValue() {
vals[7] = psql.Arg(s.UploadedFilename.MustGet())
} else {
vals[7] = psql.Raw("DEFAULT")
}
if s.UploadedFilename.IsValue() {
vals[8] = psql.Arg(s.UploadedFilename.MustGet())
if !s.Location.IsUnset() {
vals[8] = psql.Arg(s.Location.MustGetNull())
} else {
vals[8] = psql.Raw("DEFAULT")
}
@ -267,13 +267,6 @@ func (s PublicreportImageSetter) Expressions(prefix ...string) []bob.Expression
}})
}
if !s.Location.IsUnset() {
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
psql.Quote(append(prefix, "location")...),
psql.Arg(s.Location),
}})
}
if s.ResolutionX.IsValue() {
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
psql.Quote(append(prefix, "resolution_x")...),
@ -309,6 +302,13 @@ func (s PublicreportImageSetter) Expressions(prefix ...string) []bob.Expression
}})
}
if !s.Location.IsUnset() {
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
psql.Quote(append(prefix, "location")...),
psql.Arg(s.Location),
}})
}
return exprs
}
@ -819,12 +819,12 @@ type publicreportImageWhere[Q psql.Filterable] struct {
ID psql.WhereMod[Q, int32]
ContentType psql.WhereMod[Q, string]
Created psql.WhereMod[Q, time.Time]
Location psql.WhereNullMod[Q, string]
ResolutionX psql.WhereMod[Q, int32]
ResolutionY psql.WhereMod[Q, int32]
StorageUUID psql.WhereMod[Q, uuid.UUID]
StorageSize psql.WhereMod[Q, int64]
UploadedFilename psql.WhereMod[Q, string]
Location psql.WhereNullMod[Q, string]
}
func (publicreportImageWhere[Q]) AliasedAs(alias string) publicreportImageWhere[Q] {
@ -836,12 +836,12 @@ func buildPublicreportImageWhere[Q psql.Filterable](cols publicreportImageColumn
ID: psql.Where[Q, int32](cols.ID),
ContentType: psql.Where[Q, string](cols.ContentType),
Created: psql.Where[Q, time.Time](cols.Created),
Location: psql.WhereNull[Q, string](cols.Location),
ResolutionX: psql.Where[Q, int32](cols.ResolutionX),
ResolutionY: psql.Where[Q, int32](cols.ResolutionY),
StorageUUID: psql.Where[Q, uuid.UUID](cols.StorageUUID),
StorageSize: psql.Where[Q, int64](cols.StorageSize),
UploadedFilename: psql.Where[Q, string](cols.UploadedFilename),
Location: psql.WhereNull[Q, string](cols.Location),
}
}

View file

@ -163,7 +163,7 @@ func saveImageUploads(ctx context.Context, tx bob.Tx, uploads []ImageUpload) (mo
if u.Exif.GPS != nil {
_, err = psql.Update(
um.Table("publicreport.image"),
um.SetCol("location").To(fmt.Sprintf("ST_GeometryFromText('Point(%f %f)')", u.Exif.GPS.Longitude, u.Exif.GPS.Latitude)),
um.SetCol("location").To(fmt.Sprintf("ST_Point(%f, %f, 4326)", u.Exif.GPS.Longitude, u.Exif.GPS.Latitude)),
um.Where(psql.Quote("id").EQ(psql.Arg(image.ID))),
).Exec(ctx, tx)
}