diff --git a/components/CategoryCard.vue b/components/CategoryCard.vue new file mode 100644 index 0000000..2388837 --- /dev/null +++ b/components/CategoryCard.vue @@ -0,0 +1,30 @@ + + + diff --git a/composables/useCategories.ts b/composables/useCategories.ts new file mode 100644 index 0000000..09da561 --- /dev/null +++ b/composables/useCategories.ts @@ -0,0 +1,4 @@ +export function useCategories() { + const { $client } = useNuxtApp(); + return $client.listCategories.useQuery(); +} diff --git a/pages/categories.vue b/pages/categories.vue new file mode 100644 index 0000000..3bdfd9b --- /dev/null +++ b/pages/categories.vue @@ -0,0 +1,19 @@ + + + diff --git a/server/trpc/routers/categories.ts b/server/trpc/routers/categories.ts new file mode 100644 index 0000000..83671ad --- /dev/null +++ b/server/trpc/routers/categories.ts @@ -0,0 +1,27 @@ +import { publicProcedure, router } from "../trpc"; + +const { apiUrl } = useRuntimeConfig(); + +type Category = { + idCategory: string; + strCategory: string; + strCategoryThumb: string; + strCategoryDescription: string; +}; + +export const categoryRouter = router({ + listCategories: publicProcedure.query(async () => { + const data = await $fetch<{ categories: Category[] }>( + new URL("categories.php", apiUrl).toString(), + ); + + if (!data?.categories) { + throw createError({ + statusCode: 500, + statusMessage: "Failed to fetch categories", + }); + } + + return data.categories; + }), +}); diff --git a/server/trpc/routers/index.ts b/server/trpc/routers/index.ts index 3c187e7..af1d7ef 100644 --- a/server/trpc/routers/index.ts +++ b/server/trpc/routers/index.ts @@ -1,24 +1,9 @@ import type { inferRouterOutputs } from "@trpc/server"; -import { z } from "zod"; -import { privateProcedure, router, mergeRouters } from "../trpc"; +import { mergeRouters } from "../trpc"; import { recipeRouter } from "./recipes"; +import { categoryRouter } from "./categories"; -export const helloRouter = router({ - // hello: publicProcedure - hello: privateProcedure - .input( - z.object({ - text: z.string().nullish(), - }), - ) - .query(({ input }) => { - return { - greeting: `hello ${input?.text ?? "world"}`, - }; - }), -}); - -export const appRouter = mergeRouters(helloRouter, recipeRouter); +export const appRouter = mergeRouters(categoryRouter, recipeRouter); // export type definition of API export type AppRouter = typeof appRouter; export type RouterOutput = inferRouterOutputs; diff --git a/server/trpc/routers/recipes.ts b/server/trpc/routers/recipes.ts index fb5573f..b43426a 100644 --- a/server/trpc/routers/recipes.ts +++ b/server/trpc/routers/recipes.ts @@ -65,18 +65,4 @@ export const recipeRouter = router({ const recipes = parseRecipeData(data); return recipes; }), - categories: publicProcedure.query(async () => { - const data = await $fetch<{ categories: Category[] }>( - new URL("categories.php", apiUrl).toString(), - ); - - if (!data?.categories) { - throw createError({ - statusCode: 500, - statusMessage: "Failed to fetch categories", - }); - } - - return data.categories; - }), });