>
Anterior ‹Dependencias
Siguiente ›UC: CRUD Employees

Caso de Uso: Crear Organigrama

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());



Anterior ‹Dependencias
Siguiente ›UC: CRUD Employees