Client d'accés a la API Rest de l'aplicació CENSAT de l'Ajuntament de Tarragona
Table of Contents generated with DocToc
- Instalació
- Configuració
- Via API
- Funcions
- Definició de censos i entitats
- Accedint a les instàncies (Crear, modificar i consultar)
- instances($census_name, $entity_name, $options=[])
- search($census_name, $entity_name, $filters, $options=[])
- instancesTree($census_name, $entity_name, $field_name, $options=[])
- instance($census_name, $entity_name, $id, $options=[])
- getInstanceField($census_name, $entity_name, $id, $field_name)
- createInstance($census_name, $entity_name, $fields)
- deleteInstance($census_name, $entity_name, $id, $hard=false)
- updateInstance($census_name, $entity_name, $id, $fields)
- updateInstanceField($census_name, $entity_name, $id, $field_name, $value)
- clearInstanceField($census_name, $entity_name, $id, $field_name)
- addInstanceFieldItem($census_name, $entity_name, $id, $field_name, $value)
- removeInstanceFieldItem($census_name, $entity_name, $id, $field_name, $item_id)
- Graelles (Grids)
- getInstanceGridItems($census_name, $entity_name, $id, $grid_name)
- getInstanceGridItem($census_name, $entity_name, $id, $grid_name, $grid_item_id)
- addInstanceGridItem($census_name, $entity_name, $id, $grid_name, $values=[])
- updateInstanceGridItem($census_name, $entity_name, $id, $grid_name, $grid_item_id, $values=[])
- removeInstanceGridItem($census_name, $entity_name, $id, $grid_name, $grid_item_id)
- Entitats relacionades
- Attachments (documents)
- Trees Feature
- getTrees($options=[])
- getTree($tree_id, $options=[])
- getTreeNodes($tree_id, $options=[])
- getNode($tree_id, $node_id, $options=[])
- getNodeChildren($tree_id, $node_id, $options=[])
- getNodeParent($tree_id, $node_id, $options=[])
- getNodeAncestors($tree_id, $node_id, $options=[])
- getNodeDescendants($tree_id, $node_id, $options=[])
- getNodeSiblings($tree_id, $node_id, $direction=null, $options=[])
- Classes
- Funcions
- Vía Base de Dades (Eloquent )
composer require ajtarragona/censat-client:"@dev"
Pots configurar el paquet a través de l'arxiu .env
de l'aplicació. Aquests son els parámetres disponibles :
Per a l'accés via API
CENSAT_DEBUG
CENSAT_API_URL // no incloure la versio a la URL
CENSAT_API_VERSION
CENSAT_API_USER
CENSAT_API_PASSWORD
CENSAT_API_TOKEN
Si definim un token, es farà servir aquest per totes les peticions. Si no, se'n crearà un de nou per cada petició a partir de l'usuari i password. És recomanable doncs definir un token ja que es faran la meitat de crides. Censat genera tokens amb una expiració d'un any a través del mètode Login de la seva Api.
Per a l'accés via Base de Dades
CENSAT_DB_HOST
CENSAT_DB_PORT
CENSAT_DB_DATABASE
CENSAT_DB_USERNAME
CENSAT_DB_PASSWORD
Alternativament, pots publicar l'arxiu de configuració del paquet amb la comanda:
php artisan vendor:publish --tag=ajtarragona-censat-config
Això copiarà esl arxiu a censat-api.php
i censat-database.php
a la carpeta config
.
Un cop configurat, el paquet està a punt per fer-se servir. Ho pots fer de les següents maneres:
A través d'una Facade
:
use Censat;
...
public function test(){
$censos=Censat::censuses();
...
}
Per Laravel < 5.6, cal registrar l'alias de la Facade a l'arxiu config/app.php
:
'aliases' => [
...
'Censat' => Ajtarragona\Censat\Facades\Censat::class
]
Vía Injecció de dependències: Als teus controlladors, helpers, model:
use Ajtarragona\Censat\Models\CensatClient;
...
public function test(CensatClient $censat){
$censos=$censat->censuses();
...
}
Vía funció helper
:
...
public function test(){
$censos=censat()->censuses();
...
}
Returns all censuses. Objects of class Census
Returns a census given its name.
Returns a census entities given the census name. Objects of class Entity
Returns all entities.
Returns an entity given its name.
Returns an entity fields given the entity name. Objects of class Field
Returns a single entity field given the entity name and the field name.
Returns the fields of an entity grid, given the entity name and the grid name.
Returns all instances in a given census and entity. Objects of class Instance
- fields : comma separated field names that will be returned. See fields section for more info.
- parsevalues : true will return all object and array values as strings.
- separator : is parsevalues is set to true, multiple fields will be returned as a comma separated string. With this options you can set a diferent separator character/s.
- exclude : comma separated field names that will NOT be returned.
- sort : name of the field to sort by.
- direction : sort direction (asc or desc).
- paginate : true to paginate (default false).
- page : page number.
- pagesize : page size (default 10).
Podem especificar quins camps volem que se'ns retornis amb una llista dels noms, separats per coma.
Tenim l'alias basefields que ens retornarà els camps base (id, dates, versio...)
Però a més, podem navegar pel model de dades mitjançant notació punt. Per exemple si volem que ens retorni l'id d'un camp de relació, podem fer:
nom_camp_relacio.id
En el cas de grids o camps múltiples (relacions, integracions, selects) tenim els accessors especials:
nom_grid.0 (o l'índex que vulguem)
nom_grid.first
nob_grid.last
I la gràcia és que tot plegat es pot concatenar:
nom_camp.0.nom_grid.1.camp_usuari.username
Formatadors
Sobre cada camp, podem aplicar formatadors separant-los amb el caràcter |
. Aquests s'aplicaran al valor retornat.
Per exemple podem fer que ens retorni un valor de text en majúscules:
nom_camp|upper
Es poden concaternar varios formatadors que s'aplicaran en ordre.
nom_camp|upper|lower
Aquests son els disponibles:
-
upper: passa a majúscules
-
lower: passa a minúscules
-
serialize: serialitza
-
csv(delimiter?;enclosure?): passa a csv, en cas que ens tornin arrays (opcionalment podem definir el caracter delimitador i les cometes per enbolcallar els texts)
-
json: passa a json
-
array: passa a rray si era un objecte
-
object: passa a objecte si era un array
-
matricula/format/string(format?): els 3 fan el mateix. Mostra una versió textual del camp retornat.
-
pad(num;char?;position?): afegeix zeros per l'equerra (podem passar el numero de zeros, i opcionalment el caracter a afegir, si no volem q sigui zero i la posicio: (0: esquerra, 1: dreta, 2:els dos costats) )
-
count: retorna el numero d'elements si es retorna un array
Search instances in a given census and entity.
Must be an array of filters or filtergroups: A filter must be a key-value array with following attributes:
- id : name of the field to filter
- value : value of the field
- operation : Logic Operation (=, !=, <, > , <=, >=, contains, starts_with, ends_with, in, not in, isnull, isnotnull) (default =)
A filtergroup must be a key-value array with following attributes:
- concat : and / or
- filters : array of filters or filtergroups
[
["id"=> "name", "value"=>"john", "operation"=>"contains"],
["id"=> "gender", "value"=>"male"], //default operation =
["id"=> "age", "value"=>18, "operation"=>">"],
["id"=> "active", "operation"=>"isnotnull"], //value not needed
["id"=> "tags", "operation"=>"in", "value"=>[1,2,3]],
["concat"=> "or", "filters"=>[
["id"=> "gender", "value"=>"female"]
]]
]
- See instances method
Returns the whole instances tree given a census name, an entity name and the field name that establishes the instances parenthood hyerarchy.
- parent_id : id of the root instance to start the tree with (defaults to null)
- sort : name of the field to sort by.
- direction : sort direction (asc or desc).
- filters : see search method
Returns a single instance given a census name, an entity name and the instance id.
- fields : comma separated field names that will be returned. Alias "basefields" will return id, version and dates.
- parsevalues : true will return all object and array values as strings.
- exclude : comma separated field names that will NOT be returned.
Get an instance field given a census and entity, the instance id and the field name.
Create an instance in a given census and entity. Returns the created instance or an exception.
- Fields must be a key-value array with the field names and its values.
- For multiple values like selects, relations, documents or grids, use arrays.
- Select and relation fields expect the ID of the related values.
- Document-type fields expect and array with 'file-name' and 'file-content' (binary content)
- Integration fields (like LDAP users and UOs) expect the PK of the integration (username and code in the examples).
try{
$instance= Censat::createInstance("census_name","entity_name",[
"name" => "John",
"surname" => "Smith",
"age" => 25,
"addresses_grid"=> [
[
"street"=>"Fake street",
"number"=> 1
],
[
"street"=>"Dumb street",
"number"=> 33
"floor" => 1
]
],
"tags" => [1,2,4], //relation field
'document_simple' => [
"file-name"=>"doc_name.pdf",
"file-content"=>$binary_content
],
'document_multiple' => [
[
"file-name"=>"doc_name1.pdf",
"file-content"=>$binary_content
],
[
"file-name"=>"doc_name2.pdf",
"file-content"=>$binary_content
]
]
]);
}catch(Exception $e){
...
}
Delete and instance given a census and entity and the instance id.
By default it is a soft delete. Hard delete can be forced setting the parameter hard
to true.
Returns true or an Exception
Update an instance given a census and entity and the instance id. Fields must be a key-value array with the field names and its values. Returns the updated instance or an Exception.
Update an instance single field. Returns the updated instance or an Exception.
Clears (sets to null) an instance field. Returns the updated instance or an Exception.
Add an item to an instance field, given its value. It is useful for multiple fields (relations, selects, integrations or grids). Returns the updated instance or an Exception.
Removes an instance field item, given its id It is useful for multiple fields (relations, selects, integrations or grids). Returns the updated instance or an Exception.
Returns the items of an instance grid.
Returns an item of an instance grid, given its id.
Add an item to an instance grid, given its value. Returns the updated instance an Exception.
Updates an instance grid item. Returns the updated instance an Exception.
Removes an instance grid item, given its id. Returns the updated instance an Exception.
Add an item to an instance relation field, given its id. Returns the updated instance an Exception.
Remove an item from an instance relation field, given its id. Returns the updated instance an Exception.
Returns an attachment info given its Censat ID
Returns an attachment content (encoded in base64) given its Censat ID
Downloads (streams the file through the response) an attachment given its Censat ID
Retorna tots els arbres
Retorna un arbre passant el seu ID o short_name
Retorna els nodes d'un arbre
- parent_id : Si s'especifica, retorna nodes a partir d'aquest node arrel.
- with_instance : Retorna més dades de la instància d'aquest node.
- hyerarchical : Retorna els nodes de forma jeràrquica (per defecte true).
- depth : Nivell de profunditat (Si no s'especifica es retornen tots els nivells).
- term : Paraula de cerca per filtrar els nodes (si s'especifica, es retornaran els nodes sense jerarquia).
- instance_id : Retorna els nodes en que l'id d'instància sigui el passat.
- entity_id : Retorna els nodes en que l'id de la entitat sigui el passat.
- census_id : Retorna els nodes en que l'id del cens sigui el passat.
Retorna un node d'un arbre passant els seus IDs.
Retorna els fills d'un node
Retorna el pare d'un node
Retorna els ancestres d'un node
Retorna els descendents d'un node
Retorna els germans d'un node. Es pot especificar si volem només els següents (next) o anteriors (prev)
Els diferents mètodes de consulta retornen objectes de diferents classes. A través d'aquestes classes també podem fer crides a diferents mètodes.
Returns an entity in the census given its name
$entity=$census->entity('test')
Returns all the census entities
Returns all the entity fields
Returns an entity field given its name
Returns the related entity given an entity-relation field name
Locates the entity in the given census. The following methods only work if this has been called previously
Returns all the instances of the entity
$instances=$entity->forCensus("census_name")->all();
Returns an instance of the entity given its id. See instances method available options.
Search instances in the entity. See search method for filter options.
Returns the whole instances tree in the entity given the field name that establishes the instances parenthood hyerarchy.
Creates an instance in the entity. See createInstance method
Returns the field settings
For select field types, returns the select options.
For grid field types, returns the grid fields.
For entity-relation field types, returns the related entity
Return the instance entity
Return the instance census
Updates the instance given an array of fields. See createInstance method
Gets the value of given field
Sets the value of given field
Adds a value to a given field. Useful for multiple fields and grids.
Clears (sets to null) the given field.
Removes an item from a given field. Useful for multiple fields and grids.
Soft deletes the instance
Destroys the instance
Retorna el no de pare
Retorna els germams
Retorna els descendents
Retorna els ancestres
Retorna els fills directes
Alternativament podem fer servir Eloquent per accedir als models del censat, sempre i quant tinguem accés a la base de dades.
Simplement cal definir els nostres models extenent el model base CensatEntityModel
.
namespace App\Models;
use Ajtarragona\Censat\Models\Eloquent\CensatEntityModel;
class NomEntitat extends CensatEntityModel
{
public $entity_name = 'nom_entitat'; // nom de la entitat
public $census_id = 28; //id del cens (només necessari si la entitat està a més d'un cens)
}
Estem treballant amb models Eloquent, per la qual cosa tenim disponible tota la seva funcionalitat: QueryBuilder, Relacions, Scopes, Mutators, etc.
IMPORTANT! Per ara només és aconsellable fer servir aquest mètode per consulta. Realitzar modificacions (create, update, delete) directament podria donar generar inconsistència a les dades: no s'auditen els canvis, no s'actualitza caché...
Si la nostra entitat té algun camp de tipus Data, podem indicar-ho aprofitant el mutator de Laravel $dates
.
class Tramit extends CensatEntityModel
{
...
protected $dates = [
'data_inici',
'data_final'
];
...
Els camps de tipus Integració o de tipus Mapa son objectes json internament, per la qual cosa ho podem indicar aprofitant el casting d'atributs de Laravel:
class Tramit extends CensatEntityModel
{
...
protected $casts = [
'unitat_organica' => 'object'
];
...
Si una entitat té algun camp de Relació, ho podem indicar a partir dels atributs $simple_relations
i $multiple_relations
, indicant el nom del camp i el nom de la classe que modela la entitat relacionada.
class Tramit extends CensatEntityModel
{
public $entity_name = 'tramit';
protected $simple_relations = [
'estruc_org' => '\App\Models\Tramits\UnitatOrganica'
];
protected $multiple_relations = [
'classificacio_tematica' => '\App\Models\Tramits\TematicaTramit',
'classificacio_perfil' => '\App\Models\Tramits\Perfil'
];
...
Definint els camps de relació d'aquesta manera aquests automàticament esdevenen relacions Eloquent al model. Podem fer coses com aquestes, per exemple:
$tramit=Tramit::find(1);
$tramit->estruc_org; //aixo retorna una instància de \App\Models\Tramits\UnitatOrganica o null
$tramit->classificacio_tematica; //aixo retorna una col·lecció
$tramit->classificacio_tematica()->where('id','>',10)->orderBy('id') //aqui tenim el QueryBuilder
$tramits=Tramit::has('classificacio_tematica')->get() //retorna tramits amb alguna classsificació temàtica
Aquests exemples d'Eloquent son extensibles als camps Select i Grids que veurem tot seguit.
Si una entitat té algun camp de tipus Select, ho podem indicar a partir dels atributs $simple_selects
i $multiple_selects
, indicant el nom del camp i el nom de la classe que modela el select.
class Tramit extends CensatEntityModel
{
public $entity_name = 'tramit';
protected $simple_selects = [
'tipus_instancia' => '\App\Models\Tramits\TipusSolicitud',
'destinatari' => '\App\Models\Tramits\Destinatari'
];
protected $multiple_selects = [
'formes_tramitacio' => '\App\Models\Tramits\FormaTramitacio'
];
...
Aquesta classe del Select haurà d'extendre la classe CensatSelectModel
, indicant el nom de la entitat i el nom del camp.
namespace App\Models\Tramits;
use Ajtarragona\Censat\Models\Eloquent\CensatSelectModel;
class TipusSolicitud extends CensatSelectModel
{
public $entity_name="tramit";
public $field_name="tipus_instancia";
}
Si una entitat té alguna graella, ho podem indicar a partir de l'atribut $grids
, indicant el nom de la graella i el nom de la classe que la modela.
class Tramit extends CensatEntityModel
{
public $entity_name = 'tramit';
protected $grids = [
'autors' => '\App\Models\Tramits\Autor'
];
...
Aquesta classe del Grid haurà d'extendre la classe CensatGridModel
, indicant el nom de la entitat i el nom de la graella.
namespace App\Models\Tramits;
use Ajtarragona\Censat\Models\Eloquent\CensatGridModel;
class Autor extends CensatGridModel
{
public $entity_name ="tramit";
public $grid_name ="autors";
...
}