From 59bf884f5d5ecc19bb819f08e01f7c0ecb37d63c Mon Sep 17 00:00:00 2001 From: John Costa Date: Thu, 24 Jul 2025 13:59:24 +0100 Subject: [PATCH] refactor: changing notes to be a simple image description Notes would generate too often and not be very useful. This is much better. --- backend/.gen/haystack/haystack/model/image.go | 7 +- .../haystack/haystack/model/image_links.go | 18 -- .../haystack/haystack/model/image_notes.go | 20 --- .../haystack/haystack/model/image_tags.go | 18 -- .../haystack/haystack/model/image_text.go | 18 -- backend/.gen/haystack/haystack/model/notes.go | 21 --- .../haystack/haystack/model/user_notes.go | 20 --- .../.gen/haystack/haystack/model/user_tags.go | 18 -- .../.gen/haystack/haystack/table/contacts.go | 3 + .../.gen/haystack/haystack/table/events.go | 3 + backend/.gen/haystack/haystack/table/image.go | 28 ++-- .../haystack/haystack/table/image_contacts.go | 3 + .../haystack/haystack/table/image_events.go | 3 + .../haystack/haystack/table/image_links.go | 81 --------- .../haystack/haystack/table/image_lists.go | 3 + .../haystack/table/image_locations.go | 3 + .../haystack/haystack/table/image_notes.go | 84 ---------- .../haystack/haystack/table/image_tags.go | 81 --------- .../haystack/haystack/table/image_text.go | 81 --------- backend/.gen/haystack/haystack/table/lists.go | 3 + .../.gen/haystack/haystack/table/locations.go | 3 + backend/.gen/haystack/haystack/table/logs.go | 3 + backend/.gen/haystack/haystack/table/notes.go | 87 ---------- .../haystack/table/table_use_schema.go | 7 - .../haystack/haystack/table/user_contacts.go | 3 + .../haystack/haystack/table/user_events.go | 3 + .../haystack/haystack/table/user_images.go | 3 + .../haystack/table/user_images_to_process.go | 3 + .../haystack/haystack/table/user_locations.go | 3 + .../haystack/haystack/table/user_notes.go | 84 ---------- .../.gen/haystack/haystack/table/user_tags.go | 81 --------- backend/.gen/haystack/haystack/table/users.go | 3 + .../{note_agent.go => description_agent.go} | 25 +-- backend/agents/orchestrator.go | 8 +- backend/events.go | 7 +- backend/go.mod | 2 +- backend/go.sum | 2 + backend/main.go | 5 +- backend/models/image.go | 20 ++- backend/models/links.go | 33 ---- backend/models/notes.go | 67 -------- backend/models/tags.go | 156 ----------------- backend/models/text.go | 35 ---- backend/models/user.go | 46 +---- backend/schema.sql | 157 +----------------- 45 files changed, 102 insertions(+), 1260 deletions(-) delete mode 100644 backend/.gen/haystack/haystack/model/image_links.go delete mode 100644 backend/.gen/haystack/haystack/model/image_notes.go delete mode 100644 backend/.gen/haystack/haystack/model/image_tags.go delete mode 100644 backend/.gen/haystack/haystack/model/image_text.go delete mode 100644 backend/.gen/haystack/haystack/model/notes.go delete mode 100644 backend/.gen/haystack/haystack/model/user_notes.go delete mode 100644 backend/.gen/haystack/haystack/model/user_tags.go delete mode 100644 backend/.gen/haystack/haystack/table/image_links.go delete mode 100644 backend/.gen/haystack/haystack/table/image_notes.go delete mode 100644 backend/.gen/haystack/haystack/table/image_tags.go delete mode 100644 backend/.gen/haystack/haystack/table/image_text.go delete mode 100644 backend/.gen/haystack/haystack/table/notes.go delete mode 100644 backend/.gen/haystack/haystack/table/user_notes.go delete mode 100644 backend/.gen/haystack/haystack/table/user_tags.go rename backend/agents/{note_agent.go => description_agent.go} (68%) delete mode 100644 backend/models/links.go delete mode 100644 backend/models/notes.go delete mode 100644 backend/models/tags.go delete mode 100644 backend/models/text.go diff --git a/backend/.gen/haystack/haystack/model/image.go b/backend/.gen/haystack/haystack/model/image.go index e80c52a..c99a329 100644 --- a/backend/.gen/haystack/haystack/model/image.go +++ b/backend/.gen/haystack/haystack/model/image.go @@ -12,7 +12,8 @@ import ( ) type Image struct { - ID uuid.UUID `sql:"primary_key"` - ImageName string - Image []byte + ID uuid.UUID `sql:"primary_key"` + ImageName string + Description string + Image []byte } diff --git a/backend/.gen/haystack/haystack/model/image_links.go b/backend/.gen/haystack/haystack/model/image_links.go deleted file mode 100644 index ae8f816..0000000 --- a/backend/.gen/haystack/haystack/model/image_links.go +++ /dev/null @@ -1,18 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package model - -import ( - "github.com/google/uuid" -) - -type ImageLinks struct { - ID uuid.UUID `sql:"primary_key"` - Link string - ImageID uuid.UUID -} diff --git a/backend/.gen/haystack/haystack/model/image_notes.go b/backend/.gen/haystack/haystack/model/image_notes.go deleted file mode 100644 index 021af48..0000000 --- a/backend/.gen/haystack/haystack/model/image_notes.go +++ /dev/null @@ -1,20 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package model - -import ( - "github.com/google/uuid" - "time" -) - -type ImageNotes struct { - ID uuid.UUID `sql:"primary_key"` - ImageID uuid.UUID - NoteID uuid.UUID - CreatedAt *time.Time -} diff --git a/backend/.gen/haystack/haystack/model/image_tags.go b/backend/.gen/haystack/haystack/model/image_tags.go deleted file mode 100644 index 8b20f01..0000000 --- a/backend/.gen/haystack/haystack/model/image_tags.go +++ /dev/null @@ -1,18 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package model - -import ( - "github.com/google/uuid" -) - -type ImageTags struct { - ID uuid.UUID `sql:"primary_key"` - TagID uuid.UUID - ImageID uuid.UUID -} diff --git a/backend/.gen/haystack/haystack/model/image_text.go b/backend/.gen/haystack/haystack/model/image_text.go deleted file mode 100644 index 5abddee..0000000 --- a/backend/.gen/haystack/haystack/model/image_text.go +++ /dev/null @@ -1,18 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package model - -import ( - "github.com/google/uuid" -) - -type ImageText struct { - ID uuid.UUID `sql:"primary_key"` - ImageText string - ImageID uuid.UUID -} diff --git a/backend/.gen/haystack/haystack/model/notes.go b/backend/.gen/haystack/haystack/model/notes.go deleted file mode 100644 index dd6f792..0000000 --- a/backend/.gen/haystack/haystack/model/notes.go +++ /dev/null @@ -1,21 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package model - -import ( - "github.com/google/uuid" - "time" -) - -type Notes struct { - ID uuid.UUID `sql:"primary_key"` - Name string - Description *string - Content string - CreatedAt *time.Time -} diff --git a/backend/.gen/haystack/haystack/model/user_notes.go b/backend/.gen/haystack/haystack/model/user_notes.go deleted file mode 100644 index ce39ae5..0000000 --- a/backend/.gen/haystack/haystack/model/user_notes.go +++ /dev/null @@ -1,20 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package model - -import ( - "github.com/google/uuid" - "time" -) - -type UserNotes struct { - ID uuid.UUID `sql:"primary_key"` - UserID uuid.UUID - NoteID uuid.UUID - CreatedAt *time.Time -} diff --git a/backend/.gen/haystack/haystack/model/user_tags.go b/backend/.gen/haystack/haystack/model/user_tags.go deleted file mode 100644 index e2d12d7..0000000 --- a/backend/.gen/haystack/haystack/model/user_tags.go +++ /dev/null @@ -1,18 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package model - -import ( - "github.com/google/uuid" -) - -type UserTags struct { - ID uuid.UUID `sql:"primary_key"` - Tag string - UserID uuid.UUID -} diff --git a/backend/.gen/haystack/haystack/table/contacts.go b/backend/.gen/haystack/haystack/table/contacts.go index 7371f49..8ee18f6 100644 --- a/backend/.gen/haystack/haystack/table/contacts.go +++ b/backend/.gen/haystack/haystack/table/contacts.go @@ -26,6 +26,7 @@ type contactsTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type ContactsTable struct { @@ -71,6 +72,7 @@ func newContactsTableImpl(schemaName, tableName, alias string) contactsTable { CreatedAtColumn = postgres.TimestampzColumn("created_at") allColumns = postgres.ColumnList{IDColumn, NameColumn, DescriptionColumn, PhoneNumberColumn, EmailColumn, CreatedAtColumn} mutableColumns = postgres.ColumnList{NameColumn, DescriptionColumn, PhoneNumberColumn, EmailColumn, CreatedAtColumn} + defaultColumns = postgres.ColumnList{IDColumn, CreatedAtColumn} ) return contactsTable{ @@ -86,5 +88,6 @@ func newContactsTableImpl(schemaName, tableName, alias string) contactsTable { AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/events.go b/backend/.gen/haystack/haystack/table/events.go index b5e61f4..a6e36bc 100644 --- a/backend/.gen/haystack/haystack/table/events.go +++ b/backend/.gen/haystack/haystack/table/events.go @@ -28,6 +28,7 @@ type eventsTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type EventsTable struct { @@ -75,6 +76,7 @@ func newEventsTableImpl(schemaName, tableName, alias string) eventsTable { CreatedAtColumn = postgres.TimestampzColumn("created_at") allColumns = postgres.ColumnList{IDColumn, NameColumn, DescriptionColumn, StartDateTimeColumn, EndDateTimeColumn, LocationIDColumn, OrganizerIDColumn, CreatedAtColumn} mutableColumns = postgres.ColumnList{NameColumn, DescriptionColumn, StartDateTimeColumn, EndDateTimeColumn, LocationIDColumn, OrganizerIDColumn, CreatedAtColumn} + defaultColumns = postgres.ColumnList{IDColumn, CreatedAtColumn} ) return eventsTable{ @@ -92,5 +94,6 @@ func newEventsTableImpl(schemaName, tableName, alias string) eventsTable { AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/image.go b/backend/.gen/haystack/haystack/table/image.go index 9185561..c7467a6 100644 --- a/backend/.gen/haystack/haystack/table/image.go +++ b/backend/.gen/haystack/haystack/table/image.go @@ -17,12 +17,14 @@ type imageTable struct { postgres.Table // Columns - ID postgres.ColumnString - ImageName postgres.ColumnString - Image postgres.ColumnString + ID postgres.ColumnString + ImageName postgres.ColumnString + Description postgres.ColumnString + Image postgres.ColumnBytea AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type ImageTable struct { @@ -60,22 +62,26 @@ func newImageTable(schemaName, tableName, alias string) *ImageTable { func newImageTableImpl(schemaName, tableName, alias string) imageTable { var ( - IDColumn = postgres.StringColumn("id") - ImageNameColumn = postgres.StringColumn("image_name") - ImageColumn = postgres.StringColumn("image") - allColumns = postgres.ColumnList{IDColumn, ImageNameColumn, ImageColumn} - mutableColumns = postgres.ColumnList{ImageNameColumn, ImageColumn} + IDColumn = postgres.StringColumn("id") + ImageNameColumn = postgres.StringColumn("image_name") + DescriptionColumn = postgres.StringColumn("description") + ImageColumn = postgres.ByteaColumn("image") + allColumns = postgres.ColumnList{IDColumn, ImageNameColumn, DescriptionColumn, ImageColumn} + mutableColumns = postgres.ColumnList{ImageNameColumn, DescriptionColumn, ImageColumn} + defaultColumns = postgres.ColumnList{IDColumn} ) return imageTable{ Table: postgres.NewTable(schemaName, tableName, alias, allColumns...), //Columns - ID: IDColumn, - ImageName: ImageNameColumn, - Image: ImageColumn, + ID: IDColumn, + ImageName: ImageNameColumn, + Description: DescriptionColumn, + Image: ImageColumn, AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/image_contacts.go b/backend/.gen/haystack/haystack/table/image_contacts.go index ac44341..bc8db89 100644 --- a/backend/.gen/haystack/haystack/table/image_contacts.go +++ b/backend/.gen/haystack/haystack/table/image_contacts.go @@ -24,6 +24,7 @@ type imageContactsTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type ImageContactsTable struct { @@ -67,6 +68,7 @@ func newImageContactsTableImpl(schemaName, tableName, alias string) imageContact CreatedAtColumn = postgres.TimestampzColumn("created_at") allColumns = postgres.ColumnList{IDColumn, ImageIDColumn, ContactIDColumn, CreatedAtColumn} mutableColumns = postgres.ColumnList{ImageIDColumn, ContactIDColumn, CreatedAtColumn} + defaultColumns = postgres.ColumnList{IDColumn, CreatedAtColumn} ) return imageContactsTable{ @@ -80,5 +82,6 @@ func newImageContactsTableImpl(schemaName, tableName, alias string) imageContact AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/image_events.go b/backend/.gen/haystack/haystack/table/image_events.go index 62a0c92..8dcb2e4 100644 --- a/backend/.gen/haystack/haystack/table/image_events.go +++ b/backend/.gen/haystack/haystack/table/image_events.go @@ -24,6 +24,7 @@ type imageEventsTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type ImageEventsTable struct { @@ -67,6 +68,7 @@ func newImageEventsTableImpl(schemaName, tableName, alias string) imageEventsTab CreatedAtColumn = postgres.TimestampzColumn("created_at") allColumns = postgres.ColumnList{IDColumn, EventIDColumn, ImageIDColumn, CreatedAtColumn} mutableColumns = postgres.ColumnList{EventIDColumn, ImageIDColumn, CreatedAtColumn} + defaultColumns = postgres.ColumnList{IDColumn, CreatedAtColumn} ) return imageEventsTable{ @@ -80,5 +82,6 @@ func newImageEventsTableImpl(schemaName, tableName, alias string) imageEventsTab AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/image_links.go b/backend/.gen/haystack/haystack/table/image_links.go deleted file mode 100644 index 2b9ad5c..0000000 --- a/backend/.gen/haystack/haystack/table/image_links.go +++ /dev/null @@ -1,81 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package table - -import ( - "github.com/go-jet/jet/v2/postgres" -) - -var ImageLinks = newImageLinksTable("haystack", "image_links", "") - -type imageLinksTable struct { - postgres.Table - - // Columns - ID postgres.ColumnString - Link postgres.ColumnString - ImageID postgres.ColumnString - - AllColumns postgres.ColumnList - MutableColumns postgres.ColumnList -} - -type ImageLinksTable struct { - imageLinksTable - - EXCLUDED imageLinksTable -} - -// AS creates new ImageLinksTable with assigned alias -func (a ImageLinksTable) AS(alias string) *ImageLinksTable { - return newImageLinksTable(a.SchemaName(), a.TableName(), alias) -} - -// Schema creates new ImageLinksTable with assigned schema name -func (a ImageLinksTable) FromSchema(schemaName string) *ImageLinksTable { - return newImageLinksTable(schemaName, a.TableName(), a.Alias()) -} - -// WithPrefix creates new ImageLinksTable with assigned table prefix -func (a ImageLinksTable) WithPrefix(prefix string) *ImageLinksTable { - return newImageLinksTable(a.SchemaName(), prefix+a.TableName(), a.TableName()) -} - -// WithSuffix creates new ImageLinksTable with assigned table suffix -func (a ImageLinksTable) WithSuffix(suffix string) *ImageLinksTable { - return newImageLinksTable(a.SchemaName(), a.TableName()+suffix, a.TableName()) -} - -func newImageLinksTable(schemaName, tableName, alias string) *ImageLinksTable { - return &ImageLinksTable{ - imageLinksTable: newImageLinksTableImpl(schemaName, tableName, alias), - EXCLUDED: newImageLinksTableImpl("", "excluded", ""), - } -} - -func newImageLinksTableImpl(schemaName, tableName, alias string) imageLinksTable { - var ( - IDColumn = postgres.StringColumn("id") - LinkColumn = postgres.StringColumn("link") - ImageIDColumn = postgres.StringColumn("image_id") - allColumns = postgres.ColumnList{IDColumn, LinkColumn, ImageIDColumn} - mutableColumns = postgres.ColumnList{LinkColumn, ImageIDColumn} - ) - - return imageLinksTable{ - Table: postgres.NewTable(schemaName, tableName, alias, allColumns...), - - //Columns - ID: IDColumn, - Link: LinkColumn, - ImageID: ImageIDColumn, - - AllColumns: allColumns, - MutableColumns: mutableColumns, - } -} diff --git a/backend/.gen/haystack/haystack/table/image_lists.go b/backend/.gen/haystack/haystack/table/image_lists.go index ec0f696..d4e9332 100644 --- a/backend/.gen/haystack/haystack/table/image_lists.go +++ b/backend/.gen/haystack/haystack/table/image_lists.go @@ -23,6 +23,7 @@ type imageListsTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type ImageListsTable struct { @@ -65,6 +66,7 @@ func newImageListsTableImpl(schemaName, tableName, alias string) imageListsTable ListIDColumn = postgres.StringColumn("list_id") allColumns = postgres.ColumnList{IDColumn, ImageIDColumn, ListIDColumn} mutableColumns = postgres.ColumnList{ImageIDColumn, ListIDColumn} + defaultColumns = postgres.ColumnList{IDColumn} ) return imageListsTable{ @@ -77,5 +79,6 @@ func newImageListsTableImpl(schemaName, tableName, alias string) imageListsTable AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/image_locations.go b/backend/.gen/haystack/haystack/table/image_locations.go index b209bdd..9ff6682 100644 --- a/backend/.gen/haystack/haystack/table/image_locations.go +++ b/backend/.gen/haystack/haystack/table/image_locations.go @@ -24,6 +24,7 @@ type imageLocationsTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type ImageLocationsTable struct { @@ -67,6 +68,7 @@ func newImageLocationsTableImpl(schemaName, tableName, alias string) imageLocati CreatedAtColumn = postgres.TimestampzColumn("created_at") allColumns = postgres.ColumnList{IDColumn, LocationIDColumn, ImageIDColumn, CreatedAtColumn} mutableColumns = postgres.ColumnList{LocationIDColumn, ImageIDColumn, CreatedAtColumn} + defaultColumns = postgres.ColumnList{IDColumn, CreatedAtColumn} ) return imageLocationsTable{ @@ -80,5 +82,6 @@ func newImageLocationsTableImpl(schemaName, tableName, alias string) imageLocati AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/image_notes.go b/backend/.gen/haystack/haystack/table/image_notes.go deleted file mode 100644 index 6a23f61..0000000 --- a/backend/.gen/haystack/haystack/table/image_notes.go +++ /dev/null @@ -1,84 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package table - -import ( - "github.com/go-jet/jet/v2/postgres" -) - -var ImageNotes = newImageNotesTable("haystack", "image_notes", "") - -type imageNotesTable struct { - postgres.Table - - // Columns - ID postgres.ColumnString - ImageID postgres.ColumnString - NoteID postgres.ColumnString - CreatedAt postgres.ColumnTimestampz - - AllColumns postgres.ColumnList - MutableColumns postgres.ColumnList -} - -type ImageNotesTable struct { - imageNotesTable - - EXCLUDED imageNotesTable -} - -// AS creates new ImageNotesTable with assigned alias -func (a ImageNotesTable) AS(alias string) *ImageNotesTable { - return newImageNotesTable(a.SchemaName(), a.TableName(), alias) -} - -// Schema creates new ImageNotesTable with assigned schema name -func (a ImageNotesTable) FromSchema(schemaName string) *ImageNotesTable { - return newImageNotesTable(schemaName, a.TableName(), a.Alias()) -} - -// WithPrefix creates new ImageNotesTable with assigned table prefix -func (a ImageNotesTable) WithPrefix(prefix string) *ImageNotesTable { - return newImageNotesTable(a.SchemaName(), prefix+a.TableName(), a.TableName()) -} - -// WithSuffix creates new ImageNotesTable with assigned table suffix -func (a ImageNotesTable) WithSuffix(suffix string) *ImageNotesTable { - return newImageNotesTable(a.SchemaName(), a.TableName()+suffix, a.TableName()) -} - -func newImageNotesTable(schemaName, tableName, alias string) *ImageNotesTable { - return &ImageNotesTable{ - imageNotesTable: newImageNotesTableImpl(schemaName, tableName, alias), - EXCLUDED: newImageNotesTableImpl("", "excluded", ""), - } -} - -func newImageNotesTableImpl(schemaName, tableName, alias string) imageNotesTable { - var ( - IDColumn = postgres.StringColumn("id") - ImageIDColumn = postgres.StringColumn("image_id") - NoteIDColumn = postgres.StringColumn("note_id") - CreatedAtColumn = postgres.TimestampzColumn("created_at") - allColumns = postgres.ColumnList{IDColumn, ImageIDColumn, NoteIDColumn, CreatedAtColumn} - mutableColumns = postgres.ColumnList{ImageIDColumn, NoteIDColumn, CreatedAtColumn} - ) - - return imageNotesTable{ - Table: postgres.NewTable(schemaName, tableName, alias, allColumns...), - - //Columns - ID: IDColumn, - ImageID: ImageIDColumn, - NoteID: NoteIDColumn, - CreatedAt: CreatedAtColumn, - - AllColumns: allColumns, - MutableColumns: mutableColumns, - } -} diff --git a/backend/.gen/haystack/haystack/table/image_tags.go b/backend/.gen/haystack/haystack/table/image_tags.go deleted file mode 100644 index c3a30dd..0000000 --- a/backend/.gen/haystack/haystack/table/image_tags.go +++ /dev/null @@ -1,81 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package table - -import ( - "github.com/go-jet/jet/v2/postgres" -) - -var ImageTags = newImageTagsTable("haystack", "image_tags", "") - -type imageTagsTable struct { - postgres.Table - - // Columns - ID postgres.ColumnString - TagID postgres.ColumnString - ImageID postgres.ColumnString - - AllColumns postgres.ColumnList - MutableColumns postgres.ColumnList -} - -type ImageTagsTable struct { - imageTagsTable - - EXCLUDED imageTagsTable -} - -// AS creates new ImageTagsTable with assigned alias -func (a ImageTagsTable) AS(alias string) *ImageTagsTable { - return newImageTagsTable(a.SchemaName(), a.TableName(), alias) -} - -// Schema creates new ImageTagsTable with assigned schema name -func (a ImageTagsTable) FromSchema(schemaName string) *ImageTagsTable { - return newImageTagsTable(schemaName, a.TableName(), a.Alias()) -} - -// WithPrefix creates new ImageTagsTable with assigned table prefix -func (a ImageTagsTable) WithPrefix(prefix string) *ImageTagsTable { - return newImageTagsTable(a.SchemaName(), prefix+a.TableName(), a.TableName()) -} - -// WithSuffix creates new ImageTagsTable with assigned table suffix -func (a ImageTagsTable) WithSuffix(suffix string) *ImageTagsTable { - return newImageTagsTable(a.SchemaName(), a.TableName()+suffix, a.TableName()) -} - -func newImageTagsTable(schemaName, tableName, alias string) *ImageTagsTable { - return &ImageTagsTable{ - imageTagsTable: newImageTagsTableImpl(schemaName, tableName, alias), - EXCLUDED: newImageTagsTableImpl("", "excluded", ""), - } -} - -func newImageTagsTableImpl(schemaName, tableName, alias string) imageTagsTable { - var ( - IDColumn = postgres.StringColumn("id") - TagIDColumn = postgres.StringColumn("tag_id") - ImageIDColumn = postgres.StringColumn("image_id") - allColumns = postgres.ColumnList{IDColumn, TagIDColumn, ImageIDColumn} - mutableColumns = postgres.ColumnList{TagIDColumn, ImageIDColumn} - ) - - return imageTagsTable{ - Table: postgres.NewTable(schemaName, tableName, alias, allColumns...), - - //Columns - ID: IDColumn, - TagID: TagIDColumn, - ImageID: ImageIDColumn, - - AllColumns: allColumns, - MutableColumns: mutableColumns, - } -} diff --git a/backend/.gen/haystack/haystack/table/image_text.go b/backend/.gen/haystack/haystack/table/image_text.go deleted file mode 100644 index 090a735..0000000 --- a/backend/.gen/haystack/haystack/table/image_text.go +++ /dev/null @@ -1,81 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package table - -import ( - "github.com/go-jet/jet/v2/postgres" -) - -var ImageText = newImageTextTable("haystack", "image_text", "") - -type imageTextTable struct { - postgres.Table - - // Columns - ID postgres.ColumnString - ImageText postgres.ColumnString - ImageID postgres.ColumnString - - AllColumns postgres.ColumnList - MutableColumns postgres.ColumnList -} - -type ImageTextTable struct { - imageTextTable - - EXCLUDED imageTextTable -} - -// AS creates new ImageTextTable with assigned alias -func (a ImageTextTable) AS(alias string) *ImageTextTable { - return newImageTextTable(a.SchemaName(), a.TableName(), alias) -} - -// Schema creates new ImageTextTable with assigned schema name -func (a ImageTextTable) FromSchema(schemaName string) *ImageTextTable { - return newImageTextTable(schemaName, a.TableName(), a.Alias()) -} - -// WithPrefix creates new ImageTextTable with assigned table prefix -func (a ImageTextTable) WithPrefix(prefix string) *ImageTextTable { - return newImageTextTable(a.SchemaName(), prefix+a.TableName(), a.TableName()) -} - -// WithSuffix creates new ImageTextTable with assigned table suffix -func (a ImageTextTable) WithSuffix(suffix string) *ImageTextTable { - return newImageTextTable(a.SchemaName(), a.TableName()+suffix, a.TableName()) -} - -func newImageTextTable(schemaName, tableName, alias string) *ImageTextTable { - return &ImageTextTable{ - imageTextTable: newImageTextTableImpl(schemaName, tableName, alias), - EXCLUDED: newImageTextTableImpl("", "excluded", ""), - } -} - -func newImageTextTableImpl(schemaName, tableName, alias string) imageTextTable { - var ( - IDColumn = postgres.StringColumn("id") - ImageTextColumn = postgres.StringColumn("image_text") - ImageIDColumn = postgres.StringColumn("image_id") - allColumns = postgres.ColumnList{IDColumn, ImageTextColumn, ImageIDColumn} - mutableColumns = postgres.ColumnList{ImageTextColumn, ImageIDColumn} - ) - - return imageTextTable{ - Table: postgres.NewTable(schemaName, tableName, alias, allColumns...), - - //Columns - ID: IDColumn, - ImageText: ImageTextColumn, - ImageID: ImageIDColumn, - - AllColumns: allColumns, - MutableColumns: mutableColumns, - } -} diff --git a/backend/.gen/haystack/haystack/table/lists.go b/backend/.gen/haystack/haystack/table/lists.go index 6c876c1..dc70a72 100644 --- a/backend/.gen/haystack/haystack/table/lists.go +++ b/backend/.gen/haystack/haystack/table/lists.go @@ -25,6 +25,7 @@ type listsTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type ListsTable struct { @@ -69,6 +70,7 @@ func newListsTableImpl(schemaName, tableName, alias string) listsTable { CreatedAtColumn = postgres.TimestampzColumn("created_at") allColumns = postgres.ColumnList{IDColumn, UserIDColumn, NameColumn, DescriptionColumn, CreatedAtColumn} mutableColumns = postgres.ColumnList{UserIDColumn, NameColumn, DescriptionColumn, CreatedAtColumn} + defaultColumns = postgres.ColumnList{IDColumn, CreatedAtColumn} ) return listsTable{ @@ -83,5 +85,6 @@ func newListsTableImpl(schemaName, tableName, alias string) listsTable { AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/locations.go b/backend/.gen/haystack/haystack/table/locations.go index d42d0a8..199c96b 100644 --- a/backend/.gen/haystack/haystack/table/locations.go +++ b/backend/.gen/haystack/haystack/table/locations.go @@ -25,6 +25,7 @@ type locationsTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type LocationsTable struct { @@ -69,6 +70,7 @@ func newLocationsTableImpl(schemaName, tableName, alias string) locationsTable { CreatedAtColumn = postgres.TimestampzColumn("created_at") allColumns = postgres.ColumnList{IDColumn, NameColumn, AddressColumn, DescriptionColumn, CreatedAtColumn} mutableColumns = postgres.ColumnList{NameColumn, AddressColumn, DescriptionColumn, CreatedAtColumn} + defaultColumns = postgres.ColumnList{IDColumn, CreatedAtColumn} ) return locationsTable{ @@ -83,5 +85,6 @@ func newLocationsTableImpl(schemaName, tableName, alias string) locationsTable { AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/logs.go b/backend/.gen/haystack/haystack/table/logs.go index fccc691..2539860 100644 --- a/backend/.gen/haystack/haystack/table/logs.go +++ b/backend/.gen/haystack/haystack/table/logs.go @@ -23,6 +23,7 @@ type logsTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type LogsTable struct { @@ -65,6 +66,7 @@ func newLogsTableImpl(schemaName, tableName, alias string) logsTable { CreatedAtColumn = postgres.TimestampzColumn("created_at") allColumns = postgres.ColumnList{LogColumn, ImageIDColumn, CreatedAtColumn} mutableColumns = postgres.ColumnList{LogColumn, ImageIDColumn, CreatedAtColumn} + defaultColumns = postgres.ColumnList{CreatedAtColumn} ) return logsTable{ @@ -77,5 +79,6 @@ func newLogsTableImpl(schemaName, tableName, alias string) logsTable { AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/notes.go b/backend/.gen/haystack/haystack/table/notes.go deleted file mode 100644 index 1004a79..0000000 --- a/backend/.gen/haystack/haystack/table/notes.go +++ /dev/null @@ -1,87 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package table - -import ( - "github.com/go-jet/jet/v2/postgres" -) - -var Notes = newNotesTable("haystack", "notes", "") - -type notesTable struct { - postgres.Table - - // Columns - ID postgres.ColumnString - Name postgres.ColumnString - Description postgres.ColumnString - Content postgres.ColumnString - CreatedAt postgres.ColumnTimestampz - - AllColumns postgres.ColumnList - MutableColumns postgres.ColumnList -} - -type NotesTable struct { - notesTable - - EXCLUDED notesTable -} - -// AS creates new NotesTable with assigned alias -func (a NotesTable) AS(alias string) *NotesTable { - return newNotesTable(a.SchemaName(), a.TableName(), alias) -} - -// Schema creates new NotesTable with assigned schema name -func (a NotesTable) FromSchema(schemaName string) *NotesTable { - return newNotesTable(schemaName, a.TableName(), a.Alias()) -} - -// WithPrefix creates new NotesTable with assigned table prefix -func (a NotesTable) WithPrefix(prefix string) *NotesTable { - return newNotesTable(a.SchemaName(), prefix+a.TableName(), a.TableName()) -} - -// WithSuffix creates new NotesTable with assigned table suffix -func (a NotesTable) WithSuffix(suffix string) *NotesTable { - return newNotesTable(a.SchemaName(), a.TableName()+suffix, a.TableName()) -} - -func newNotesTable(schemaName, tableName, alias string) *NotesTable { - return &NotesTable{ - notesTable: newNotesTableImpl(schemaName, tableName, alias), - EXCLUDED: newNotesTableImpl("", "excluded", ""), - } -} - -func newNotesTableImpl(schemaName, tableName, alias string) notesTable { - var ( - IDColumn = postgres.StringColumn("id") - NameColumn = postgres.StringColumn("name") - DescriptionColumn = postgres.StringColumn("description") - ContentColumn = postgres.StringColumn("content") - CreatedAtColumn = postgres.TimestampzColumn("created_at") - allColumns = postgres.ColumnList{IDColumn, NameColumn, DescriptionColumn, ContentColumn, CreatedAtColumn} - mutableColumns = postgres.ColumnList{NameColumn, DescriptionColumn, ContentColumn, CreatedAtColumn} - ) - - return notesTable{ - Table: postgres.NewTable(schemaName, tableName, alias, allColumns...), - - //Columns - ID: IDColumn, - Name: NameColumn, - Description: DescriptionColumn, - Content: ContentColumn, - CreatedAt: CreatedAtColumn, - - AllColumns: allColumns, - MutableColumns: mutableColumns, - } -} diff --git a/backend/.gen/haystack/haystack/table/table_use_schema.go b/backend/.gen/haystack/haystack/table/table_use_schema.go index c838e15..4f9028f 100644 --- a/backend/.gen/haystack/haystack/table/table_use_schema.go +++ b/backend/.gen/haystack/haystack/table/table_use_schema.go @@ -15,22 +15,15 @@ func UseSchema(schema string) { Image = Image.FromSchema(schema) ImageContacts = ImageContacts.FromSchema(schema) ImageEvents = ImageEvents.FromSchema(schema) - ImageLinks = ImageLinks.FromSchema(schema) ImageLists = ImageLists.FromSchema(schema) ImageLocations = ImageLocations.FromSchema(schema) - ImageNotes = ImageNotes.FromSchema(schema) - ImageTags = ImageTags.FromSchema(schema) - ImageText = ImageText.FromSchema(schema) Lists = Lists.FromSchema(schema) Locations = Locations.FromSchema(schema) Logs = Logs.FromSchema(schema) - Notes = Notes.FromSchema(schema) UserContacts = UserContacts.FromSchema(schema) UserEvents = UserEvents.FromSchema(schema) UserImages = UserImages.FromSchema(schema) UserImagesToProcess = UserImagesToProcess.FromSchema(schema) UserLocations = UserLocations.FromSchema(schema) - UserNotes = UserNotes.FromSchema(schema) - UserTags = UserTags.FromSchema(schema) Users = Users.FromSchema(schema) } diff --git a/backend/.gen/haystack/haystack/table/user_contacts.go b/backend/.gen/haystack/haystack/table/user_contacts.go index 53ce58e..dc16d50 100644 --- a/backend/.gen/haystack/haystack/table/user_contacts.go +++ b/backend/.gen/haystack/haystack/table/user_contacts.go @@ -24,6 +24,7 @@ type userContactsTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type UserContactsTable struct { @@ -67,6 +68,7 @@ func newUserContactsTableImpl(schemaName, tableName, alias string) userContactsT CreatedAtColumn = postgres.TimestampzColumn("created_at") allColumns = postgres.ColumnList{IDColumn, UserIDColumn, ContactIDColumn, CreatedAtColumn} mutableColumns = postgres.ColumnList{UserIDColumn, ContactIDColumn, CreatedAtColumn} + defaultColumns = postgres.ColumnList{IDColumn, CreatedAtColumn} ) return userContactsTable{ @@ -80,5 +82,6 @@ func newUserContactsTableImpl(schemaName, tableName, alias string) userContactsT AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/user_events.go b/backend/.gen/haystack/haystack/table/user_events.go index 4c5718d..f7dff38 100644 --- a/backend/.gen/haystack/haystack/table/user_events.go +++ b/backend/.gen/haystack/haystack/table/user_events.go @@ -24,6 +24,7 @@ type userEventsTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type UserEventsTable struct { @@ -67,6 +68,7 @@ func newUserEventsTableImpl(schemaName, tableName, alias string) userEventsTable CreatedAtColumn = postgres.TimestampzColumn("created_at") allColumns = postgres.ColumnList{IDColumn, EventIDColumn, UserIDColumn, CreatedAtColumn} mutableColumns = postgres.ColumnList{EventIDColumn, UserIDColumn, CreatedAtColumn} + defaultColumns = postgres.ColumnList{IDColumn, CreatedAtColumn} ) return userEventsTable{ @@ -80,5 +82,6 @@ func newUserEventsTableImpl(schemaName, tableName, alias string) userEventsTable AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/user_images.go b/backend/.gen/haystack/haystack/table/user_images.go index e820699..bd5cb49 100644 --- a/backend/.gen/haystack/haystack/table/user_images.go +++ b/backend/.gen/haystack/haystack/table/user_images.go @@ -24,6 +24,7 @@ type userImagesTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type UserImagesTable struct { @@ -67,6 +68,7 @@ func newUserImagesTableImpl(schemaName, tableName, alias string) userImagesTable CreatedAtColumn = postgres.TimestampzColumn("created_at") allColumns = postgres.ColumnList{IDColumn, ImageIDColumn, UserIDColumn, CreatedAtColumn} mutableColumns = postgres.ColumnList{ImageIDColumn, UserIDColumn, CreatedAtColumn} + defaultColumns = postgres.ColumnList{IDColumn, CreatedAtColumn} ) return userImagesTable{ @@ -80,5 +82,6 @@ func newUserImagesTableImpl(schemaName, tableName, alias string) userImagesTable AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/user_images_to_process.go b/backend/.gen/haystack/haystack/table/user_images_to_process.go index 508ca60..1da2f3e 100644 --- a/backend/.gen/haystack/haystack/table/user_images_to_process.go +++ b/backend/.gen/haystack/haystack/table/user_images_to_process.go @@ -24,6 +24,7 @@ type userImagesToProcessTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type UserImagesToProcessTable struct { @@ -67,6 +68,7 @@ func newUserImagesToProcessTableImpl(schemaName, tableName, alias string) userIm UserIDColumn = postgres.StringColumn("user_id") allColumns = postgres.ColumnList{IDColumn, StatusColumn, ImageIDColumn, UserIDColumn} mutableColumns = postgres.ColumnList{StatusColumn, ImageIDColumn, UserIDColumn} + defaultColumns = postgres.ColumnList{IDColumn, StatusColumn} ) return userImagesToProcessTable{ @@ -80,5 +82,6 @@ func newUserImagesToProcessTableImpl(schemaName, tableName, alias string) userIm AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/user_locations.go b/backend/.gen/haystack/haystack/table/user_locations.go index adc41a1..a95acc7 100644 --- a/backend/.gen/haystack/haystack/table/user_locations.go +++ b/backend/.gen/haystack/haystack/table/user_locations.go @@ -24,6 +24,7 @@ type userLocationsTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type UserLocationsTable struct { @@ -67,6 +68,7 @@ func newUserLocationsTableImpl(schemaName, tableName, alias string) userLocation CreatedAtColumn = postgres.TimestampzColumn("created_at") allColumns = postgres.ColumnList{IDColumn, LocationIDColumn, UserIDColumn, CreatedAtColumn} mutableColumns = postgres.ColumnList{LocationIDColumn, UserIDColumn, CreatedAtColumn} + defaultColumns = postgres.ColumnList{IDColumn, CreatedAtColumn} ) return userLocationsTable{ @@ -80,5 +82,6 @@ func newUserLocationsTableImpl(schemaName, tableName, alias string) userLocation AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/.gen/haystack/haystack/table/user_notes.go b/backend/.gen/haystack/haystack/table/user_notes.go deleted file mode 100644 index 0c9d638..0000000 --- a/backend/.gen/haystack/haystack/table/user_notes.go +++ /dev/null @@ -1,84 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package table - -import ( - "github.com/go-jet/jet/v2/postgres" -) - -var UserNotes = newUserNotesTable("haystack", "user_notes", "") - -type userNotesTable struct { - postgres.Table - - // Columns - ID postgres.ColumnString - UserID postgres.ColumnString - NoteID postgres.ColumnString - CreatedAt postgres.ColumnTimestampz - - AllColumns postgres.ColumnList - MutableColumns postgres.ColumnList -} - -type UserNotesTable struct { - userNotesTable - - EXCLUDED userNotesTable -} - -// AS creates new UserNotesTable with assigned alias -func (a UserNotesTable) AS(alias string) *UserNotesTable { - return newUserNotesTable(a.SchemaName(), a.TableName(), alias) -} - -// Schema creates new UserNotesTable with assigned schema name -func (a UserNotesTable) FromSchema(schemaName string) *UserNotesTable { - return newUserNotesTable(schemaName, a.TableName(), a.Alias()) -} - -// WithPrefix creates new UserNotesTable with assigned table prefix -func (a UserNotesTable) WithPrefix(prefix string) *UserNotesTable { - return newUserNotesTable(a.SchemaName(), prefix+a.TableName(), a.TableName()) -} - -// WithSuffix creates new UserNotesTable with assigned table suffix -func (a UserNotesTable) WithSuffix(suffix string) *UserNotesTable { - return newUserNotesTable(a.SchemaName(), a.TableName()+suffix, a.TableName()) -} - -func newUserNotesTable(schemaName, tableName, alias string) *UserNotesTable { - return &UserNotesTable{ - userNotesTable: newUserNotesTableImpl(schemaName, tableName, alias), - EXCLUDED: newUserNotesTableImpl("", "excluded", ""), - } -} - -func newUserNotesTableImpl(schemaName, tableName, alias string) userNotesTable { - var ( - IDColumn = postgres.StringColumn("id") - UserIDColumn = postgres.StringColumn("user_id") - NoteIDColumn = postgres.StringColumn("note_id") - CreatedAtColumn = postgres.TimestampzColumn("created_at") - allColumns = postgres.ColumnList{IDColumn, UserIDColumn, NoteIDColumn, CreatedAtColumn} - mutableColumns = postgres.ColumnList{UserIDColumn, NoteIDColumn, CreatedAtColumn} - ) - - return userNotesTable{ - Table: postgres.NewTable(schemaName, tableName, alias, allColumns...), - - //Columns - ID: IDColumn, - UserID: UserIDColumn, - NoteID: NoteIDColumn, - CreatedAt: CreatedAtColumn, - - AllColumns: allColumns, - MutableColumns: mutableColumns, - } -} diff --git a/backend/.gen/haystack/haystack/table/user_tags.go b/backend/.gen/haystack/haystack/table/user_tags.go deleted file mode 100644 index 99dfc9e..0000000 --- a/backend/.gen/haystack/haystack/table/user_tags.go +++ /dev/null @@ -1,81 +0,0 @@ -// -// Code generated by go-jet DO NOT EDIT. -// -// WARNING: Changes to this file may cause incorrect behavior -// and will be lost if the code is regenerated -// - -package table - -import ( - "github.com/go-jet/jet/v2/postgres" -) - -var UserTags = newUserTagsTable("haystack", "user_tags", "") - -type userTagsTable struct { - postgres.Table - - // Columns - ID postgres.ColumnString - Tag postgres.ColumnString - UserID postgres.ColumnString - - AllColumns postgres.ColumnList - MutableColumns postgres.ColumnList -} - -type UserTagsTable struct { - userTagsTable - - EXCLUDED userTagsTable -} - -// AS creates new UserTagsTable with assigned alias -func (a UserTagsTable) AS(alias string) *UserTagsTable { - return newUserTagsTable(a.SchemaName(), a.TableName(), alias) -} - -// Schema creates new UserTagsTable with assigned schema name -func (a UserTagsTable) FromSchema(schemaName string) *UserTagsTable { - return newUserTagsTable(schemaName, a.TableName(), a.Alias()) -} - -// WithPrefix creates new UserTagsTable with assigned table prefix -func (a UserTagsTable) WithPrefix(prefix string) *UserTagsTable { - return newUserTagsTable(a.SchemaName(), prefix+a.TableName(), a.TableName()) -} - -// WithSuffix creates new UserTagsTable with assigned table suffix -func (a UserTagsTable) WithSuffix(suffix string) *UserTagsTable { - return newUserTagsTable(a.SchemaName(), a.TableName()+suffix, a.TableName()) -} - -func newUserTagsTable(schemaName, tableName, alias string) *UserTagsTable { - return &UserTagsTable{ - userTagsTable: newUserTagsTableImpl(schemaName, tableName, alias), - EXCLUDED: newUserTagsTableImpl("", "excluded", ""), - } -} - -func newUserTagsTableImpl(schemaName, tableName, alias string) userTagsTable { - var ( - IDColumn = postgres.StringColumn("id") - TagColumn = postgres.StringColumn("tag") - UserIDColumn = postgres.StringColumn("user_id") - allColumns = postgres.ColumnList{IDColumn, TagColumn, UserIDColumn} - mutableColumns = postgres.ColumnList{TagColumn, UserIDColumn} - ) - - return userTagsTable{ - Table: postgres.NewTable(schemaName, tableName, alias, allColumns...), - - //Columns - ID: IDColumn, - Tag: TagColumn, - UserID: UserIDColumn, - - AllColumns: allColumns, - MutableColumns: mutableColumns, - } -} diff --git a/backend/.gen/haystack/haystack/table/users.go b/backend/.gen/haystack/haystack/table/users.go index 412b46f..2880683 100644 --- a/backend/.gen/haystack/haystack/table/users.go +++ b/backend/.gen/haystack/haystack/table/users.go @@ -22,6 +22,7 @@ type usersTable struct { AllColumns postgres.ColumnList MutableColumns postgres.ColumnList + DefaultColumns postgres.ColumnList } type UsersTable struct { @@ -63,6 +64,7 @@ func newUsersTableImpl(schemaName, tableName, alias string) usersTable { EmailColumn = postgres.StringColumn("email") allColumns = postgres.ColumnList{IDColumn, EmailColumn} mutableColumns = postgres.ColumnList{EmailColumn} + defaultColumns = postgres.ColumnList{IDColumn} ) return usersTable{ @@ -74,5 +76,6 @@ func newUsersTableImpl(schemaName, tableName, alias string) usersTable { AllColumns: allColumns, MutableColumns: mutableColumns, + DefaultColumns: defaultColumns, } } diff --git a/backend/agents/note_agent.go b/backend/agents/description_agent.go similarity index 68% rename from backend/agents/note_agent.go rename to backend/agents/description_agent.go index a0555ec..ce7a0af 100644 --- a/backend/agents/note_agent.go +++ b/backend/agents/description_agent.go @@ -2,7 +2,6 @@ package agents import ( "context" - "screenmark/screenmark/.gen/haystack/haystack/model" "screenmark/screenmark/agents/client" "screenmark/screenmark/models" @@ -22,13 +21,13 @@ Do not return anything except markdown. If the image contains code, add this inside code blocks. You must try and correctly guess the language too. ` -type NoteAgent struct { +type DescriptionAgent struct { client client.AgentClient - noteModel models.NoteModel + imageModel models.ImageModel } -func (agent NoteAgent) GetNotes(userId uuid.UUID, imageId uuid.UUID, imageName string, imageData []byte) error { +func (agent DescriptionAgent) Describe(imageId uuid.UUID, imageName string, imageData []byte) error { request := client.AgentRequestBody{ Model: "gpt-4.1-nano", Temperature: 0.3, @@ -52,15 +51,7 @@ func (agent NoteAgent) GetNotes(userId uuid.UUID, imageId uuid.UUID, imageName s markdown := resp.Choices[0].Message.Content - note, err := agent.noteModel.Save(ctx, userId, model.Notes{ - Name: "the note", // TODO: add some json schema - Content: markdown, - }) - if err != nil { - return err - } - - _, err = agent.noteModel.SaveToImage(ctx, imageId, note.ID) + err = agent.imageModel.AddDescription(ctx, imageId, markdown) if err != nil { return err } @@ -68,15 +59,15 @@ func (agent NoteAgent) GetNotes(userId uuid.UUID, imageId uuid.UUID, imageName s return nil } -func NewNoteAgent(log *log.Logger, noteModel models.NoteModel) NoteAgent { +func NewDescriptionAgent(log *log.Logger, imageModel models.ImageModel) DescriptionAgent { client := client.CreateAgentClient(client.CreateAgentClientOptions{ SystemPrompt: noteAgentPrompt, Log: log, }) - agent := NoteAgent{ - client: client, - noteModel: noteModel, + agent := DescriptionAgent{ + client: client, + imageModel: imageModel, } return agent diff --git a/backend/agents/orchestrator.go b/backend/agents/orchestrator.go index 718da1e..e81244f 100644 --- a/backend/agents/orchestrator.go +++ b/backend/agents/orchestrator.go @@ -127,7 +127,7 @@ type Status struct { Ok bool `json:"ok"` } -func NewOrchestratorAgent(log *log.Logger, noteAgent NoteAgent, contactAgent client.AgentClient, locationAgent client.AgentClient, eventAgent client.AgentClient, imageName string, imageData []byte) client.AgentClient { +func NewOrchestratorAgent(log *log.Logger, contactAgent client.AgentClient, locationAgent client.AgentClient, eventAgent client.AgentClient, imageName string, imageData []byte) client.AgentClient { agent := client.CreateAgentClient(client.CreateAgentClientOptions{ SystemPrompt: orchestratorPrompt, JsonTools: orchestratorTools, @@ -139,12 +139,6 @@ func NewOrchestratorAgent(log *log.Logger, noteAgent NoteAgent, contactAgent cli return "Thought", nil }) - agent.ToolHandler.AddTool("noteAgent", func(info client.ToolHandlerInfo, args string, call client.ToolCall) (any, error) { - noteAgent.GetNotes(info.UserId, info.ImageId, imageName, imageData) - - return "noteAgent called successfully", nil - }) - agent.ToolHandler.AddTool("contactAgent", func(info client.ToolHandlerInfo, args string, call client.ToolCall) (any, error) { contactAgent.RunAgent(info.UserId, info.ImageId, imageName, imageData) diff --git a/backend/events.go b/backend/events.go index 9ca56ce..45c2f44 100644 --- a/backend/events.go +++ b/backend/events.go @@ -33,7 +33,6 @@ func ListenNewImageEvents(db *sql.DB, notifier *Notifier[Notification]) { locationModel := models.NewLocationModel(db) eventModel := models.NewEventModel(db) - noteModel := models.NewNoteModel(db) imageModel := models.NewImageModel(db) contactModel := models.NewContactModel(db) @@ -63,7 +62,6 @@ func ListenNewImageEvents(db *sql.DB, notifier *Notifier[Notification]) { splitWriter := createDbStdoutWriter(db, image.ImageID) - noteAgent := agents.NewNoteAgent(createLogger("Notes 📝", splitWriter), noteModel) contactAgent := agents.NewContactAgent(createLogger("Contacts 👥", splitWriter), contactModel) locationAgent := agents.NewLocationAgent(createLogger("Locations 📍", splitWriter), locationModel) eventAgent := agents.NewEventAgent(createLogger("Events 📅", splitWriter), eventModel, locationModel) @@ -73,10 +71,13 @@ func ListenNewImageEvents(db *sql.DB, notifier *Notifier[Notification]) { return } + descriptionAgent := agents.NewDescriptionAgent(createLogger("Description 📝", splitWriter), imageModel) + descriptionAgent.Describe(image.Image.ID, image.Image.ImageName, image.Image.Image) + listAgent := agents.NewListAgent(createLogger("Lists 🖋️", splitWriter), listModel) listAgent.RunAgent(image.UserID, image.ImageID, image.Image.ImageName, image.Image.Image) - orchestrator := agents.NewOrchestratorAgent(createLogger("Orchestrator 🎼", splitWriter), noteAgent, contactAgent, locationAgent, eventAgent, image.Image.ImageName, image.Image.Image) + orchestrator := agents.NewOrchestratorAgent(createLogger("Orchestrator 🎼", splitWriter), contactAgent, locationAgent, eventAgent, image.Image.ImageName, image.Image.Image) orchestrator.RunAgent(image.UserID, image.ImageID, image.Image.ImageName, image.Image.Image) _, err = imageModel.FinishProcessing(ctx, image.ID) diff --git a/backend/go.mod b/backend/go.mod index ed5f3d7..7bef415 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -9,7 +9,7 @@ require ( github.com/charmbracelet/x/ansi v0.4.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-chi/chi/v5 v5.2.1 // indirect - github.com/go-jet/jet/v2 v2.12.0 // indirect + github.com/go-jet/jet/v2 v2.13.0 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/golang-jwt/jwt/v5 v5.2.2 // indirect github.com/google/uuid v1.6.0 // indirect diff --git a/backend/go.sum b/backend/go.sum index e5991fa..c0abc95 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -13,6 +13,8 @@ github.com/go-chi/chi/v5 v5.2.1 h1:KOIHODQj58PmL80G2Eak4WdvUzjSJSm0vG72crDCqb8= github.com/go-chi/chi/v5 v5.2.1/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= github.com/go-jet/jet/v2 v2.12.0 h1:z2JfvBAZgsfxlQz6NXBYdZTXc7ep3jhbszTLtETv1JE= github.com/go-jet/jet/v2 v2.12.0/go.mod h1:ufQVRQeI1mbcO5R8uCEVcVf3Foej9kReBdwDx7YMWUM= +github.com/go-jet/jet/v2 v2.13.0 h1:DcD2IJRGos+4X40IQRV6S6q9onoOfZY/GPdvU6ImZcQ= +github.com/go-jet/jet/v2 v2.13.0/go.mod h1:YhT75U1FoYAxFOObbQliHmXVYQeffkBKWT7ZilZ3zPc= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= diff --git a/backend/main.go b/backend/main.go index 0f26368..ef54b55 100644 --- a/backend/main.go +++ b/backend/main.go @@ -266,8 +266,9 @@ func main() { } userImage, err := imageModel.Process(r.Context(), userId, model.Image{ - Image: image, - ImageName: imageName, + Image: image, + ImageName: imageName, + Description: "", }) if err != nil { log.Println("Second case") diff --git a/backend/models/image.go b/backend/models/image.go index fe9efae..d04d7be 100644 --- a/backend/models/image.go +++ b/backend/models/image.go @@ -38,18 +38,18 @@ type UserProcessingImage struct { func (m ImageModel) Process(ctx context.Context, userId uuid.UUID, image model.Image) (model.UserImagesToProcess, error) { tx, err := m.dbPool.BeginTx(ctx, nil) if err != nil { - return model.UserImagesToProcess{}, err + return model.UserImagesToProcess{}, fmt.Errorf("Failed to begin transaction", err) } insertImageStmt := Image. - INSERT(Image.ImageName, Image.Image). - VALUES(image.ImageName, image.Image). + INSERT(Image.ImageName, Image.Image, Image.Description). + VALUES(image.ImageName, image.Image, image.Description). RETURNING(Image.ID) insertedImage := model.Image{} err = insertImageStmt.QueryContext(ctx, tx, &insertedImage) if err != nil { - return model.UserImagesToProcess{}, err + return model.UserImagesToProcess{}, fmt.Errorf("Could not insert/query new image. SQL %s.", insertImageStmt.DebugSql(), err) } stmt := UserImagesToProcess. @@ -60,7 +60,7 @@ func (m ImageModel) Process(ctx context.Context, userId uuid.UUID, image model.I userImage := model.UserImagesToProcess{} err = stmt.QueryContext(ctx, tx, &userImage) if err != nil { - return model.UserImagesToProcess{}, err + return model.UserImagesToProcess{}, fmt.Errorf("Could not insert user_image", err) } err = tx.Commit() @@ -198,6 +198,16 @@ func (m ImageModel) GetProcessing(ctx context.Context, userId uuid.UUID) ([]User return images, err } +func (m ImageModel) AddDescription(ctx context.Context, imageId uuid.UUID, description string) error { + updateImageStmt := Image.UPDATE(Image.Description). + SET(description). + WHERE(Image.ID.EQ(UUID(imageId))) + + _, err := updateImageStmt.ExecContext(ctx, m.dbPool) + + return err +} + func (m ImageModel) IsUserAuthorized(ctx context.Context, imageId uuid.UUID, userId uuid.UUID) bool { getImageUserId := UserImages.SELECT(UserImages.UserID).WHERE(UserImages.ImageID.EQ(UUID(imageId))) diff --git a/backend/models/links.go b/backend/models/links.go deleted file mode 100644 index 94f9dcc..0000000 --- a/backend/models/links.go +++ /dev/null @@ -1,33 +0,0 @@ -package models - -import ( - "context" - "database/sql" - . "screenmark/screenmark/.gen/haystack/haystack/table" - - "github.com/google/uuid" -) - -type LinkModel struct { - dbPool *sql.DB -} - -func (m LinkModel) Save(ctx context.Context, imageId uuid.UUID, links []string) error { - if len(links) == 0 { - return nil - } - - stmt := ImageLinks.INSERT(ImageLinks.ImageID, ImageLinks.Link) - - for _, link := range links { - stmt = stmt.VALUES(imageId, link) - } - - _, err := stmt.ExecContext(ctx, m.dbPool) - - return err -} - -func NewLinkModel(db *sql.DB) LinkModel { - return LinkModel{dbPool: db} -} diff --git a/backend/models/notes.go b/backend/models/notes.go deleted file mode 100644 index 4d6f68f..0000000 --- a/backend/models/notes.go +++ /dev/null @@ -1,67 +0,0 @@ -package models - -import ( - "context" - "database/sql" - "screenmark/screenmark/.gen/haystack/haystack/model" - . "screenmark/screenmark/.gen/haystack/haystack/table" - - . "github.com/go-jet/jet/v2/postgres" - - "github.com/google/uuid" -) - -type NoteModel struct { - dbPool *sql.DB -} - -func (m NoteModel) List(ctx context.Context, userId uuid.UUID) ([]model.Notes, error) { - listNotesStmt := SELECT(Notes.AllColumns). - FROM( - Notes. - INNER_JOIN(UserNotes, UserNotes.NoteID.EQ(Notes.ID)), - ). - WHERE(UserNotes.UserID.EQ(UUID(userId))) - - locations := []model.Notes{} - - err := listNotesStmt.QueryContext(ctx, m.dbPool, &locations) - return locations, err -} - -func (m NoteModel) Save(ctx context.Context, userId uuid.UUID, note model.Notes) (model.Notes, error) { - insertNoteStmt := Notes. - INSERT(Notes.Name, Notes.Description, Notes.Content). - VALUES(note.Name, note.Description, note.Content). - RETURNING(Notes.AllColumns) - - insertedNote := model.Notes{} - err := insertNoteStmt.QueryContext(ctx, m.dbPool, &insertedNote) - if err != nil { - return model.Notes{}, err - } - - insertUserNoteStmt := UserNotes. - INSERT(UserNotes.UserID, UserNotes.NoteID). - VALUES(userId, insertedNote.ID) - - _, err = insertUserNoteStmt.ExecContext(ctx, m.dbPool) - - return insertedNote, err -} - -func (m NoteModel) SaveToImage(ctx context.Context, imageId uuid.UUID, noteId uuid.UUID) (model.ImageNotes, error) { - insertImageNoteStmt := ImageNotes. - INSERT(ImageNotes.ImageID, ImageNotes.NoteID). - VALUES(imageId, noteId). - RETURNING(ImageNotes.AllColumns) - - imageNote := model.ImageNotes{} - err := insertImageNoteStmt.QueryContext(ctx, m.dbPool, &imageNote) - - return imageNote, err -} - -func NewNoteModel(db *sql.DB) NoteModel { - return NoteModel{dbPool: db} -} diff --git a/backend/models/tags.go b/backend/models/tags.go deleted file mode 100644 index 949df90..0000000 --- a/backend/models/tags.go +++ /dev/null @@ -1,156 +0,0 @@ -package models - -import ( - "context" - "database/sql" - "fmt" - "screenmark/screenmark/.gen/haystack/haystack/model" - . "screenmark/screenmark/.gen/haystack/haystack/table" - - . "github.com/go-jet/jet/v2/postgres" - - "github.com/google/uuid" -) - -type TagModel struct { - dbPool *sql.DB -} - -// Raw dogging SQL is kinda based though? -// -// | nO, usE OrM!! -// -// | RAW - RAW -// | SQL | \ SQL -// | GOOD | \ GOOD -// | - - -// | -- -- -// | -- -- -// | ---- IQ ---- -func (m TagModel) getNonExistantTags(ctx context.Context, userId uuid.UUID, tags []string) ([]string, error) { - if len(tags) == 0 { - return tags, nil - } - - values := "" - counter := 1 - // big big SQL injection problem here? - for counter = 1; counter <= len(tags); counter++ { - values += fmt.Sprintf("($%d),", counter) - } - values = values[0 : len(values)-1] - - getNonExistingTags := fmt.Sprintf(`WITH given_tags - AS (SELECT given_tags.tag FROM (VALUES `+values+`) AS given_tags (tag)), - this_user_tags AS - (SELECT id, tag FROM haystack.user_tags WHERE user_tags.user_id = $%d) - SELECT given_tags.tag - FROM given_tags - LEFT OUTER JOIN haystack.user_tags ON haystack.user_tags.tag = given_tags.tag - where user_tags.tag is null`, counter) - - getNonExistingTagsStmt, err := m.dbPool.PrepareContext(ctx, getNonExistingTags) - defer getNonExistingTagsStmt.Close() - - if err != nil { - return []string{}, err - } - - args := make([]any, counter) - for i, v := range tags { - args[i] = v - } - args[counter-1] = userId.String() - - rows, err := getNonExistingTagsStmt.QueryContext(ctx, args...) - if err != nil { - return []string{}, err - } - - nonExistantTags := make([]string, 0) - - for rows.Next() { - var tag string - rows.Scan(&tag) - - nonExistantTags = append(nonExistantTags, tag) - } - - return nonExistantTags, nil -} - -func (m TagModel) Save(ctx context.Context, userId uuid.UUID, tags []string) error { - tagsToInsert, err := m.getNonExistantTags(ctx, userId, tags) - if err != nil { - return err - } - - if len(tagsToInsert) == 0 { - return nil - } - - stmt := UserTags.INSERT(UserTags.UserID, UserTags.Tag) - - for _, tag := range tagsToInsert { - stmt = stmt.VALUES(UUID(userId), tag) - } - - _, err = stmt.ExecContext(ctx, m.dbPool) - - return err -} - -func (m TagModel) List(ctx context.Context, userId uuid.UUID) ([]model.UserTags, error) { - listTagsStmt := UserTags.SELECT(UserTags.AllColumns).WHERE(UserTags.UserID.EQ(UUID(userId))) - - userTags := []model.UserTags{} - - err := listTagsStmt.QueryContext(ctx, m.dbPool, &userTags) - - return userTags, err -} - -func (m TagModel) SaveToImage(ctx context.Context, imageId uuid.UUID, tags []string) error { - if len(tags) == 0 { - return nil - } - - userId, err := getUserIdFromImage(ctx, m.dbPool, imageId) - if err != nil { - return err - } - - err = m.Save(ctx, userId, tags) - if err != nil { - return err - } - - userTagsExpression := make([]Expression, 0) - for _, tag := range tags { - userTagsExpression = append(userTagsExpression, String(tag)) - } - - userTags := make([]model.UserTags, 0) - - getTagsStmt := UserTags.SELECT( - UserTags.ID, UserTags.Tag, - ).WHERE(UserTags.Tag.IN(userTagsExpression...)) - err = getTagsStmt.Query(m.dbPool, &userTags) - if err != nil { - return err - } - - stmt := ImageTags.INSERT(ImageTags.ImageID, ImageTags.TagID) - - for _, t := range userTags { - stmt = stmt.VALUES(imageId, t.ID) - } - - _, err = stmt.ExecContext(ctx, m.dbPool) - - return err -} - -func NewTagModel(db *sql.DB) TagModel { - return TagModel{dbPool: db} -} diff --git a/backend/models/text.go b/backend/models/text.go deleted file mode 100644 index 2f5c9ce..0000000 --- a/backend/models/text.go +++ /dev/null @@ -1,35 +0,0 @@ -package models - -import ( - "context" - "database/sql" - . "screenmark/screenmark/.gen/haystack/haystack/table" - - "github.com/google/uuid" -) - -type TextModel struct { - dbPool *sql.DB -} - -func (m TextModel) Save(ctx context.Context, imageId uuid.UUID, texts []string) error { - if len(texts) == 0 { - return nil - } - - saveImageTextStmt := ImageText.INSERT(ImageText.ImageID, ImageText.ImageText) - - for _, t := range texts { - saveImageTextStmt = saveImageTextStmt.VALUES(imageId, t) - } - - saveImageTextStmt.RETURNING(ImageText.AllColumns) - - _, err := saveImageTextStmt.ExecContext(ctx, m.dbPool) - - return err -} - -func NewTextModel(db *sql.DB) TextModel { - return TextModel{dbPool: db} -} diff --git a/backend/models/user.go b/backend/models/user.go index 4da269b..62932e9 100644 --- a/backend/models/user.go +++ b/backend/models/user.go @@ -24,7 +24,6 @@ type ImageWithProperties struct { Locations []model.Locations Events []model.Events - Notes []model.Notes Contacts []model.Contacts } @@ -42,11 +41,6 @@ type PropertiesWithImage struct { Events []struct { model.Events - Images uuid.UUIDs - } - Notes []struct { - model.Notes - Images uuid.UUIDs } } @@ -69,7 +63,6 @@ func transpose(imageProperties []ImageWithProperties) PropertiesWithImage { contactMap := make(map[uuid.UUID]model.Contacts) locationMap := make(map[uuid.UUID]model.Locations) - noteMap := make(map[uuid.UUID]model.Notes) eventMap := make(map[uuid.UUID]model.Events) for _, image := range imageProperties { @@ -81,10 +74,6 @@ func transpose(imageProperties []ImageWithProperties) PropertiesWithImage { locationMap[location.ID] = location addDependency(location.ID, image.Image.ID) } - for _, note := range image.Notes { - noteMap[note.ID] = note - addDependency(note.ID, image.Image.ID) - } for _, event := range image.Events { eventMap[event.ID] = event addDependency(event.ID, image.Image.ID) @@ -100,10 +89,6 @@ func transpose(imageProperties []ImageWithProperties) PropertiesWithImage { model.Locations Images uuid.UUIDs }, 0), - Notes: make([]struct { - model.Notes - Images uuid.UUIDs - }, 0), Events: make([]struct { model.Events Images uuid.UUIDs @@ -130,16 +115,6 @@ func transpose(imageProperties []ImageWithProperties) PropertiesWithImage { }) } - for noteId, note := range noteMap { - properties.Notes = append(properties.Notes, struct { - model.Notes - Images uuid.UUIDs - }{ - Notes: note, - Images: dependencies[noteId], - }) - } - for eventId, event := range eventMap { properties.Events = append(properties.Events, struct { model.Events @@ -175,13 +150,6 @@ func propertiesToTypeArray(properties PropertiesWithImage) []TypedProperties { }) } - for _, note := range properties.Notes { - typedProperties = append(typedProperties, TypedProperties{ - Type: "note", - Data: note, - }) - } - for _, event := range properties.Events { typedProperties = append(typedProperties, TypedProperties{ Type: "event", @@ -219,33 +187,21 @@ func getListImagesStmt() SelectStatement { UserImages.ID.AS("ImageWithProperties.ID"), Image.ID, Image.ImageName, - ImageTags.AllColumns, - UserTags.AllColumns, - ImageText.AllColumns, - ImageLinks.AllColumns, ImageLocations.AllColumns, Locations.AllColumns, ImageEvents.AllColumns, Events.AllColumns, ImageContacts.AllColumns, Contacts.AllColumns, - ImageNotes.AllColumns, - Notes.AllColumns, ). FROM( UserImages.INNER_JOIN(Image, Image.ID.EQ(UserImages.ImageID)). - LEFT_JOIN(ImageTags, ImageTags.ImageID.EQ(Image.ID)). - LEFT_JOIN(UserTags, UserTags.ID.EQ(ImageTags.TagID)). - LEFT_JOIN(ImageText, ImageText.ImageID.EQ(Image.ID)). - LEFT_JOIN(ImageLinks, ImageLinks.ImageID.EQ(Image.ID)). LEFT_JOIN(ImageLocations, ImageLocations.ImageID.EQ(UserImages.ImageID)). LEFT_JOIN(Locations, Locations.ID.EQ(ImageLocations.LocationID)). LEFT_JOIN(ImageEvents, ImageEvents.ImageID.EQ(UserImages.ImageID)). LEFT_JOIN(Events, Events.ID.EQ(ImageEvents.EventID)). LEFT_JOIN(ImageContacts, ImageContacts.ImageID.EQ(UserImages.ImageID)). - LEFT_JOIN(Contacts, Contacts.ID.EQ(ImageContacts.ContactID)). - LEFT_JOIN(ImageNotes, ImageNotes.ImageID.EQ(UserImages.ImageID)). - LEFT_JOIN(Notes, Notes.ID.EQ(ImageNotes.NoteID))) + LEFT_JOIN(Contacts, Contacts.ID.EQ(ImageContacts.ContactID))) } func (m UserModel) ListImageWithProperties(ctx context.Context, userId uuid.UUID, imageId uuid.UUID) (ImageWithProperties, error) { diff --git a/backend/schema.sql b/backend/schema.sql index 9d719ee..675153a 100644 --- a/backend/schema.sql +++ b/backend/schema.sql @@ -16,6 +16,7 @@ CREATE TABLE haystack.users ( CREATE TABLE haystack.image ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), image_name TEXT NOT NULL, + description TEXT NOT NULL, image BYTEA NOT NULL ); @@ -34,34 +35,6 @@ CREATE TABLE haystack.user_images ( created_at TIMESTAMP WITH TIME ZONE DEFAULT now() ); -/* ===== DEPRECATED ===== */ - -CREATE TABLE haystack.user_tags ( - id uuid PRIMARY KEY DEFAULT gen_random_uuid(), - tag VARCHAR(32) UNIQUE NOT NULL, - user_id uuid NOT NULL REFERENCES haystack.users (id) -); - -CREATE TABLE haystack.image_tags ( - id uuid PRIMARY KEY DEFAULT gen_random_uuid(), - tag_id UUID NOT NULL REFERENCES haystack.user_tags (id), - image_id UUID NOT NULL REFERENCES haystack.image (id) -); - -CREATE TABLE haystack.image_text ( - id uuid PRIMARY KEY DEFAULT gen_random_uuid(), - image_text TEXT NOT NULL, - image_id UUID NOT NULL REFERENCES haystack.image (id) -); - -CREATE TABLE haystack.image_links ( - id uuid PRIMARY KEY DEFAULT gen_random_uuid(), - link TEXT NOT NULL, - image_id UUID NOT NULL REFERENCES haystack.image (id) -); - -/* ===== END DEPRECATED ===== */ - CREATE TABLE haystack.locations ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), name TEXT NOT NULL, @@ -148,34 +121,6 @@ CREATE TABLE haystack.user_events ( created_at TIMESTAMP WITH TIME ZONE DEFAULT now() ); -CREATE TABLE haystack.notes ( - id uuid PRIMARY KEY DEFAULT gen_random_uuid(), - - -- It seems name and description are frequent. We could use table inheritance. - name TEXT NOT NULL, - description TEXT, - - content TEXT NOT NULL, - - created_at TIMESTAMP WITH TIME ZONE DEFAULT now() -); - -CREATE TABLE haystack.image_notes ( - id uuid PRIMARY KEY DEFAULT gen_random_uuid(), - image_id UUID NOT NULL REFERENCES haystack.image (id), - note_id UUID NOT NULL REFERENCES haystack.notes (id), - - created_at TIMESTAMP WITH TIME ZONE DEFAULT now() -); - -CREATE TABLE haystack.user_notes ( - id uuid PRIMARY KEY DEFAULT gen_random_uuid(), - user_id UUID NOT NULL REFERENCES haystack.users (id), - note_id UUID NOT NULL REFERENCES haystack.notes (id), - - created_at TIMESTAMP WITH TIME ZONE DEFAULT now() -); - CREATE TABLE haystack.logs ( log TEXT NOT NULL, image_id UUID NOT NULL REFERENCES haystack.image (id), @@ -202,8 +147,6 @@ CREATE TABLE haystack.image_lists ( /* -----| Indexes |----- */ -CREATE INDEX user_tags_index ON haystack.user_tags(tag); - /* -----| Stored Procedures |----- */ CREATE OR REPLACE FUNCTION notify_new_image() @@ -236,101 +179,3 @@ FOR EACH ROW EXECUTE PROCEDURE notify_new_processing_image_status(); /* -----| Test Data |----- */ - --- Insert a user -INSERT INTO haystack.users (id, email) VALUES ('1db09f34-b155-4bf2-b606-dda25365fc89', 'me@email.com'); - --- Insert images -INSERT INTO haystack.image (id, image_name, image) VALUES -('3bd3fa04-e4b4-4ffb-b282-d573a092eb71', 'Sample Image 1', 'sample_image_1_bytes'), -('f4560a78-d5d3-433e-8d90-b75c66e25423', 'Sample Image 2', 'sample_image_2_bytes'); - --- Insert user images to process -INSERT INTO haystack.user_images_to_process (id, image_id, user_id) VALUES -('abe3679c-e787-4670-b5da-570453938f18', '3bd3fa04-e4b4-4ffb-b282-d573a092eb71', '1db09f34-b155-4bf2-b606-dda25365fc89'), -('8f3727e8-03fa-49bf-b0fe-ba8762df0902', 'f4560a78-d5d3-433e-8d90-b75c66e25423', '1db09f34-b155-4bf2-b606-dda25365fc89'); - --- Insert user images -INSERT INTO haystack.user_images (id, image_id, user_id) VALUES -('28ade3a5-30c0-4f0a-93ff-5d062ba5c253', '3bd3fa04-e4b4-4ffb-b282-d573a092eb71', '1db09f34-b155-4bf2-b606-dda25365fc89'), -('c9425f01-a496-4c0a-919e-54b58c8ba600', 'f4560a78-d5d3-433e-8d90-b75c66e25423', '1db09f34-b155-4bf2-b606-dda25365fc89'); - --- Insert user tags -INSERT INTO haystack.user_tags (id, tag, user_id) VALUES -('118c9491-a1ea-4930-88ee-33edfbc61cd3', 'vacation', '1db09f34-b155-4bf2-b606-dda25365fc89'), -('c3e8c00a-4af6-45c6-acc3-53aa7ce2024a', 'family', '1db09f34-b155-4bf2-b606-dda25365fc89'); - --- Insert image tags -INSERT INTO haystack.image_tags (id, tag_id, image_id) VALUES -('38ec5481-7b09-4e50-98b8-a85bbd5f6c6e', '118c9491-a1ea-4930-88ee-33edfbc61cd3', '3bd3fa04-e4b4-4ffb-b282-d573a092eb71'), -('9d64f58e-1d61-4c97-ae8b-a38bc3519fe1', 'c3e8c00a-4af6-45c6-acc3-53aa7ce2024a', 'f4560a78-d5d3-433e-8d90-b75c66e25423'); - --- Insert image text -INSERT INTO haystack.image_text (id, image_text, image_id) VALUES -('fdd7a9f4-2a9a-494e-89d2-a63df8e45d62', 'Sample text for image 1', '3bd3fa04-e4b4-4ffb-b282-d573a092eb71'), -('95516f15-575c-485b-92ab-22eb18a306c1', 'Sample text for image 2', 'f4560a78-d5d3-433e-8d90-b75c66e25423'); - --- Insert image links -INSERT INTO haystack.image_links (id, link, image_id) VALUES -('bbcc284f-c1f6-47ac-8d54-65b7729f03be', 'http://example.com/image1', '3bd3fa04-e4b4-4ffb-b282-d573a092eb71'), -('7391b2d1-6141-4195-8a4c-9c8ba4491b5a', 'http://example.com/image2', 'f4560a78-d5d3-433e-8d90-b75c66e25423'); - --- Insert locations -INSERT INTO haystack.locations (id, name, address, description) VALUES -('5ac6f116-c21a-408b-9d2b-e8227a9a8503', 'Sample Location 1', '123 Sample St', 'A sample location'), -('cd4b1815-5019-406d-9f1d-e9e5ac34c5f1', 'Sample Location 2', '456 Sample Ave', 'Another sample location'); - --- Insert image locations -INSERT INTO haystack.image_locations (id, location_id, image_id) VALUES -('0e0c5cc2-b5b3-4b26-9d9c-2517b9358eb3', '5ac6f116-c21a-408b-9d2b-e8227a9a8503', '3bd3fa04-e4b4-4ffb-b282-d573a092eb71'), -('98facc74-cfc0-41cd-87e1-5e3822ae3407', 'cd4b1815-5019-406d-9f1d-e9e5ac34c5f1', 'f4560a78-d5d3-433e-8d90-b75c66e25423'); - --- Insert user locations -INSERT INTO haystack.user_locations (id, location_id, user_id) VALUES -('1427ca1c-293f-4fab-b813-2acf145715f5', '5ac6f116-c21a-408b-9d2b-e8227a9a8503', '1db09f34-b155-4bf2-b606-dda25365fc89'), -('343f9321-f63d-4248-aaab-3a1264d9cb5e', 'cd4b1815-5019-406d-9f1d-e9e5ac34c5f1', '1db09f34-b155-4bf2-b606-dda25365fc89'); - --- Insert contacts -INSERT INTO haystack.contacts (id, name, description, phone_number, email) VALUES -('943be2ab-4db4-4e4e-bd1c-b78ad96df0d1', 'Contact 1', 'Sample contact description', '123-456-7890', 'contact1@example.com'), -('09e2bf18-09b7-4553-971e-45136bd5b12f', 'Contact 2', 'Another sample contact description', '098-765-4321', 'contact2@example.com'); - --- Insert user contacts -INSERT INTO haystack.user_contacts (id, user_id, contact_id) VALUES -('d74125e4-cbe4-4b83-8432-e0a3206af91c', '1db09f34-b155-4bf2-b606-dda25365fc89', '943be2ab-4db4-4e4e-bd1c-b78ad96df0d1'), -('46e8cbd4-46a6-4499-9575-d3aad003fd1c', '1db09f34-b155-4bf2-b606-dda25365fc89', '09e2bf18-09b7-4553-971e-45136bd5b12f'); - --- Insert image contacts -INSERT INTO haystack.image_contacts (id, image_id, contact_id) VALUES -('db075381-e89b-4582-800e-07561f9139e8', '3bd3fa04-e4b4-4ffb-b282-d573a092eb71', '943be2ab-4db4-4e4e-bd1c-b78ad96df0d1'), -('7384970d-3d3c-4e29-b158-edf200c53169', 'f4560a78-d5d3-433e-8d90-b75c66e25423', '09e2bf18-09b7-4553-971e-45136bd5b12f'); - --- Insert events -INSERT INTO haystack.events (id, name, description, start_date_time, end_date_time, location_id, organizer_id) VALUES -('24a9dcbc-f8dc-4fca-835b-7ea57850d0b7', 'Sample Event 1', 'A sample event description', '2023-01-01 10:00:00', '2023-01-01 12:00:00', '5ac6f116-c21a-408b-9d2b-e8227a9a8503', '943be2ab-4db4-4e4e-bd1c-b78ad96df0d1'), -('9cb6b0ae-3b02-4343-9858-5a07dd248562', 'Sample Event 2', 'Another sample event description', '2023-02-01 14:00:00', '2023-02-01 16:00:00', 'cd4b1815-5019-406d-9f1d-e9e5ac34c5f1', '09e2bf18-09b7-4553-971e-45136bd5b12f'); - --- Insert image events -INSERT INTO haystack.image_events (id, event_id, image_id) VALUES -('5268a005-b3eb-4a30-8823-c8e9666507bb', '24a9dcbc-f8dc-4fca-835b-7ea57850d0b7', '3bd3fa04-e4b4-4ffb-b282-d573a092eb71'), -('9d6d4d26-c2a2-427f-92ed-34dc8c2d3e5f', '9cb6b0ae-3b02-4343-9858-5a07dd248562', 'f4560a78-d5d3-433e-8d90-b75c66e25423'); - --- Insert user events -INSERT INTO haystack.user_events (id, event_id, user_id) VALUES -('16d815e4-6387-4fe9-b31d-5baff0567345', '24a9dcbc-f8dc-4fca-835b-7ea57850d0b7', '1db09f34-b155-4bf2-b606-dda25365fc89'), -('43078366-d265-4ff9-9210-e11680bd6bcd', '9cb6b0ae-3b02-4343-9858-5a07dd248562', '1db09f34-b155-4bf2-b606-dda25365fc89'); - --- Insert notes -INSERT INTO haystack.notes (id, name, description, content) VALUES -('6524f6b9-c659-409e-b2a0-abd3c3f5b5bb', 'Sample Note 1', 'A sample note description', 'This is the content of the sample note 1'), -('a274b9b3-024f-457d-b4a0-d4535c2cca54', 'Sample Note 2', 'Another sample note description', 'This is the content of the sample note 2'); - --- Insert image notes -INSERT INTO haystack.image_notes (id, image_id, note_id) VALUES -('6062fceb-7b3f-41fb-8509-489218968204', '3bd3fa04-e4b4-4ffb-b282-d573a092eb71', '6524f6b9-c659-409e-b2a0-abd3c3f5b5bb'), -('956dd3f6-4513-4cbc-9a5e-03dbec769402', 'f4560a78-d5d3-433e-8d90-b75c66e25423', 'a274b9b3-024f-457d-b4a0-d4535c2cca54'); - --- Insert user notes -INSERT INTO haystack.user_notes (id, user_id, note_id) VALUES -('e3fa7a74-acbf-4aa9-930b-f10bd8a6ced5', '1db09f34-b155-4bf2-b606-dda25365fc89', '6524f6b9-c659-409e-b2a0-abd3c3f5b5bb'), -('ebaef76b-3b78-491c-93f7-19510080284d', '1db09f34-b155-4bf2-b606-dda25365fc89', 'a274b9b3-024f-457d-b4a0-d4535c2cca54');