Dsarrollada con Node.js, Javascript, express, graphql, apollo, sequelize y postgresql para base de datos.
Tiene una arquitectura similar a MVC, se debe tener instalado PostgreSQL y previamente creada la base de datos, el proyecto se ejecuta sobre el puerto localhost:4000/graphql
- database: contiene las migrations, seeders y config
- migrations: contiene todo lo relacionado con la estructura de las tablas en la base de datos
- seeders: crea data de prueba para las tablas, se debe ejecutar primero las migraciones
- config.js: configuración de los ambientes de la base de datos
- connection.js: Conexión a la base de datos
- src: contiene las migrations, seeders y config
- controllers: Logica del proyecto, intermediaron entre los resolvers y los modelos para trabajar con la base de datos
- resolvers: Configuración y declaración de queries GraphQL, query de cada modelo para consultar información y Mutation para crear, editar o eliminar información.
- schema: Interfaces y definición de tipo data que se va a retornar en cada Query
- models: Modelo de cada entidad, sus tipos de datos y atributos
- index.js: Inicialización del proyecto y conexión con base de datos
-
Clonar el proyecto
git clone https://github.com/angeldavidhf/support-company-api.git
-
Ir al directorio del proyecto
cd support-company-api
-
Instalar dependencias
npm install
-
Se debe configurar el ambiente que se vaya a usar de la base de datos en
database/config.js
-
Correr migración para crear tablas en base de datos
npm run migrate
- (Opcional) Correr seeders para crear data de pruebas en base de datos
npm run seed
- (Opcional) Correr seeders para crear data de pruebas en base de datos
-
Iniciar proyecto, esto se va a ejecutar en ambiente development
npm run dev
o
npm start
🥳 👏 Listo con esto podemos ver nuestra API en Apollo Sandbox y la URL seria
http://localhost:4000/graphql
-
Crear un nuevo rol
mutation { createRole(input: { name: "Nuevo Rol" }) { id name } }
-
Actualizar un rol existente
mutation { updateRole(id: 1, input: { name: "Nuevo Nombre de Rol" }) { id name } }
-
Obtener todos los roles
query { roles { id name users { id name branch_office } } }
-
Obtener un rol por su ID
query { role(id: 1) { id name users { id name branch_office } } }
-
Eliminar un rol por su ID
mutation { deleteRole(id: 1) }
-
Crear un nuevo usuario
mutation { createUser(input: { name: "John Doe", branch_office: "Branch 1", roleId: 1 }) { id name branch_office role { id name } } }
-
Actualiar un usuario existente
mutation { updateUser(id: 1, input: { name: "Updated User", branch_office: "Updated Branch", roleId: 2 }) { id name branch_office role { id name } } }
-
Obtener todos los usuarios (Tambien podras obtener las herramientas y visitas que estan relacionadas con los usuario)
query { users { id name branch_office role { id name } tools { id name value } visits { id dateVisit company { id name } } } }
-
Obtener un usuario por ID (Tambien podras obtener las herramientas y visitas que estan relacionadas con el usuario)
query { user(id: 1) { id name branch_office role { id name } tools { id name value } visits { id dateVisit company { id name } } } }
-
Eliminar un usuario por su ID
mutation { deleteUser(id: 1) }
-
Crear una nueva herramienta (el userId no es obligatorio):
mutation { createTool(input: { userId: 1, name: "Hammer", value: 15.99, status: true }) { id name value status user { id name branch_office } } }
-
Actualizar una herramienta existente:
mutation { updateTool(id: 1, input: { name: "Updated Tool", value: 20.99, status: false }) { id name value status user { id name branch_office } } }
-
Consultar todas las herramientas:
query { tools { id name value status user { id name branch_office } } }
-
Consultar una herramienta por su ID:
query { tool(id: 1) { id name value status user { id name branch_office } } }
-
Eliminar una herramienta por su ID:
mutation { deleteTool(id: 1) }
-
Crear una nueva empresa:
mutation { createCompany(input: { name: "ABC Corp", address: "123 Main St" }) { id name address } }
-
Actualizar una empresa existente:
mutation { updateCompany(id: 1, input: { name: "Updated Company", address: "456 Park Ave" }) { id name address } }
-
Consultar todas las empresas:
query { companies { id name address visits { id dateVisit user { id name branch_office } } } }
-
Consultar una empresa por su ID:
query { company(id: 1) { id name address visits { id dateVisit user { id name branch_office } } } }
-
Eliminar una empresa por su ID:
mutation { deleteCompany(id: 1) }
-
Crear una nueva visita:
mutation { createVisit(input: { userId: 1, companyId: 1, dateVisit: "2023-07-31" }) { id dateVisit user { id name branch_office } company { id name } } }
-
Actualizar una visita existente:
mutation { updateVisit(id: 1, input: { dateVisit: "2023-08-15" }) { id dateVisit user { id name branch_office } company { id name } } }
-
Consultar todas las visitas:
query { visits { id dateVisit user { id name branch_office } company { id name } } }
-
Consultar una visita por su ID:
query { visit(id: 1) { id dateVisit user { id name branch_office } company { id name } } }
-
Eliminar una visita por su ID:
mutation { deleteVisit(id: 1) }
- sequelize
- express
- express-graphql
- graphql
- graphql-tag
- @graphql-tools/schema
- @graphql-tools/utils
- apollo-server-express
- pg
- pg-hstore