feat(backend): use jsonb instead of composite type arrays

This commit is contained in:
Sam 2023-03-12 01:31:10 +01:00
parent f358a56053
commit b8a7e7443d
Signed by: sam
GPG key ID: B4EF20DDE721CAA1
14 changed files with 161 additions and 1467 deletions

View file

@ -3,55 +3,33 @@ package db
import (
"context"
"codeberg.org/u1f320/pronouns.cc/backend/db/queries"
"emperror.dev/errors"
"github.com/jackc/pgx/v4"
"github.com/rs/xid"
)
func (db *DB) SetUserNamesPronouns(ctx context.Context, tx pgx.Tx, userID xid.ID, names []FieldEntry, pronouns []PronounEntry) (err error) {
_, err = queries.NewQuerier(tx).UpdateUserNamesPronouns(ctx, queries.UpdateUserNamesPronounsParams{
ID: userID.String(),
Names: entriesToDBEntries(names),
Pronouns: pronounEntriesToDBEntries(pronouns),
})
sql, args, err := sq.Update("users").Set("names", names).Set("pronouns", pronouns).Where("id = ?", userID).ToSql()
if err != nil {
return errors.Wrap(err, "executing update names/pronouns query")
return errors.Wrap(err, "building sql")
}
_, err = tx.Exec(ctx, sql, args...)
if err != nil {
return errors.Wrap(err, "executing query")
}
return nil
}
func (db *DB) SetMemberNamesPronouns(ctx context.Context, tx pgx.Tx, memberID xid.ID, names []FieldEntry, pronouns []PronounEntry) (err error) {
_, err = queries.NewQuerier(tx).UpdateMemberNamesPronouns(ctx, queries.UpdateMemberNamesPronounsParams{
ID: memberID.String(),
Names: entriesToDBEntries(names),
Pronouns: pronounEntriesToDBEntries(pronouns),
})
sql, args, err := sq.Update("members").Set("names", names).Set("pronouns", pronouns).Where("id = ?", memberID).ToSql()
if err != nil {
return errors.Wrap(err, "executing update names/pronouns query")
return errors.Wrap(err, "building sql")
}
_, err = tx.Exec(ctx, sql, args...)
if err != nil {
return errors.Wrap(err, "executing query")
}
return nil
}
func fieldEntriesFromDB(dn []queries.FieldEntry) []FieldEntry {
names := make([]FieldEntry, len(dn))
for i := range dn {
names[i] = FieldEntry{
Value: *dn[i].Value,
Status: WordStatus(*dn[i].Status),
}
}
return names
}
func pronounsFromDB(dn []queries.PronounEntry) []PronounEntry {
pronouns := make([]PronounEntry, len(dn))
for i := range dn {
pronouns[i] = PronounEntry{
DisplayText: dn[i].DisplayValue,
Pronouns: *dn[i].Value,
Status: WordStatus(*dn[i].Status),
}
}
return pronouns
}