Aller au contenu principal

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 initialBalance fourni : crée un Snapshot { 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 counterpartId existe : 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.


Voir aussi