labfy-investigation/include/database/database.h
2026-07-18 19:18:51 +02:00

96 lines
2.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/******************************************************************************
* @file database.h
* @brief API principale de la couche Database.
******************************************************************************/
#ifndef LABFY_INVESTIGATION_DATABASE_H
#define LABFY_INVESTIGATION_DATABASE_H
#include <stdbool.h>
/**
* @brief Contexte opaque représentant une connexion SQLite.
*/
typedef struct Database Database;
/**
* @brief Ouvre une base SQLite existante ou à créer.
*
* La fonction :
*
* - valide le chemin ;
* - ouvre la connexion SQLite ;
* - active les clés étrangères ;
* - conserve une copie du chemin.
*
* @param database_path Chemin du fichier SQLite.
*
* @return Une nouvelle instance de Database, ou NULL en cas d'échec.
*/
Database *database_open(
const char *database_path
);
/**
* @brief Ferme une base SQLite et libère ses ressources.
*
* Cette fonction accepte NULL.
*
* @param database Instance à fermer.
*/
void database_close(
Database *database
);
/**
* @brief Met à jour une base ouverte vers la dernière version du schéma.
*
* La fonction :
*
* - lit metadata.schema_version ;
* - applique chaque migration manquante dans une transaction ;
* - met à jour la version uniquement après une migration réussie ;
* - ne modifie rien lorsque la base est déjà à jour.
*
* La fonction refuse une migration lorsquune transaction est déjà active.
*
* @param database Connexion Database ouverte.
*
* @return true si la base est à jour, sinon false.
*/
bool database_migrate_to_latest(
Database *database
);
/**
* @brief Initialise la base SQLite d'une nouvelle enquête.
*
* Cette fonction :
*
* - valide les paramètres ;
* - ouvre la connexion Database ;
* - démarre une transaction ;
* - installe le schéma SQLite V1 ;
* - insère les métadonnées obligatoires ;
* - insère l'enquête courante ;
* - valide la transaction ;
* - ferme la connexion avant de retourner.
*
* Tout échec survenant après le début de la transaction provoque
* l'annulation des modifications.
*
* La fonction ne crée pas les dossiers parents du fichier SQLite.
*
* @param database_path Chemin complet du fichier Enquete.sqlite.
* @param investigation_name Nom de l'enquête.
* @param investigation_root_path Chemin racine de l'enquête.
*
* @return true si l'initialisation réussit, sinon false.
*/
bool database_initialize(
const char *database_path,
const char *investigation_name,
const char *investigation_root_path
);
#endif