refactor(store): replace project and skill models with generated models
Some checks failed
CI / build-and-test (push) Failing after -31m25s
Some checks failed
CI / build-and-test (push) Failing after -31m25s
* Update project creation and retrieval to use generated models * Modify skill addition and listing to utilize generated models * Refactor thought handling to incorporate generated models * Adjust tool annotations to align with new model structure * Update API calls in the UI to use new ResolveSpec-based endpoints * Enhance stats retrieval logic to aggregate thought metadata
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
|
||||
"github.com/google/uuid"
|
||||
|
||||
"git.warky.dev/wdevs/amcs/internal/generatedmodels"
|
||||
ext "git.warky.dev/wdevs/amcs/internal/types"
|
||||
)
|
||||
|
||||
@@ -33,9 +34,13 @@ func (db *DB) AddRecipe(ctx context.Context, r ext.Recipe) (ext.Recipe, error) {
|
||||
ingredients, instructions, r.Tags, r.Rating, nullStr(r.Notes))
|
||||
|
||||
created := r
|
||||
if err := row.Scan(&created.ID, &created.CreatedAt, &created.UpdatedAt); err != nil {
|
||||
var model generatedmodels.ModelPublicRecipes
|
||||
if err := row.Scan(&model.ID, &model.CreatedAt, &model.UpdatedAt); err != nil {
|
||||
return ext.Recipe{}, fmt.Errorf("insert recipe: %w", err)
|
||||
}
|
||||
created.ID = model.ID.UUID()
|
||||
created.CreatedAt = model.CreatedAt.Time()
|
||||
created.UpdatedAt = model.UpdatedAt.Time()
|
||||
return created, nil
|
||||
}
|
||||
|
||||
@@ -60,7 +65,7 @@ func (db *DB) SearchRecipes(ctx context.Context, query, cuisine string, tags []s
|
||||
conditions = append(conditions, fmt.Sprintf("ingredients::text ILIKE $%d", len(args)))
|
||||
}
|
||||
|
||||
q := `select id, name, cuisine, prep_time_minutes, cook_time_minutes, servings, ingredients, instructions, tags, rating, notes, created_at, updated_at from recipes`
|
||||
q := `select id, name, cuisine, prep_time_minutes, cook_time_minutes, servings, ingredients, instructions, tags::text[], rating, notes, created_at, updated_at from recipes`
|
||||
if len(conditions) > 0 {
|
||||
q += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
@@ -85,29 +90,20 @@ func (db *DB) SearchRecipes(ctx context.Context, query, cuisine string, tags []s
|
||||
|
||||
func (db *DB) GetRecipe(ctx context.Context, id uuid.UUID) (ext.Recipe, error) {
|
||||
row := db.pool.QueryRow(ctx, `
|
||||
select id, name, cuisine, prep_time_minutes, cook_time_minutes, servings, ingredients, instructions, tags, rating, notes, created_at, updated_at
|
||||
select id, name, cuisine, prep_time_minutes, cook_time_minutes, servings, ingredients, instructions, tags::text[], rating, notes, created_at, updated_at
|
||||
from recipes where id = $1
|
||||
`, id)
|
||||
|
||||
var r ext.Recipe
|
||||
var cuisine, notes *string
|
||||
var ingredientsBytes, instructionsBytes []byte
|
||||
if err := row.Scan(&r.ID, &r.Name, &cuisine, &r.PrepTimeMinutes, &r.CookTimeMinutes, &r.Servings,
|
||||
&ingredientsBytes, &instructionsBytes, &r.Tags, &r.Rating, ¬es, &r.CreatedAt, &r.UpdatedAt); err != nil {
|
||||
var model generatedmodels.ModelPublicRecipes
|
||||
var tags []string
|
||||
if err := row.Scan(&model.ID, &model.Name, &model.Cuisine, &model.PrepTimeMinutes, &model.CookTimeMinutes, &model.Servings,
|
||||
&model.Ingredients, &model.Instructions, &tags, &model.Rating, &model.Notes, &model.CreatedAt, &model.UpdatedAt); err != nil {
|
||||
return ext.Recipe{}, fmt.Errorf("get recipe: %w", err)
|
||||
}
|
||||
r.Cuisine = strVal(cuisine)
|
||||
r.Notes = strVal(notes)
|
||||
if r.Tags == nil {
|
||||
r.Tags = []string{}
|
||||
if tags == nil {
|
||||
tags = []string{}
|
||||
}
|
||||
if err := json.Unmarshal(ingredientsBytes, &r.Ingredients); err != nil {
|
||||
r.Ingredients = []ext.Ingredient{}
|
||||
}
|
||||
if err := json.Unmarshal(instructionsBytes, &r.Instructions); err != nil {
|
||||
r.Instructions = []string{}
|
||||
}
|
||||
return r, nil
|
||||
return recipeFromModel(model, tags), nil
|
||||
}
|
||||
|
||||
func (db *DB) UpdateRecipe(ctx context.Context, id uuid.UUID, r ext.Recipe) (ext.Recipe, error) {
|
||||
@@ -159,9 +155,12 @@ func (db *DB) CreateMealPlan(ctx context.Context, weekStart time.Time, entries [
|
||||
Servings: e.Servings,
|
||||
Notes: e.Notes,
|
||||
}
|
||||
if err := row.Scan(&entry.ID, &entry.CreatedAt); err != nil {
|
||||
var model generatedmodels.ModelPublicMealPlans
|
||||
if err := row.Scan(&model.ID, &model.CreatedAt); err != nil {
|
||||
return nil, fmt.Errorf("insert meal plan entry: %w", err)
|
||||
}
|
||||
entry.ID = model.ID.UUID()
|
||||
entry.CreatedAt = model.CreatedAt.Time()
|
||||
results = append(results, entry)
|
||||
}
|
||||
return results, nil
|
||||
@@ -191,15 +190,12 @@ func (db *DB) GetMealPlan(ctx context.Context, weekStart time.Time) ([]ext.MealP
|
||||
|
||||
var entries []ext.MealPlanEntry
|
||||
for rows.Next() {
|
||||
var e ext.MealPlanEntry
|
||||
var recipeName, customMeal, notes *string
|
||||
if err := rows.Scan(&e.ID, &e.WeekStart, &e.DayOfWeek, &e.MealType, &e.RecipeID, &recipeName, &customMeal, &e.Servings, ¬es, &e.CreatedAt); err != nil {
|
||||
var model generatedmodels.ModelPublicMealPlans
|
||||
var recipeName *string
|
||||
if err := rows.Scan(&model.ID, &model.WeekStart, &model.DayOfWeek, &model.MealType, &model.RecipeID, &recipeName, &model.CustomMeal, &model.Servings, &model.Notes, &model.CreatedAt); err != nil {
|
||||
return nil, fmt.Errorf("scan meal plan entry: %w", err)
|
||||
}
|
||||
e.RecipeName = strVal(recipeName)
|
||||
e.CustomMeal = strVal(customMeal)
|
||||
e.Notes = strVal(notes)
|
||||
entries = append(entries, e)
|
||||
entries = append(entries, mealPlanEntryFromModel(model, strVal(recipeName)))
|
||||
}
|
||||
return entries, rows.Err()
|
||||
}
|
||||
@@ -259,31 +255,26 @@ func (db *DB) GenerateShoppingList(ctx context.Context, weekStart time.Time) (ex
|
||||
returning id, created_at, updated_at
|
||||
`, weekStart, itemsJSON)
|
||||
|
||||
var model generatedmodels.ModelPublicShoppingLists
|
||||
list := ext.ShoppingList{WeekStart: weekStart, Items: items}
|
||||
if err := row.Scan(&list.ID, &list.CreatedAt, &list.UpdatedAt); err != nil {
|
||||
if err := row.Scan(&model.ID, &model.CreatedAt, &model.UpdatedAt); err != nil {
|
||||
return ext.ShoppingList{}, fmt.Errorf("upsert shopping list: %w", err)
|
||||
}
|
||||
list.ID = model.ID.UUID()
|
||||
list.CreatedAt = model.CreatedAt.Time()
|
||||
list.UpdatedAt = model.UpdatedAt.Time()
|
||||
return list, nil
|
||||
}
|
||||
|
||||
func scanRecipeRow(rows interface{ Scan(...any) error }) (ext.Recipe, error) {
|
||||
var r ext.Recipe
|
||||
var cuisine, notes *string
|
||||
var ingredientsBytes, instructionsBytes []byte
|
||||
if err := rows.Scan(&r.ID, &r.Name, &cuisine, &r.PrepTimeMinutes, &r.CookTimeMinutes, &r.Servings,
|
||||
&ingredientsBytes, &instructionsBytes, &r.Tags, &r.Rating, ¬es, &r.CreatedAt, &r.UpdatedAt); err != nil {
|
||||
var model generatedmodels.ModelPublicRecipes
|
||||
var tags []string
|
||||
if err := rows.Scan(&model.ID, &model.Name, &model.Cuisine, &model.PrepTimeMinutes, &model.CookTimeMinutes, &model.Servings,
|
||||
&model.Ingredients, &model.Instructions, &tags, &model.Rating, &model.Notes, &model.CreatedAt, &model.UpdatedAt); err != nil {
|
||||
return ext.Recipe{}, fmt.Errorf("scan recipe: %w", err)
|
||||
}
|
||||
r.Cuisine = strVal(cuisine)
|
||||
r.Notes = strVal(notes)
|
||||
if r.Tags == nil {
|
||||
r.Tags = []string{}
|
||||
if tags == nil {
|
||||
tags = []string{}
|
||||
}
|
||||
if err := json.Unmarshal(ingredientsBytes, &r.Ingredients); err != nil {
|
||||
r.Ingredients = []ext.Ingredient{}
|
||||
}
|
||||
if err := json.Unmarshal(instructionsBytes, &r.Instructions); err != nil {
|
||||
r.Instructions = []string{}
|
||||
}
|
||||
return r, nil
|
||||
return recipeFromModel(model, tags), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user