get single merch

This commit is contained in:
nquidox 2026-03-16 21:09:01 +03:00
parent ec4fe5151e
commit 7922c00238
4 changed files with 117 additions and 7 deletions

View file

@ -13,6 +13,9 @@ type MerchRepo interface {
// createMerch creates new merch record and inserts extra data if given
createMerch(ctx context.Context, merch *Merch, extra []ExtraData) error
getSingleMerch(ctx context.Context, userId int64, merchUuid string) (*Merch, error)
getSingleMerchExtraData(ctx context.Context, merchId int64) ([]originLink, error)
// getMany returns list of only main merch record, without origins extra data
getMany(ctx context.Context, userId int64) ([]getMerchInternal, error)
@ -75,6 +78,50 @@ func (r *repo) createMerch(ctx context.Context, merch *Merch, extra []ExtraData)
return tx.Commit(ctx)
}
func (r *repo) getSingleMerch(ctx context.Context, userId int64, merchUuid string) (*Merch, error) {
q := `SELECT id, name FROM merch WHERE merch_uuid = $1 AND user_id = $2 AND deleted_at IS NULL`
var m Merch
if err := r.db.QueryRow(ctx, q, merchUuid, userId).Scan(&m.Id, &m.Name); err != nil {
return nil, err
}
return &m, nil
}
func (r *repo) getSingleMerchExtraData(ctx context.Context, merchId int64) ([]originLink, error) {
q := `
SELECT mo.name, med.url
FROM merch_extra_data AS med
JOIN merch_origins AS mo ON mo.id = med.origin_id
WHERE med.merch_id = $1
AND med.deleted_at IS NULL
AND mo.deleted_at IS NULL
`
rows, err := r.db.Query(ctx, q, merchId)
if err != nil {
return nil, err
}
var result []originLink
for rows.Next() {
var o originLink
if err = rows.Scan(&o.Origin, &o.Link); err != nil {
rows.Close()
return nil, err
}
result = append(result, o)
}
rows.Close()
if err = rows.Err(); err != nil {
return nil, err
}
return result, nil
}
func (r *repo) getMany(ctx context.Context, userId int64) ([]getMerchInternal, error) {
q := `SELECT id, merch_uuid, name FROM merch WHERE deleted_at IS NULL AND user_id = $1`
@ -82,16 +129,18 @@ func (r *repo) getMany(ctx context.Context, userId int64) ([]getMerchInternal, e
if err != nil {
return nil, err
}
defer rows.Close()
var result []getMerchInternal
for rows.Next() {
var m getMerchInternal
if err = rows.Scan(&m.Id, &m.MerchUuid, &m.Name); err != nil {
rows.Close()
return nil, err
}
result = append(result, m)
}
rows.Close()
if err = rows.Err(); err != nil {
return nil, err
}