feat!: add slug to training
BREAKING CHANGE: update init migration
This commit is contained in:
parent
556b4f4e79
commit
2d32c80182
12 changed files with 219 additions and 45 deletions
|
|
@ -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
|
||||
|
|
|
|||
Reference in a new issue