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​