(
{/* Color */}
diff --git a/packages/shared/types/categories.ts b/packages/shared/types/categories.ts
index 3588ee5..5e2eb20 100644
--- a/packages/shared/types/categories.ts
+++ b/packages/shared/types/categories.ts
@@ -14,7 +14,7 @@ export const zCreateCategorySchema = z.object({
code: z.coerce.number(),
name: z.string(),
description: z.string().optional(),
- color: z.string(),
+ colorName: z.string(),
parentId: z.string().optional(),
});
export type ZCreateCategories = z.infer;
diff --git a/packages/shared/types/colors.ts b/packages/shared/types/colors.ts
index 7748999..5fcd7d5 100644
--- a/packages/shared/types/colors.ts
+++ b/packages/shared/types/colors.ts
@@ -3,7 +3,7 @@ import { z } from "zod";
export const zColorSchema = z.object({
name: z.string(),
hexcode: z.string(),
- inverse: z.string().optional(),
- id: z.string().optional(),
+ inverse: z.string().nullish(),
+ id: z.string().nullish(),
});
export type ZColor = z.infer;
diff --git a/packages/trpc/routers/categories.ts b/packages/trpc/routers/categories.ts
index 8f68ee6..8418154 100644
--- a/packages/trpc/routers/categories.ts
+++ b/packages/trpc/routers/categories.ts
@@ -1,5 +1,5 @@
import { experimental_trpcMiddleware, TRPCError } from "@trpc/server";
-import { and, desc, eq, inArray, notExists } from "drizzle-orm";
+import { and, asc, desc, eq, inArray, notExists } from "drizzle-orm";
import { z } from "zod";
import { DatabaseError } from "@lifetracker/db";
@@ -102,11 +102,15 @@ export const categoriesAppRouter = router({
.leftJoin(colors, eq(categories.colorId, colors.id))
;
+ const categoryParents = dbCategories
+ .filter((category) => category.code == parseInt(category.code) && category.code < 11)
+ .sort((a, b) => a.code - b.code);
+ const sortedCategories = categoryParents.map((parent) => {
+ return dbCategories
+ .filter((child) => child.code.toString().startsWith(parent.code.toString()))
+ });
return {
- categories: dbCategories.map(({ color, ...category }) => ({
- ...category,
- color,
- })),
+ categories: sortedCategories.flat(),
};
}),
get: authedProcedure
@@ -173,7 +177,7 @@ export const categoriesAppRouter = router({
return category;
}),
create: authedProcedure
- .input(zCategorySchema)
+ .input(zCreateCategorySchema)
.output(
z.object({
id: z.string(),
@@ -184,7 +188,13 @@ export const categoriesAppRouter = router({
}),
)
.mutation(async ({ input, ctx }) => {
- return createCategory(input, ctx);
+ const color = await ctx.db.select().from(colors).where(
+ and(
+ eq(colors.name, input.colorName),
+ eq(colors.userId, ctx.user.id),
+ )
+ );
+ return createCategory({ ...input, color: color[0] }, ctx);
}),
update: authedProcedure
.input(zUpdateCategoryRequestSchema)