Clase: |
net.hrider.api.usecases.CreateOrganization |
Ejemplo de cómo se podría crear una compañía y construir su organigrama de departamentos (DEPT1), puestos (PSTA, PSTB, PSTC) y
empleados (EMP1, EMP2, EMP3):
DEPT1
|____ PSTA
| |_______ EMP1
| |_______ EMP2
|
|____ PSTB
| |_______ EMP3
|
|____ PSTC
Además se requiere establecer las siguientes relaciones:
- EMP1 es el supervisor de EMP2 y EMP3
- EMP2 y EMP1 son clientes internos de EMP3
En primer lugar obtenemos el punto de anclaje principal a la versión actual de la API "v1":
ApiClient client = new ApiClient();
HRiderService service = new HRiderService(client);
Root root = service.get(Root.class, new Link("v1"));
El objeto
Root nos da acceso a navegar por el resto de
la API a través de sus enlaces (este objeto podemos guardarlo en memoria en lugar
de obtenerlo cada vez para ganar eficiencia).
Para crear la compañía hacemos un
POST a la dirección de su enlace 'companies'
root.getLinks().get("companies")
pasándole una instancia de
net.hrider.api.model.Company
, que en nuestro ejemplo
retorna el método
buildCompany()
, estableciendo sus
propiedades principales y dejando a
null
las propiedades
embedded y
links que son únicamente de lectura para todos los objetos de la API.
El método
service.create
realiza el POST por nosotros:
Company company = service.create(root.getLinks().getCompanies(), buildCompany());
¡Ya tenemos creada la compañía!
Para crear el departamento DEPT1 seguimos la misma lógica, esta vez siguiendo
el enlace de la compañía creada
departments:
Department dpt1 = service.create(company.getLinks().getDepartments(),
buildDepartment("DEPT1", "DEPARTMENT 1"));
Ya que los puestos a crear están dentro del departamento DEPT1 debemos seguir
el enlace
positions de
dpt1 para crear los puestos:
Link positionsLink = dpt1.getLinks().getPositions();
Position pa = service.create(positionsLink, buildPosition("PSTA", "POSITION A", 2));
Position pb = service.create(positionsLink, buildPosition("PSTB", "POSITION B", 1));
Position pc = service.create(positionsLink, buildPosition("PSTC", "POSITION C", 1));
Ahora creamos los empleados:
Link employeesLink = company.getLinks().getEmployees();
Employee emp1 = service.create(employeesLink, buildEmployee("EMP1", "Employee 1", "[email protected]"));
Employee emp2 = service.create(employeesLink, buildEmployee("EMP2", "Employee 2", "[email protected]"));
Employee emp3 = service.create(employeesLink, buildEmployee("EMP3", "Employee 3", "[email protected]"));
La relación con el puesto la establecemos
con un PUT al enlace
position de cada empleado, incluyendo como
contenido del PUT la URI del puesto que queremos relacionar.
Puesto que todos los objetos tienen un enlace a si mismos (
self
),
podemos utilizarlo y obtener la URI de cada puesto mediante
getHref
. Para otras
relaciones de la API que acepten más de una URI en la relación, separaremos cada URI con un
salto de línea (content type: text/uri-list).
service.put(emp1.getLinks().getPosition(), pa.getLinks().getSelf().getHref());
service.put(emp2.getLinks().getPosition(), pa.getLinks().getSelf().getHref());
service.put(emp3.getLinks().getPosition(), pb.getLinks().getSelf().getHref());
Con esto ya tenemos establecido que el puesto de EMP1 y EMP2 es PSTA, y el de EMP3 es PSTB.
Ahora ya solo nos queda asignar los supervisores y clientes:
service.put(emp2.getLinks().getSupervisor(), emp1.getLinks().getSelf().getHref());
service.put(emp3.getLinks().getSupervisor(), emp1.getLinks().getSelf().getHref());
service.put(emp3.getLinks().getClients(),
emp2.getLinks().getSelf().getHref() + "\n" +
emp1.getLinks().getSelf().getHref());