From b99432c20239d0c78994bb372c457aefb79f93ac Mon Sep 17 00:00:00 2001 From: John Costa Date: Mon, 24 Feb 2025 21:00:05 +0000 Subject: [PATCH] feat: saving AI information to database --- .../haystack/haystack/model/image_tags.go | 3 +- .../.gen/haystack/haystack/model/user_tags.go | 18 ----- .../haystack/haystack/table/image_tags.go | 13 +-- .../haystack/table/table_use_schema.go | 1 - .../.gen/haystack/haystack/table/user_tags.go | 81 ------------------- backend/main.go | 10 ++- backend/models/image.go | 63 ++++++++++++++- backend/schema.sql | 9 +-- 8 files changed, 80 insertions(+), 118 deletions(-) delete mode 100644 backend/.gen/haystack/haystack/model/user_tags.go delete mode 100644 backend/.gen/haystack/haystack/table/user_tags.go diff --git a/backend/.gen/haystack/haystack/model/image_tags.go b/backend/.gen/haystack/haystack/model/image_tags.go index a3c666c..9fb990b 100644 --- a/backend/.gen/haystack/haystack/model/image_tags.go +++ b/backend/.gen/haystack/haystack/model/image_tags.go @@ -12,6 +12,7 @@ import ( ) type ImageTags struct { - TagID uuid.UUID + ID uuid.UUID `sql:"primary_key"` + Tag string ImageID uuid.UUID } 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/image_tags.go b/backend/.gen/haystack/haystack/table/image_tags.go index 9aaa4f8..7074850 100644 --- a/backend/.gen/haystack/haystack/table/image_tags.go +++ b/backend/.gen/haystack/haystack/table/image_tags.go @@ -17,7 +17,8 @@ type imageTagsTable struct { postgres.Table // Columns - TagID postgres.ColumnString + ID postgres.ColumnString + Tag postgres.ColumnString ImageID postgres.ColumnString AllColumns postgres.ColumnList @@ -59,17 +60,19 @@ func newImageTagsTable(schemaName, tableName, alias string) *ImageTagsTable { func newImageTagsTableImpl(schemaName, tableName, alias string) imageTagsTable { var ( - TagIDColumn = postgres.StringColumn("tag_id") + IDColumn = postgres.StringColumn("id") + TagColumn = postgres.StringColumn("tag") ImageIDColumn = postgres.StringColumn("image_id") - allColumns = postgres.ColumnList{TagIDColumn, ImageIDColumn} - mutableColumns = postgres.ColumnList{TagIDColumn, ImageIDColumn} + allColumns = postgres.ColumnList{IDColumn, TagColumn, ImageIDColumn} + mutableColumns = postgres.ColumnList{TagColumn, ImageIDColumn} ) return imageTagsTable{ Table: postgres.NewTable(schemaName, tableName, alias, allColumns...), //Columns - TagID: TagIDColumn, + ID: IDColumn, + Tag: TagColumn, ImageID: ImageIDColumn, AllColumns: allColumns, diff --git a/backend/.gen/haystack/haystack/table/table_use_schema.go b/backend/.gen/haystack/haystack/table/table_use_schema.go index f7f65cd..4826795 100644 --- a/backend/.gen/haystack/haystack/table/table_use_schema.go +++ b/backend/.gen/haystack/haystack/table/table_use_schema.go @@ -14,6 +14,5 @@ func UseSchema(schema string) { ImageTags = ImageTags.FromSchema(schema) ImageText = ImageText.FromSchema(schema) UserImages = UserImages.FromSchema(schema) - UserTags = UserTags.FromSchema(schema) Users = Users.FromSchema(schema) } 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/main.go b/backend/main.go index 7ad91e1..a6cd088 100644 --- a/backend/main.go +++ b/backend/main.go @@ -61,7 +61,11 @@ func main() { return } - log.Printf("Info: %+v\n", imageInfo) + log.Println("Finished processing image " + parameters.Extra) + + models.SaveImageTags(parameters.Extra, imageInfo.Tags) + models.SaveImageLinks(parameters.Extra, imageInfo.Links) + models.SaveImageTexts(parameters.Extra, imageInfo.Tags) }() } }() @@ -155,10 +159,10 @@ func main() { return } + w.WriteHeader(http.StatusCreated) + fmt.Fprint(w, string(jsonUserImage)) w.Header().Add("Content-Type", "application/json") - - w.WriteHeader(http.StatusCreated) }) log.Println("Listening and serving on port 3040.") diff --git a/backend/models/image.go b/backend/models/image.go index 9fed339..5366b97 100644 --- a/backend/models/image.go +++ b/backend/models/image.go @@ -34,12 +34,71 @@ func GetImage(imageId string) (model.UserImages, error) { return images[0], err } -func GetUserImages(userId string) ([]model.UserImages, error) { +type UserImagesWithInfo struct { + model.UserImages + + Tags []model.ImageTags + Links []model.ImageLinks + Text []model.ImageText +} + +func GetUserImages(userId string) ([]UserImagesWithInfo, error) { id := uuid.MustParse(userId) stmt := UserImages.SELECT(UserImages.ID, UserImages.ImageName).WHERE(UserImages.UserID.EQ(UUID(id))) - images := []model.UserImages{} + images := []UserImagesWithInfo{} err := stmt.Query(db, &images) return images, err } + +func SaveImageTags(imageId string, tags []string) ([]model.ImageTags, error) { + id := uuid.MustParse(imageId) + + stmt := ImageTags.INSERT(ImageTags.ImageID, ImageTags.Tag) + + for _, t := range tags { + stmt = stmt.VALUES(id, t) + } + + stmt.RETURNING(ImageTags.AllColumns) + + imageTags := []model.ImageTags{} + err := stmt.Query(db, &imageTags) + + return imageTags, err +} + +func SaveImageLinks(imageId string, links []string) ([]model.ImageLinks, error) { + id := uuid.MustParse(imageId) + + stmt := ImageTags.INSERT(ImageLinks.ImageID, ImageLinks.Link) + + for _, t := range links { + stmt = stmt.VALUES(id, t) + } + + stmt.RETURNING(ImageLinks.AllColumns) + + imageLinks := []model.ImageLinks{} + err := stmt.Query(db, &imageLinks) + + return imageLinks, err +} + +func SaveImageTexts(imageId string, texts []string) ([]model.ImageText, error) { + id := uuid.MustParse(imageId) + + stmt := ImageTags.INSERT(ImageText.ImageID, ImageText.ImageText) + + for _, t := range texts { + stmt = stmt.VALUES(id, t) + } + + stmt.RETURNING(ImageText.AllColumns) + + imageTags := []model.ImageText{} + err := stmt.Query(db, &imageTags) + + return imageTags, err +} diff --git a/backend/schema.sql b/backend/schema.sql index 91dabf3..9d366e8 100644 --- a/backend/schema.sql +++ b/backend/schema.sql @@ -18,14 +18,9 @@ CREATE TABLE haystack.user_images ( user_id uuid NOT NULL REFERENCES haystack.users (id) ); -CREATE TABLE haystack.user_tags ( - id uuid PRIMARY KEY DEFAULT gen_random_uuid(), - tag TEXT NOT NULL, - user_id uuid NOT NULL REFERENCES haystack.users (id) -); - CREATE TABLE haystack.image_tags ( - tag_id UUID NOT NULL REFERENCES haystack.user_tags (id), + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + tag TEXT NOT NULL, image_id UUID NOT NULL REFERENCES haystack.user_images (id) );