labfy-investigation/include/models/relation_record.h

208 lines
5.4 KiB
C

/******************************************************************************
* @file relation_record.h
* @brief Modèle représentant une relation persistée entre deux entités.
******************************************************************************/
#ifndef LABFY_INVESTIGATION_RELATION_RECORD_H
#define LABFY_INVESTIGATION_RELATION_RECORD_H
#include <glib.h>
G_BEGIN_DECLS
/**
* @brief Modèle opaque représentant une relation entre deux entités.
*/
typedef struct RelationRecord RelationRecord;
/**
* @brief Statut métier d'une relation.
*
* UNKNOWN sert uniquement de valeur défensive et ne doit jamais être
* persisté dans SQLite.
*/
typedef enum
{
RELATION_STATUS_UNKNOWN,
RELATION_STATUS_ACTIVE,
RELATION_STATUS_ARCHIVED,
RELATION_STATUS_DELETED,
RELATION_STATUS_DISPUTED
} RelationStatus;
/**
* @brief Codes d'erreur produits par RelationRecord.
*/
typedef enum
{
RELATION_RECORD_ERROR_INVALID_ARGUMENT,
RELATION_RECORD_ERROR_INVALID_IDENTIFIER,
RELATION_RECORD_ERROR_INVALID_SOURCE_IDENTIFIER,
RELATION_RECORD_ERROR_INVALID_TARGET_IDENTIFIER,
RELATION_RECORD_ERROR_IDENTICAL_ENTITIES,
RELATION_RECORD_ERROR_INVALID_TYPE,
RELATION_RECORD_ERROR_INVALID_CONFIDENCE,
RELATION_RECORD_ERROR_INVALID_DATE,
RELATION_RECORD_ERROR_INVALID_STATUS
} RelationRecordError;
/**
* @brief Domaine d'erreur du modèle RelationRecord.
*/
#define RELATION_RECORD_ERROR \
relation_record_error_quark()
/**
* @brief Retourne le domaine d'erreur du modèle.
*/
GQuark relation_record_error_quark(void);
/**
* @brief Crée une relation métier.
*
* Toutes les chaînes sont copiées.
*
* identifier, source_entity_identifier, target_entity_identifier,
* relation_type, created_at et updated_at sont obligatoires.
*
* label et justification peuvent être NULL ou vides.
*
* confidence doit être compris entre 0 et 100.
*
* La source et la cible doivent être différentes.
*
* @param identifier UUID de la relation.
* @param source_entity_identifier UUID de l'entité source.
* @param target_entity_identifier UUID de l'entité cible.
* @param relation_type Type métier de la relation.
* @param label Libellé facultatif.
* @param justification Justification facultative.
* @param confidence Niveau de confiance compris entre 0 et 100.
* @param created_at Date UTC de création.
* @param updated_at Date UTC de dernière modification.
* @param status Statut métier.
* @param error Emplacement facultatif recevant une erreur.
*
* @return Nouvelle relation, ou NULL lorsque les données sont invalides.
*/
RelationRecord *relation_record_new(
const char *identifier,
const char *source_entity_identifier,
const char *target_entity_identifier,
const char *relation_type,
const char *label,
const char *justification,
gint confidence,
const char *created_at,
const char *updated_at,
RelationStatus status,
GError **error
);
RelationRecord *relation_record_new_canonical(
const char *identifier,
const char *source_entity_identifier,
const char *target_entity_identifier,
gint64 relation_type_identifier,
const char *relation_type_code,
const char *relation_type_label,
const char *label,
const char *justification,
gint confidence,
const char *created_at,
const char *updated_at,
RelationStatus status,
GError **error);
/**
* @brief Libère une relation.
*
* Cette fonction accepte NULL.
*/
void relation_record_free(
RelationRecord *relation_record
);
/**
* @brief Retourne l'UUID de la relation.
*/
const char *relation_record_get_identifier(
const RelationRecord *relation_record
);
/**
* @brief Retourne l'UUID de l'entité source.
*/
const char *relation_record_get_source_entity_identifier(
const RelationRecord *relation_record
);
/**
* @brief Retourne l'UUID de l'entité cible.
*/
const char *relation_record_get_target_entity_identifier(
const RelationRecord *relation_record
);
/**
* @brief Retourne le type métier de la relation.
*/
const char *relation_record_get_relation_type(
const RelationRecord *relation_record
);
gint64 relation_record_get_relation_type_identifier(
const RelationRecord *relation_record);
const char *relation_record_get_relation_type_code(
const RelationRecord *relation_record);
const char *relation_record_get_relation_type_label(
const RelationRecord *relation_record);
/**
* @brief Retourne le libellé facultatif.
*/
const char *relation_record_get_label(
const RelationRecord *relation_record
);
/**
* @brief Retourne la justification facultative.
*/
const char *relation_record_get_justification(
const RelationRecord *relation_record
);
/**
* @brief Retourne le niveau de confiance.
*
* @return Valeur comprise entre 0 et 100, ou 0 si relation_record est NULL.
*/
gint relation_record_get_confidence(
const RelationRecord *relation_record
);
/**
* @brief Retourne la date UTC de création.
*/
const char *relation_record_get_created_at(
const RelationRecord *relation_record
);
/**
* @brief Retourne la date UTC de dernière modification.
*/
const char *relation_record_get_updated_at(
const RelationRecord *relation_record
);
/**
* @brief Retourne le statut métier.
*
* @return Statut ou RELATION_STATUS_UNKNOWN si relation_record est NULL.
*/
RelationStatus relation_record_get_status(
const RelationRecord *relation_record
);
G_END_DECLS
#endif