get and delete methods

This commit is contained in:
nquidox 2026-03-04 17:59:46 +03:00
parent 25d11b31da
commit bc3eee6434
5 changed files with 154 additions and 6 deletions

View file

@ -6,11 +6,19 @@ import (
"fmt"
"github.com/jackc/pgx/v5/pgxpool"
"strings"
"time"
)
type Repository interface {
// createMerch creates new merch record and inserts extra data if given
createMerch(ctx context.Context, merch *Merch, extra []ExtraData) error
// getMany returns list of only main merch record, without origins extra data
getMany(ctx context.Context, userId string) ([]merchDTO, error)
// deleteOneMerchRecord sets deleted_at in merch + extra tables
deleteOneMerchRecord(ctx context.Context, userId, merchUuid string, delTime time.Time) error
Origins
}
@ -126,3 +134,47 @@ func (r *repo) createMerch(ctx context.Context, merch *Merch, extra []ExtraData)
return tx.Commit(ctx)
}
func (r *repo) getMany(ctx context.Context, userId string) ([]merchDTO, error) {
q := `SELECT created_at, updated_at, merch_uuid, name FROM merch WHERE deleted_at IS NULL AND user_id = $1`
rows, err := r.db.Query(ctx, q, userId)
if err != nil {
return nil, err
}
defer rows.Close()
var result []merchDTO
for rows.Next() {
var m merchDTO
if err = rows.Scan(&m.CreatedAt, &m.UpdatedAt, &m.MerchUuid, &m.Name); err != nil {
return nil, err
}
result = append(result, m)
}
if err = rows.Err(); err != nil {
return nil, err
}
return result, nil
}
func (r *repo) deleteOneMerchRecord(ctx context.Context, userId, merchUuid string, delTime time.Time) error {
tx, err := r.db.Begin(ctx)
if err != nil {
return err
}
var merch_id int64
qMerch := `UPDATE merch SET deleted_at = $1 WHERE merch_uuid = $2 AND user_id = $3 RETURNING id`
if err = tx.QueryRow(ctx, qMerch, delTime, merchUuid, userId).Scan(&merch_id); err != nil {
tx.Rollback(ctx)
return err
}
if merch_id != 0 {
qExtra := `UPDATE merch_extra_data SET deleted_at = $1 WHERE merch_id = $2`
_, err = tx.Exec(ctx, qExtra, delTime, merch_id)
}
return tx.Commit(ctx)
}