Server Actions — Comptes
Source : src/app/actions/accounts.ts
getAccounts()
Retourne tous les comptes actifs et inactifs de l'utilisateur, avec leur institution et leur dernier snapshot.
export async function getAccounts(): Promise<AccountWithInstitutionAndSnapshot[]>
Pré-conditions : session valide.
Retour : tableau trié par institution.name puis account.name. Inclut institution et snapshots (le dernier uniquement, take: 1).
getAccountDetails(accountId)
Retourne le détail d'un compte avec l'historique complet des snapshots.
export async function getAccountDetails(accountId: string): Promise<AccountWithDetails | null>
Pré-conditions : compte appartenant à l'utilisateur courant.
Retour : compte avec institution et snapshots[] triés chronologiquement (asc). null si introuvable.
getInstitutions()
Retourne toutes les institutions de l'utilisateur.
export async function getInstitutions(): Promise<Institution[]>
Retour : tableau trié par name (asc).
createInstitution(name)
Crée une institution pour l'utilisateur courant.
export async function createInstitution(name: string): Promise<Institution>
Pré-conditions : le nom doit être unique pour cet utilisateur (@@unique([userId, name])).
Effets : revalidatePath("/accounts").
Erreurs : lève une exception Prisma P2002 si le nom existe déjà.
createAccount(data)
Crée un compte rattaché à une institution existante.
export async function createAccount(data: {
institutionId: string;
name: string;
type: AccountType;
currency?: string; // défaut: "EUR"
initialBalance?: number; // si fourni, crée un snapshot MANUAL à today
}): Promise<Account>
Pré-conditions : institutionId doit appartenir à l'utilisateur courant.
Effets :
- Crée le compte avec
currency = "EUR"par défaut. - Si
initialBalancefourni : crée unSnapshot { source: "MANUAL", date: now }. revalidatePath("/accounts"),revalidatePath("/dashboard").
createManualSnapshot(data)
Crée ou met à jour le snapshot d'un compte pour une date donnée.
export async function createManualSnapshot(data: {
accountId: string;
balance: number;
date: string; // format "YYYY-MM-DD"
}): Promise<Snapshot>
Pré-conditions : compte appartenant à l'utilisateur courant.
Comportement : upsert sur (accountId, date). La date est fixée à T12:00:00.000Z (midi UTC). Un snapshot existant est toujours écrasé (contrairement à l'import CSV qui respecte source = "MANUAL").
Effets : revalidatePath("/dashboard"), revalidatePath("/accounts/<id>").
toggleInternalTransfer(transactionId)
Bascule l'attribut isInternal d'une transaction (et de sa contrepartie si liée).
export async function toggleInternalTransfer(
transactionId: string
): Promise<{ success: boolean; error?: string }>
Pré-conditions : transaction appartenant à un compte de l'utilisateur.
Comportement :
- Si
counterpartIdexiste : bascule les deux transactions atomiquement (transaction Prisma). - Sinon : bascule uniquement la transaction ciblée.
Effets : revalidatePath("/accounts/<accountId>"), revalidatePath("/dashboard").
getAccountTransactions(accountId, filters?)
Retourne les transactions paginées d'un compte spécifique.
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 }>
getAllTransactions(filters?)
Retourne les transactions paginées de tous les comptes (vue globale).
export interface TransactionFilters {
accountId?: string;
search?: string;
dateFrom?: string; // format "YYYY-MM-DD"
dateTo?: string;
page?: number; // défaut: 1
pageSize?: number; // défaut: 50
}
export async function getAllTransactions(
filters?: TransactionFilters
): Promise<{ transactions: Transaction[]; total: number }>
Retour : transactions avec account.institution inclus.