diff --git a/components/calendario/types.ts b/components/calendario/types.ts
index 78ebe4f..cc65454 100644
--- a/components/calendario/types.ts
+++ b/components/calendario/types.ts
@@ -3,8 +3,6 @@ import type {
SelectOption,
} from "@/components/lancamentos/types";
-export type CalendarEventType = "lancamento" | "boleto" | "cartao";
-
export type CalendarEvent =
| {
id: string;
diff --git a/components/calendario/utils.ts b/components/calendario/utils.ts
index 09c92d1..af706a9 100644
--- a/components/calendario/utils.ts
+++ b/components/calendario/utils.ts
@@ -2,15 +2,6 @@ import type { CalendarDay, CalendarEvent } from "@/components/calendario/types";
export const formatDateKey = (date: Date) => date.toISOString().slice(0, 10);
-export const parseDateKey = (value: string) => {
- const [yearStr, monthStr, dayStr] = value.split("-");
- const year = Number.parseInt(yearStr ?? "", 10);
- const month = Number.parseInt(monthStr ?? "", 10);
- const day = Number.parseInt(dayStr ?? "", 10);
-
- return new Date(Date.UTC(year, (month ?? 1) - 1, day ?? 1));
-};
-
const getWeekdayIndex = (date: Date) => {
const day = date.getUTCDay(); // 0 (domingo) - 6 (sábado)
// Ajusta para segunda-feira como primeiro dia
diff --git a/components/feedback/feedback-dialog.tsx b/components/feedback/feedback-dialog.tsx
index a6574da..8bbea85 100644
--- a/components/feedback/feedback-dialog.tsx
+++ b/components/feedback/feedback-dialog.tsx
@@ -8,21 +8,12 @@ import {
RiQuestionLine,
RiStarLine,
} from "@remixicon/react";
-import { useState } from "react";
-import { Button, buttonVariants } from "@/components/ui/button";
import {
- Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
- DialogTrigger,
} from "@/components/ui/dialog";
-import {
- Tooltip,
- TooltipContent,
- TooltipTrigger,
-} from "@/components/ui/tooltip";
import { cn } from "@/lib/utils";
const GITHUB_REPO_BASE = "https://github.com/felipegcoutinho/openmonetis";
@@ -128,32 +119,3 @@ export function FeedbackDialogBody({ onClose }: { onClose?: () => void }) {
);
}
-
-export function FeedbackDialog() {
- const [open, setOpen] = useState(false);
-
- return (
-
- );
-}
diff --git a/lib/actions/helpers.ts b/lib/actions/helpers.ts
index c901a64..196bb62 100644
--- a/lib/actions/helpers.ts
+++ b/lib/actions/helpers.ts
@@ -1,6 +1,5 @@
import { revalidatePath, revalidateTag } from "next/cache";
import { z } from "zod";
-import { getUser } from "@/lib/auth/server";
import type { ActionResult } from "./types";
import { errorResult } from "./types";
@@ -58,72 +57,3 @@ export function revalidateForEntity(
revalidateTag("dashboard", "max");
}
}
-
-/**
- * Options for action handler
- */
-interface ActionHandlerOptions {
- /** Paths to revalidate after successful execution */
- revalidatePaths?: string[];
- /** Entity to revalidate (uses predefined config) */
- revalidateEntity?: keyof typeof revalidateConfig;
-}
-
-/**
- * Creates a standardized action handler with automatic user auth and error handling
- *
- * @param schema - Zod schema for input validation
- * @param handler - Handler function that receives validated data and userId
- * @param options - Additional options for the action
- * @returns Action function that can be called from client
- *
- * @example
- * ```ts
- * export const createItemAction = createActionHandler(
- * createItemSchema,
- * async (data, userId) => {
- * await db.insert(items).values({ ...data, userId });
- * return "Item criado com sucesso.";
- * },
- * { revalidateEntity: 'items' }
- * );
- * ```
- */
-export function createActionHandler(
- schema: z.ZodSchema,
- handler: (data: TInput, userId: string) => Promise,
- options?: ActionHandlerOptions,
-) {
- return async (input: unknown): Promise> => {
- try {
- // Get authenticated user
- const user = await getUser();
-
- // Validate input
- const data = schema.parse(input);
-
- // Execute handler
- const result = await handler(data, user.id);
-
- // Revalidate paths if configured
- if (options?.revalidateEntity) {
- revalidateForEntity(options.revalidateEntity);
- } else if (options?.revalidatePaths) {
- options.revalidatePaths.forEach((path) => revalidatePath(path));
- }
-
- // Return success with message (if result is string) or data
- if (typeof result === "string") {
- return { success: true, message: result };
- }
-
- return {
- success: true,
- message: "Operação realizada com sucesso.",
- data: result,
- };
- } catch (error) {
- return handleActionError(error);
- }
- };
-}
diff --git a/lib/auth/api-token.ts b/lib/auth/api-token.ts
index 92a3812..d9fb940 100644
--- a/lib/auth/api-token.ts
+++ b/lib/auth/api-token.ts
@@ -227,17 +227,3 @@ export function extractBearerToken(authHeader: string | null): string | null {
const match = authHeader.match(/^Bearer\s+(.+)$/i);
return match ? match[1] : null;
}
-
-/**
- * Validate a hash-based API token (os_xxx format)
- * Returns the token hash for database lookup
- */
-export function validateHashToken(token: string): {
- valid: boolean;
- tokenHash?: string;
-} {
- if (!token || !token.startsWith("os_")) {
- return { valid: false };
- }
- return { valid: true, tokenHash: hashToken(token) };
-}
diff --git a/lib/categorias/defaults.ts b/lib/categorias/defaults.ts
index c3eaf47..5a34769 100644
--- a/lib/categorias/defaults.ts
+++ b/lib/categorias/defaults.ts
@@ -3,7 +3,7 @@ import { categorias } from "@/db/schema";
import type { CategoryType } from "@/lib/categorias/constants";
import { db } from "@/lib/db";
-export type DefaultCategory = {
+type DefaultCategory = {
name: string;
type: CategoryType;
icon: string | null;
diff --git a/lib/dashboard/widgets/actions.ts b/lib/dashboard/widgets/actions.ts
index d5ff641..7fd0f18 100644
--- a/lib/dashboard/widgets/actions.ts
+++ b/lib/dashboard/widgets/actions.ts
@@ -68,20 +68,3 @@ export async function resetWidgetPreferences(): Promise<{
return { success: false, error: "Erro ao resetar preferências" };
}
}
-
-export async function getWidgetPreferences(): Promise {
- try {
- const user = await getUser();
-
- const result = await db
- .select({ dashboardWidgets: schema.preferenciasUsuario.dashboardWidgets })
- .from(schema.preferenciasUsuario)
- .where(eq(schema.preferenciasUsuario.userId, user.id))
- .limit(1);
-
- return result[0]?.dashboardWidgets ?? null;
- } catch (error) {
- console.error("Error getting widget preferences:", error);
- return null;
- }
-}
diff --git a/lib/installments/anticipation-types.ts b/lib/installments/anticipation-types.ts
index 5734640..2d84259 100644
--- a/lib/installments/anticipation-types.ts
+++ b/lib/installments/anticipation-types.ts
@@ -49,18 +49,3 @@ export type CreateAnticipationInput = {
export type CancelAnticipationInput = {
anticipationId: string;
};
-
-/**
- * Resumo de antecipação para exibição
- */
-export type AnticipationSummary = {
- id: string;
- totalAmount: string;
- installmentCount: number;
- anticipationPeriod: string;
- anticipationDate: Date;
- note: string | null;
- isSettled: boolean;
- lancamentoId: string;
- anticipatedInstallments: string[];
-};
diff --git a/lib/pagadores/access.ts b/lib/pagadores/access.ts
index c8e9f3f..147817a 100644
--- a/lib/pagadores/access.ts
+++ b/lib/pagadores/access.ts
@@ -86,17 +86,3 @@ export async function getPagadorAccess(userId: string, pagadorId: string) {
return { pagador, canEdit: false, share };
}
-
-export async function userCanEditPagador(userId: string, pagadorId: string) {
- const pagadorRow = await db.query.pagadores.findFirst({
- columns: { id: true },
- where: and(eq(pagadores.id, pagadorId), eq(pagadores.userId, userId)),
- });
-
- return Boolean(pagadorRow);
-}
-
-export async function userHasPagadorAccess(userId: string, pagadorId: string) {
- const access = await getPagadorAccess(userId, pagadorId);
- return Boolean(access);
-}
diff --git a/lib/schemas/common.ts b/lib/schemas/common.ts
index 0da3271..d51015e 100644
--- a/lib/schemas/common.ts
+++ b/lib/schemas/common.ts
@@ -12,19 +12,6 @@ export const uuidSchema = (entityName: string = "ID") =>
.string({ message: `${entityName} inválido.` })
.uuid(`${entityName} inválido.`);
-/**
- * Decimal string schema - parses string with comma/period to number
- */
-export const decimalSchema = z
- .string()
- .trim()
- .transform((value) => value.replace(/\s/g, "").replace(",", "."))
- .refine(
- (value) => !Number.isNaN(Number.parseFloat(value)),
- "Informe um valor numérico válido.",
- )
- .transform((value) => Number.parseFloat(value));
-
/**
* Optional/nullable decimal string schema
*/
@@ -61,38 +48,6 @@ export const periodSchema = z
.trim()
.regex(/^\d{4}-(0[1-9]|1[0-2])$/, "Período inválido.");
-/**
- * Optional period schema
- */
-export const optionalPeriodSchema = z
- .string()
- .trim()
- .regex(/^(\d{4})-(\d{2})$/, {
- message: "Selecione um período válido.",
- })
- .optional();
-
-/**
- * Date string schema
- */
-export const dateStringSchema = z
- .string({ message: "Informe a data." })
- .trim()
- .refine((value) => !Number.isNaN(new Date(value).getTime()), {
- message: "Data inválida.",
- });
-
-/**
- * Optional date string schema
- */
-export const optionalDateStringSchema = z
- .string()
- .trim()
- .refine((value) => !value || !Number.isNaN(new Date(value).getTime()), {
- message: "Informe uma data válida.",
- })
- .optional();
-
/**
* Note/observation schema (max 500 chars, trimmed, nullable)
*/
@@ -102,35 +57,3 @@ export const noteSchema = z
.max(500, "A anotação deve ter no máximo 500 caracteres.")
.optional()
.transform((value) => (value && value.length > 0 ? value : null));
-
-/**
- * Optional string that becomes null if empty
- */
-export const optionalStringToNull = z
- .string()
- .trim()
- .optional()
- .transform((value) => (value && value.length > 0 ? value : null));
-
-/**
- * Required non-empty string schema
- */
-export const requiredStringSchema = (fieldName: string) =>
- z
- .string({ message: `Informe ${fieldName}.` })
- .trim()
- .min(1, `Informe ${fieldName}.`);
-
-/**
- * Amount schema with minimum value validation
- */
-export const amountSchema = z.coerce
- .number({ message: "Informe o valor." })
- .min(0, "Informe um valor maior ou igual a zero.");
-
-/**
- * Positive amount schema
- */
-export const positiveAmountSchema = z.coerce
- .number({ message: "Informe o valor." })
- .positive("Informe um valor maior que zero.");
diff --git a/lib/schemas/insights.ts b/lib/schemas/insights.ts
index 7d6d7b5..1794aa7 100644
--- a/lib/schemas/insights.ts
+++ b/lib/schemas/insights.ts
@@ -64,6 +64,4 @@ export const InsightsResponseSchema = z.object({
/**
* TypeScript types derived from schemas
*/
-export type InsightItem = z.infer;
-export type InsightCategory = z.infer;
export type InsightsResponse = z.infer;
diff --git a/lib/transferencias/constants.ts b/lib/transferencias/constants.ts
index 71fcf54..255e240 100644
--- a/lib/transferencias/constants.ts
+++ b/lib/transferencias/constants.ts
@@ -1,7 +1,5 @@
export const TRANSFER_CATEGORY_NAME = "Transferência interna";
-export const TRANSFER_ESTABLISHMENT = "Transf. entre contas";
export const TRANSFER_ESTABLISHMENT_SAIDA = "Saída - Transf. entre contas";
export const TRANSFER_ESTABLISHMENT_ENTRADA = "Entrada - Transf. entre contas";
-export const TRANSFER_PAGADOR = "Admin";
export const TRANSFER_PAYMENT_METHOD = "Pix";
export const TRANSFER_CONDITION = "À vista";