feat(tags): creating and getting user tags

This commit is contained in:
2025-03-11 21:23:41 +00:00
parent c215bf6909
commit 6fcb1e9f26
7 changed files with 185 additions and 7 deletions

78
backend/models/tags.go Normal file
View File

@@ -0,0 +1,78 @@
package models
import (
"screenmark/screenmark/.gen/haystack/haystack/model"
. "screenmark/screenmark/.gen/haystack/haystack/table"
. "github.com/go-jet/jet/v2/postgres"
"github.com/google/uuid"
)
// Raw dogging SQL is kinda based though?
//
// | nO, usE OrM!!
//
// | RAW - RAW
// | SQL | \ SQL
// | GOOD | \ GOOD
// | - -
// | -- --
// | -- --
// | ---- IQ ----
func getNonExistantTags(userId uuid.UUID, tags []string) ([]string, error) {
stmt, err := db.Prepare(`WITH given_tags
AS (SELECT given_tags.tag FROM (VALUES ('a'), ('b'), ('c')) AS given_tags (tag))
SELECT given_tags.tag
FROM given_tags
LEFT OUTER JOIN haystack.user_tags ON haystack.user_tags.tag = a.tag
where user_tags.tag is null;`)
if err != nil {
return []string{}, err
}
defer stmt.Close()
rows, err := stmt.Query()
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 CreateTags(userId uuid.UUID, tags []string) error {
tagsToInsert, err := getNonExistantTags(userId, tags)
if err != nil {
return err
}
stmt := UserTags.INSERT(UserTags.UserID, UserTags.Tag)
for _, tag := range tagsToInsert {
stmt = stmt.VALUES(UUID(userId), tag)
}
_, err = stmt.Exec(db)
return err
}
func GetTags(userId uuid.UUID) ([]model.UserTags, error) {
stmt := UserTags.SELECT(UserTags.AllColumns).WHERE(UserTags.UserID.EQ(UUID(userId)))
userTags := []model.UserTags{}
err := stmt.Query(db, &userTags)
return userTags, err
}