forked from git.gladyson/openmonetis
refactor: migrate from ESLint to Biome and extract SQL queries to data.ts
- Replace ESLint with Biome for linting and formatting - Configure Biome with tabs, double quotes, and organized imports - Move all SQL/Drizzle queries from page.tsx files to data.ts files - Create new data.ts files for: ajustes, dashboard, relatorios/categorias - Update existing data.ts files: extrato, fatura (add lancamentos queries) - Remove all drizzle-orm imports from page.tsx files - Update README.md with new tooling info Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,9 +2,9 @@
|
||||
* Utility functions for Category Report feature
|
||||
*/
|
||||
|
||||
import { buildPeriodRange, MONTH_NAMES, parsePeriod } from "@/lib/utils/period";
|
||||
import { calculatePercentageChange } from "@/lib/utils/math";
|
||||
import { currencyFormatter } from "@/lib/lancamentos/formatting-helpers";
|
||||
import { calculatePercentageChange } from "@/lib/utils/math";
|
||||
import { buildPeriodRange, MONTH_NAMES, parsePeriod } from "@/lib/utils/period";
|
||||
import type { DateRangeValidation } from "./types";
|
||||
|
||||
// Re-export for convenience
|
||||
@@ -18,18 +18,18 @@ export { calculatePercentageChange };
|
||||
* @returns Formatted period string
|
||||
*/
|
||||
export function formatPeriodLabel(period: string): string {
|
||||
try {
|
||||
const { year, month } = parsePeriod(period);
|
||||
const monthName = MONTH_NAMES[month - 1];
|
||||
try {
|
||||
const { year, month } = parsePeriod(period);
|
||||
const monthName = MONTH_NAMES[month - 1];
|
||||
|
||||
// Capitalize first letter and take first 3 chars
|
||||
const shortMonth =
|
||||
monthName.charAt(0).toUpperCase() + monthName.slice(1, 3);
|
||||
// Capitalize first letter and take first 3 chars
|
||||
const shortMonth =
|
||||
monthName.charAt(0).toUpperCase() + monthName.slice(1, 3);
|
||||
|
||||
return `${shortMonth}/${year}`;
|
||||
} catch {
|
||||
return period; // Return original if parsing fails
|
||||
}
|
||||
return `${shortMonth}/${year}`;
|
||||
} catch {
|
||||
return period; // Return original if parsing fails
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -41,10 +41,10 @@ export function formatPeriodLabel(period: string): string {
|
||||
* @returns Array of period strings in chronological order
|
||||
*/
|
||||
export function generatePeriodRange(
|
||||
startPeriod: string,
|
||||
endPeriod: string
|
||||
startPeriod: string,
|
||||
endPeriod: string,
|
||||
): string[] {
|
||||
return buildPeriodRange(startPeriod, endPeriod);
|
||||
return buildPeriodRange(startPeriod, endPeriod);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -56,47 +56,47 @@ export function generatePeriodRange(
|
||||
* @returns Validation result with error message if invalid
|
||||
*/
|
||||
export function validateDateRange(
|
||||
startPeriod: string,
|
||||
endPeriod: string
|
||||
startPeriod: string,
|
||||
endPeriod: string,
|
||||
): DateRangeValidation {
|
||||
try {
|
||||
// Parse periods to validate format
|
||||
const start = parsePeriod(startPeriod);
|
||||
const end = parsePeriod(endPeriod);
|
||||
try {
|
||||
// Parse periods to validate format
|
||||
const start = parsePeriod(startPeriod);
|
||||
const end = parsePeriod(endPeriod);
|
||||
|
||||
// Check if end is before start
|
||||
if (
|
||||
end.year < start.year ||
|
||||
(end.year === start.year && end.month < start.month)
|
||||
) {
|
||||
return {
|
||||
isValid: false,
|
||||
error: "A data final deve ser maior ou igual à data inicial",
|
||||
};
|
||||
}
|
||||
// Check if end is before start
|
||||
if (
|
||||
end.year < start.year ||
|
||||
(end.year === start.year && end.month < start.month)
|
||||
) {
|
||||
return {
|
||||
isValid: false,
|
||||
error: "A data final deve ser maior ou igual à data inicial",
|
||||
};
|
||||
}
|
||||
|
||||
// Calculate number of months between periods
|
||||
const monthsDiff =
|
||||
(end.year - start.year) * 12 + (end.month - start.month) + 1;
|
||||
// Calculate number of months between periods
|
||||
const monthsDiff =
|
||||
(end.year - start.year) * 12 + (end.month - start.month) + 1;
|
||||
|
||||
// Check if period exceeds 24 months
|
||||
if (monthsDiff > 24) {
|
||||
return {
|
||||
isValid: false,
|
||||
error: "O período máximo permitido é de 24 meses",
|
||||
};
|
||||
}
|
||||
// Check if period exceeds 24 months
|
||||
if (monthsDiff > 24) {
|
||||
return {
|
||||
isValid: false,
|
||||
error: "O período máximo permitido é de 24 meses",
|
||||
};
|
||||
}
|
||||
|
||||
return { isValid: true };
|
||||
} catch (error) {
|
||||
return {
|
||||
isValid: false,
|
||||
error:
|
||||
error instanceof Error
|
||||
? error.message
|
||||
: "Formato de período inválido. Use YYYY-MM",
|
||||
};
|
||||
}
|
||||
return { isValid: true };
|
||||
} catch (error) {
|
||||
return {
|
||||
isValid: false,
|
||||
error:
|
||||
error instanceof Error
|
||||
? error.message
|
||||
: "Formato de período inválido. Use YYYY-MM",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -107,7 +107,7 @@ export function validateDateRange(
|
||||
* @returns Formatted currency string
|
||||
*/
|
||||
export function formatCurrency(value: number): string {
|
||||
return currencyFormatter.format(value);
|
||||
return currencyFormatter.format(value);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -118,14 +118,14 @@ export function formatCurrency(value: number): string {
|
||||
* @returns Formatted percentage string
|
||||
*/
|
||||
export function formatPercentageChange(change: number | null): string {
|
||||
if (change === null) return "-";
|
||||
if (change === null) return "-";
|
||||
|
||||
const absChange = Math.abs(change);
|
||||
const sign = change >= 0 ? "+" : "-";
|
||||
const absChange = Math.abs(change);
|
||||
const sign = change >= 0 ? "+" : "-";
|
||||
|
||||
// Use one decimal place if less than 10%
|
||||
const formatted =
|
||||
absChange < 10 ? absChange.toFixed(1) : Math.round(absChange).toString();
|
||||
// Use one decimal place if less than 10%
|
||||
const formatted =
|
||||
absChange < 10 ? absChange.toFixed(1) : Math.round(absChange).toString();
|
||||
|
||||
return `${sign}${formatted}%`;
|
||||
return `${sign}${formatted}%`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user