refactor: alinha features financeiras ao novo naming

This commit is contained in:
Felipe Coutinho
2026-03-14 12:50:55 +00:00
parent ef918a3667
commit 67ad4b9d02
51 changed files with 876 additions and 898 deletions

View File

@@ -2,7 +2,7 @@
import { and, eq } from "drizzle-orm";
import { z } from "zod";
import { categorias } from "@/db/schema";
import { categories } from "@/db/schema";
import {
type ActionResult,
handleActionError,
@@ -32,10 +32,10 @@ const categoryBaseSchema = z.object({
const createCategorySchema = categoryBaseSchema;
const updateCategorySchema = categoryBaseSchema.extend({
id: uuidSchema("Categoria"),
id: uuidSchema("Category"),
});
const deleteCategorySchema = z.object({
id: uuidSchema("Categoria"),
id: uuidSchema("Category"),
});
type CategoryCreateInput = z.infer<typeof createCategorySchema>;
@@ -49,16 +49,16 @@ export async function createCategoryAction(
const user = await getUser();
const data = createCategorySchema.parse(input);
await db.insert(categorias).values({
await db.insert(categories).values({
name: data.name,
type: data.type,
icon: data.icon,
userId: user.id,
});
revalidateForEntity("categorias");
revalidateForEntity("categories");
return { success: true, message: "Categoria criada com sucesso." };
return { success: true, message: "Category criada com sucesso." };
} catch (error) {
return handleActionError(error);
}
@@ -72,19 +72,19 @@ export async function updateCategoryAction(
const data = updateCategorySchema.parse(input);
// Buscar categoria antes de atualizar para verificar restrições
const categoria = await db.query.categorias.findFirst({
const categoria = await db.query.categories.findFirst({
columns: { id: true, name: true },
where: and(eq(categorias.id, data.id), eq(categorias.userId, user.id)),
where: and(eq(categories.id, data.id), eq(categories.userId, user.id)),
});
if (!categoria) {
return {
success: false,
error: "Categoria não encontrada.",
error: "Category não encontrada.",
};
}
// Bloquear edição das categorias protegidas
// Bloquear edição das categories protegidas
const categoriasProtegidas = [
"Transferência interna",
"Saldo inicial",
@@ -98,25 +98,25 @@ export async function updateCategoryAction(
}
const [updated] = await db
.update(categorias)
.update(categories)
.set({
name: data.name,
type: data.type,
icon: data.icon,
})
.where(and(eq(categorias.id, data.id), eq(categorias.userId, user.id)))
.where(and(eq(categories.id, data.id), eq(categories.userId, user.id)))
.returning();
if (!updated) {
return {
success: false,
error: "Categoria não encontrada.",
error: "Category não encontrada.",
};
}
revalidateForEntity("categorias");
revalidateForEntity("categories");
return { success: true, message: "Categoria atualizada com sucesso." };
return { success: true, message: "Category atualizada com sucesso." };
} catch (error) {
return handleActionError(error);
}
@@ -130,19 +130,19 @@ export async function deleteCategoryAction(
const data = deleteCategorySchema.parse(input);
// Buscar categoria antes de deletar para verificar restrições
const categoria = await db.query.categorias.findFirst({
const categoria = await db.query.categories.findFirst({
columns: { id: true, name: true },
where: and(eq(categorias.id, data.id), eq(categorias.userId, user.id)),
where: and(eq(categories.id, data.id), eq(categories.userId, user.id)),
});
if (!categoria) {
return {
success: false,
error: "Categoria não encontrada.",
error: "Category não encontrada.",
};
}
// Bloquear remoção das categorias protegidas
// Bloquear remoção das categories protegidas
const categoriasProtegidas = [
"Transferência interna",
"Saldo inicial",
@@ -156,20 +156,20 @@ export async function deleteCategoryAction(
}
const [deleted] = await db
.delete(categorias)
.where(and(eq(categorias.id, data.id), eq(categorias.userId, user.id)))
.returning({ id: categorias.id });
.delete(categories)
.where(and(eq(categories.id, data.id), eq(categories.userId, user.id)))
.returning({ id: categories.id });
if (!deleted) {
return {
success: false,
error: "Categoria não encontrada.",
error: "Category não encontrada.",
};
}
revalidateForEntity("categorias");
revalidateForEntity("categories");
return { success: true, message: "Categoria removida com sucesso." };
return { success: true, message: "Category removida com sucesso." };
} catch (error) {
return handleActionError(error);
}

View File

@@ -103,7 +103,7 @@ export function CategoryDialog({
setErrorMessage(null);
if (mode === "update" && !category?.id) {
const message = "Categoria inválida.";
const message = "Category inválida.";
setErrorMessage(message);
toast.error(message);
return;

View File

@@ -64,6 +64,7 @@ export function CategoryIconBadge({
style={{ backgroundColor: bgColor }}
>
{IconComponent ? (
// @ts-expect-error icon accepts style but type is too narrow
<IconComponent className={variant.icon} style={{ color }} />
) : (
<span className={cn("uppercase", variant.text)} style={{ color }}>

View File

@@ -19,7 +19,7 @@ export function CategoryIcon({ name, className }: CategoryIconProps) {
if (!IconComponent) {
return (
<span className={cn("text-xs text-muted-foreground", className)}>
{name ?? "Categoria"}
{name ?? "Category"}
</span>
);
}

View File

@@ -1,5 +1,5 @@
import { eq } from "drizzle-orm";
import { type Categoria, categorias } from "@/db/schema";
import { type Category, categories } from "@/db/schema";
import type { CategoryType } from "@/features/categories/components/types";
import { db } from "@/shared/lib/db";
@@ -13,11 +13,11 @@ export type CategoryData = {
export async function fetchCategoriesForUser(
userId: string,
): Promise<CategoryData[]> {
const categoryRows = await db.query.categorias.findMany({
where: eq(categorias.userId, userId),
const categoryRows = await db.query.categories.findMany({
where: eq(categories.userId, userId),
});
return categoryRows.map((category: Categoria) => ({
return categoryRows.map((category: Category) => ({
id: category.id,
name: category.name,
type: category.type as CategoryType,