Skip to main content

Server Actions — Transactions

Source : src/app/actions/accounts.ts

Les actions sur les transactions sont colocalisées avec les actions comptes car elles partagent les mêmes vérifications d'ownership.


getAllTransactions(filters?)

Retourne les transactions paginées de tous les comptes de l'utilisateur.

export interface TransactionFilters {
accountId?: string; // filtre sur un seul compte
search?: string; // recherche insensible à la casse sur le champ "label"
dateFrom?: string; // "YYYY-MM-DD" inclus
dateTo?: string; // "YYYY-MM-DD" inclus
page?: number; // défaut: 1
pageSize?: number; // défaut: 50
}

export async function getAllTransactions(
filters?: TransactionFilters
): Promise<{ transactions: TransactionWithAccount[]; total: number }>

Pré-conditions : session valide.

Retour : transactions avec account et account.institution inclus, triées par date desc.

Exemple :

const { transactions, total } = await getAllTransactions({
search: "amazon",
dateFrom: "2024-01-01",
dateTo: "2024-03-31",
page: 1,
pageSize: 25,
});

getAccountTransactions(accountId, filters?)

Retourne les transactions paginées d'un compte spécifique avec des filtres additionnels.

export interface AccountTransactionFilters {
search?: string;
type?: "credit" | "debit" | "all";
period?: "1M" | "3M" | "6M" | "1A" | "ALL"; // défaut: "ALL"
page?: number; // défaut: 1
pageSize?: number; // défaut: 50
}

export async function getAccountTransactions(
accountId: string,
filters?: AccountTransactionFilters
): Promise<{ transactions: Transaction[]; total: number }>

Pré-conditions : accountId doit appartenir à l'utilisateur courant.

Périodes :

periodFenêtre
"1M"30 derniers jours
"3M"90 derniers jours
"6M"180 derniers jours
"1A"365 derniers jours
"ALL"Toutes les transactions

toggleInternalTransfer(transactionId)

Bascule isInternal d'une transaction. Si la transaction a une contrepartie (counterpartId), les deux côtés sont basculés atomiquement.

export async function toggleInternalTransfer(
transactionId: string
): Promise<{ success: boolean; error?: string }>

Pré-conditions : transaction appartenant à un compte de l'utilisateur.

Impact analytics : les transactions isInternal = true sont exclues de tous les calculs (flux mensuels, répartition catégories, résumé). Voir BR-TX-003.

Effets : revalidatePath("/accounts/<accountId>"), revalidatePath("/dashboard").


getTransactionsSummary(filters)

Retourne une agrégation crédit/débit/net pour un ensemble de transactions filtré.

Source : src/app/actions/analytics.ts

export async function getTransactionsSummary(filters: {
accountId?: string;
search?: string;
dateFrom?: string;
dateTo?: string;
type?: "credit" | "debit";
}): Promise<TransactionSummary>

export type TransactionSummary = {
credits: number; // somme des montants > 0
debits: number; // somme des montants < 0 (valeur négative)
net: number; // somme totale
count: number; // nombre de transactions
}

Important : exclut automatiquement les transactions isInternal = true.


Voir aussi