From c47f3f9c63f3fc76d0e28680af43fea7bd1ab538 Mon Sep 17 00:00:00 2001 From: immonroe Date: Tue, 12 Aug 2025 20:11:52 -0400 Subject: [PATCH] task: added title length constraint migration --- api/services/recipe/recipe.go | 18 ++++++++++++++++++ ...230844_add_title_length_constraint.down.sql | 2 ++ ...12230844_add_title_length_constraint.up.sql | 3 +++ 3 files changed, 23 insertions(+) create mode 100644 db/migrations/20250812230844_add_title_length_constraint.down.sql create mode 100644 db/migrations/20250812230844_add_title_length_constraint.up.sql diff --git a/api/services/recipe/recipe.go b/api/services/recipe/recipe.go index 49391ac..051ce05 100644 --- a/api/services/recipe/recipe.go +++ b/api/services/recipe/recipe.go @@ -24,6 +24,16 @@ const ( DEFAULT_LIST_RECIPE_SORT_FIELD = "publish_date" ) +func validateTitle(title string) error { + if len(title) < 3 { + return fmt.Errorf("title must be at least 3 characters long") + } + if len(title) > 150 { + return fmt.Errorf("title must be no more than 150 characters long") + } + return nil +} + type RecipeService interface { GetRecipeByID(ctx context.Context, id uuid.UUID) (*model.Recipe, error) GetRecipeBySlug(ctx context.Context, slug string, displayName string) (*model.Recipe, error) @@ -142,6 +152,10 @@ func (r recipeService) AddRecipeRevision(ctx context.Context, input model.AddRev return nil, nil } + if err := validateTitle(input.Revision.Title); err != nil { + return nil, err + } + tx, err := r.conn.Begin(ctx) if err != nil { return nil, err @@ -248,6 +262,10 @@ func (r recipeService) CreateRecipe(ctx context.Context, input model.CreateRecip return nil, nil } + if err := validateTitle(input.Revision.Title); err != nil { + return nil, err + } + user, _ := r.authService.GetUserSessionFromCtx(ctx) tx, err := r.conn.Begin(ctx) diff --git a/db/migrations/20250812230844_add_title_length_constraint.down.sql b/db/migrations/20250812230844_add_title_length_constraint.down.sql new file mode 100644 index 0000000..3e6e4ac --- /dev/null +++ b/db/migrations/20250812230844_add_title_length_constraint.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE recipe_revisions +DROP CONSTRAINT title_length_check; diff --git a/db/migrations/20250812230844_add_title_length_constraint.up.sql b/db/migrations/20250812230844_add_title_length_constraint.up.sql new file mode 100644 index 0000000..133ec16 --- /dev/null +++ b/db/migrations/20250812230844_add_title_length_constraint.up.sql @@ -0,0 +1,3 @@ +ALTER TABLE recipe_revisions +ADD CONSTRAINT title_length_check +CHECK (char_length(trim(title)) >= 3 AND char_length(trim(title)) <= 150);