-
Notifications
You must be signed in to change notification settings - Fork 0
API DBManager
La API está desarrollada completamente en C++, utilizando como única dependencia el framework Qt v5. El código fuente dispone de los comentarios necesario para generar la documentación técnica del mismo.
La sesión de usuario en CDB
se mantiene a través de una cookie, accesible con el getter get_auth_cookie() y pudiéndose establecer con el setter set_auth_cookie() de la instancia del DBMANAGER
.
Esto da la libertad de mantener la instancia del DBMANAGER
como singleton, instancia global o creando una por cada petición.
Casi todas las funciones que interactúan con las entidades/documentos están desarrolladas utilizando la mecánica de templating de C++. Debido a su funcionamiento, el código fuente de las funciones debe estar disponible para el compilar, de ahí que estén codificadas en los ficheros de cabeceras y no en los de código fuente.
Siempre se debe tener presente la forma de registro de las clases que representan los documento en 'CDB
. Si la clase se registra en Qt con namespace, todas las propiedades deben declararse con el mismo namespace, y éste debe utilizarse también en las funciones con template.
Existen 7 clases que representan documentos, o partes del uno, y 2 clases que representan estados en CDB
.
Define una parte básica de documento. Es la clase raíz de la que derivan el resto de objetos. Esta clase debe utilizarse para crear partes de documentos anidadas.
Define una entidad básica. Deriva de la clase BaseObject añadiendo las propiedades _id, _rev, collection, name y description. Esta clase debe utilizarse para crear documentos completos no versionables.
Define un documento de relación interno. Deriva de la clase BaseObject. Esta clase debe utilizarse para relacionar una parte de un documento con otra parte anidada del mismo.
Define un documento de usuario básico. Deriva de la clase BaseEntity. Esta clase debe utilizarse para crear objetos de tipo usuario especializados.
Define una entidad básica. Deriva de la clase BaseEntity añadiendo las propiedades version, working, locked y locked_by. Esta clase debe utilizarse para crear documentos completos versionables.
Define una entidad de relación. Deriva de la clase BaseEntity. Esta clase debe utilizarse para crear documentos completos de relación.
Define un documento de configuración de replicación persistente. Deriva de la clase BaseEntity. No se debería derivar a partir de esta clase, sino usarla como tal para especificar configuraciones.
Es un objeto de apoyo que contiene el estado del contexto de usuario.
Es un objeto de apoyo que contiene el estado de la respuesta de algunas funciones de DBMANAGER
.
Actualmente existe cuatro formas de relación:
-
N-M
- Es la que se debería utilizar cuando se requiere relacionar clases versionables.
- Se debe establecer la relación a través de un documento, y su representación como clase C++.
- La clase de relación siempre debe ser una lista: QList<…>.
- Para las propiedades de tipo QList que establezcan relaciones, siempre se debe añadir un método adder con la siguiente firma:
void add_<nombre_propiedad>(CouchDBManager::BaseObject* value);
-
1-1
- Se representa por una propiedad de un tipo que deriva de BaseEntity.
-
INDIRECTA
- El documento es anidado, teniendo como propiedad un documento compuesto por { id, versión, collection } que hace referencia a otro documento.
- En la clase C++ se representa por una clase que deriva de BaseReference.
-
INTERNA
- El documento es anidado, y contiene una lista de documentos a los que se hace referencia desde otra parte del propio documento.
- Sólo hay que representar el documento como tal.
- Existe el método get_inner_object() que recupera el objeto referenciado para todas las clases que deriven de BaseEntity.