feat: implementar sistema de preferências do usuário e refatorar changelog

Adiciona sistema completo de preferências de usuário:
  - Cria tabela userPreferences no schema com campos disableMagnetlines, periodMonthsBefore e periodMonthsAfter
  - Implementa página de Ajustes com abas (Preferências, Alterar nome, Senha, E-mail, Deletar conta)
  - Adiciona componente PreferencesForm para configuração de magnetlines e períodos de exibição
  - Propaga periodPreferences para todos os componentes de lançamentos e calendário

  Refatora sistema de changelog:
  - Remove implementação anterior baseada em JSON estático
  - Adiciona nova página de changelog dinâmica em app/(dashboard)/changelog
  - Adiciona componente changelog-list.tsx
  - Remove arquivos obsoletos (changelog-notification, actions, data, utils, scripts)

  Adiciona controle de saldo inicial em contas:
  - Novo campo excludeInitialBalanceFromIncome em contas
  - Permite excluir saldo inicial do cálculo de receitas
  - Atualiza queries de lançamentos para respeitar esta configuração

  Melhorias adicionais:
  - Adiciona componente ui/accordion.tsx do shadcn/ui
  - Refatora formatPeriodLabel para displayPeriod centralizado
  - Propaga estabelecimentos para componentes de lançamentos
  - Remove variável DB_PROVIDER obsoleta do .env.example e documentação
  - Adiciona 6 migrações de banco de dados (0003-0008)
This commit is contained in:
Felipe Coutinho
2026-01-03 14:18:03 +00:00
parent 3eca48c71a
commit fd817683ca
87 changed files with 13582 additions and 1445 deletions

View File

@@ -25,6 +25,7 @@ import type {
LancamentoItem,
SelectOption,
} from "../types";
import type { PeriodPreferences } from "@/lib/user-preferences/period";
interface LancamentosPageProps {
lancamentos: LancamentoItem[];
@@ -39,6 +40,7 @@ interface LancamentosPageProps {
contaCartaoFilterOptions: ContaCartaoFilterOption[];
selectedPeriod: string;
estabelecimentos: string[];
periodPreferences: PeriodPreferences;
allowCreate?: boolean;
defaultCartaoId?: string | null;
defaultPaymentMethod?: string | null;
@@ -59,6 +61,7 @@ export function LancamentosPage({
contaCartaoFilterOptions,
selectedPeriod,
estabelecimentos,
periodPreferences,
allowCreate = true,
defaultCartaoId,
defaultPaymentMethod,
@@ -114,7 +117,7 @@ export function LancamentosPage({
return;
}
const supportedMethods = ["Pix", "Boleto", "Dinheiro", "Cartão de débito"];
const supportedMethods = ["Pix", "Boleto", "Dinheiro", "Cartão de débito", "Pré-Pago | VR/VA", "Transferência bancária"];
if (!supportedMethods.includes(item.paymentMethod)) {
return;
}
@@ -354,6 +357,7 @@ export function LancamentosPage({
categoriaOptions={categoriaOptions}
estabelecimentos={estabelecimentos}
defaultPeriod={selectedPeriod}
periodPreferences={periodPreferences}
defaultCartaoId={defaultCartaoId}
defaultPaymentMethod={defaultPaymentMethod}
lockCartaoSelection={lockCartaoSelection}
@@ -379,6 +383,7 @@ export function LancamentosPage({
estabelecimentos={estabelecimentos}
lancamento={lancamentoToCopy ?? undefined}
defaultPeriod={selectedPeriod}
periodPreferences={periodPreferences}
/>
<LancamentoDialog
@@ -394,6 +399,7 @@ export function LancamentosPage({
estabelecimentos={estabelecimentos}
lancamento={selectedLancamento ?? undefined}
defaultPeriod={selectedPeriod}
periodPreferences={periodPreferences}
onBulkEditRequest={handleBulkEditRequest}
/>
@@ -473,6 +479,7 @@ export function LancamentosPage({
categoriaOptions={categoriaOptions}
estabelecimentos={estabelecimentos}
selectedPeriod={selectedPeriod}
periodPreferences={periodPreferences}
defaultPagadorId={defaultPagadorId}
/>
) : null}
@@ -508,6 +515,7 @@ export function LancamentosPage({
name: p.label,
}))}
defaultPeriod={selectedPeriod}
periodPreferences={periodPreferences}
/>
)}