1
0
Fork 0

feat!: add slug to training

BREAKING CHANGE: update init migration
This commit is contained in:
Vojtěch Mareš 2024-06-26 22:24:36 +02:00
parent 556b4f4e79
commit 2d32c80182
Signed by: vojtech.mares
GPG key ID: C6827B976F17240D
12 changed files with 219 additions and 45 deletions

View file

@ -4,6 +4,7 @@ import (
"context"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgxpool"
"gitlab.mareshq.com/hq/yggdrasil/pkg/slug"
"time"
)
@ -19,16 +20,20 @@ func (r *PostgresTrainingRepository) Create(training *Training) error {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if training.Slug == "" {
training.Slug = slug.NewString(training.Name)
}
tx, txErr := r.pg.Begin(ctx)
if txErr != nil {
return txErr
}
queryErr := tx.QueryRow(ctx, `
INSERT INTO training.trainings (name, description, days)
VALUES ($1, $2, $3)
INSERT INTO training.trainings (name, slug, description, days)
VALUES ($1, $2, $3, $4)
RETURNING id
`, training.Name, training.Description, training.Days).Scan(&training.ID)
`, training.Name, training.Slug, training.Description, training.Days).Scan(&training.ID)
if queryErr != nil {
return queryErr
}
@ -75,7 +80,7 @@ func (r *PostgresTrainingRepository) FindByID(id ID) (*Training, error) {
SELECT id, name, description, days
FROM training.trainings
WHERE id = $1
`, id).Scan(&training.ID, &training.Name, &training.Description, &training.Days)
`, id).Scan(&training.ID, &training.Name, &training.Slug, &training.Description, &training.Days)
if err != nil {
return nil, err
@ -122,7 +127,7 @@ func (r *PostgresTrainingRepository) FindAll() ([]Training, error) {
trainings, err := pgx.CollectRows(rows, func(row pgx.CollectableRow) (Training, error) {
var training Training
scanErr := row.Scan(&training.ID, &training.Name, &training.Description, &training.Days)
scanErr := row.Scan(&training.ID, &training.Name, &training.Slug, &training.Description, &training.Days)
if scanErr != nil {
return Training{}, scanErr
}
@ -151,6 +156,15 @@ func (r *PostgresTrainingRepository) Update(training *Training) error {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if training.Slug == "" {
training.Slug = slug.NewString(training.Name)
} else {
slugValidateErr := slug.Validate(training.Slug)
if slugValidateErr != nil {
return slugValidateErr
}
}
tx, err := r.pg.Begin(ctx)
if err != nil {
return err
@ -158,9 +172,9 @@ func (r *PostgresTrainingRepository) Update(training *Training) error {
_, err = tx.Exec(ctx, `
UPDATE training.trainings
SET name = $1, description = $2, days = $3
SET name = $1, slug = $2, description = $3, days = $4
WHERE id = $4
`, training.Name, training.Description, training.Days, training.ID)
`, training.Name, training.Slug, training.Description, training.Days, training.ID)
if err != nil {
return err