Prueba técnica para la empresa PragmaSOFT: Esta prueba consiste en crear una aplicacion web o de escritorio que le permita al usuario poder conectarse a una base de datos ingresando las credenciales de estas mismas. Es decir:
- HOST
- PORT
- DATABASE_NAME
- USER
- PASSWORD
Una vez que el usuario se logueo podra realizar diferentes operaciones (GET,POST,PUT y DELETE) sobre una base de datos que almacena datos relacionos a series.
Requisitos:
-
Requerimientos funcionales del programa Administrador de Series:
-
Pantalla de conexión a la base de datos, que permita ingresar: Servidor Host, puerto, base de datos, usuario y contraseña.
-
Pantalla AdministradorSeries: ABM y consulta.
-
Botón "Nuevo": todos los campos son requeridos.
-
Lista de datos:
- Título (varchar).
- Descripción (text).
- Fecha de estreno (date).
- Estrellas (entero).
- Género (varchar) (lista de opciones).
- Precio Alquiler (decimal).
- ATP (boolean).
- Estado (varchar 2).
-
-
Botón "Modificar: permite la visualización y modificación de registro.
-
Anulación: validación y mensaje de confirmación,
-
Eliminación: mensaje de confirmación y eliminación del registro seleccionado.
-
Botón "Consultar": consulta en base de datos y actualiza los registros en la grilla.
-
Botón "Salir".
-
-
-
Backend: Django Rest Framework
-
Frontend: Angular
-
Base de datos: Postgres
-
Herramientas adicionales: Docker (Contenedores de Nginx, PgAdmin4 y Postgres)
Clonar un repositorio es una forma común de obtener una copia local de un proyecto alojado en un sistema de control de versiones, como Git. A continuación, se explican las diferentes formas de clonar un repositorio en función de las opciones disponibles:
Puedes clonar un repositorio utilizando la URL HTTPS proporcionada por el servicio de alojamiento. Utiliza el siguiente comando de Git:
git clone https://github.com/Leonel-H29/PragmaSOFT-TechnicalTest.gitSi has configurado una clave SSH y la has agregado a tu cuenta del servicio de alojamiento, puedes clonar utilizando la URL SSH. Utiliza el siguiente comando de Git:
git clone git@github.com:Leonel-H29/PragmaSOFT-TechnicalTest.gitSi has instalado la CLI de GitHub (GitHub CLI) en tu sistema, puedes utilizar su comando gh repo clone para clonar un repositorio de GitHub. Ejecuta el siguiente comando:
gh repo clone Leonel-H29/PragmaSOFT-TechnicalTestSi el repositorio está alojado en un servicio de alojamiento diferente a GitHub, como GitLab o Bitbucket, deberás utilizar la URL y los comandos específicos proporcionados por ese servicio.
Por defecto, Git clonará el repositorio en un directorio con el mismo nombre que el repositorio. Si deseas clonar en una ubicación específica, puedes agregar el nombre del directorio como último argumento en el comando. Por ejemplo:
git clone https://github.com/Leonel-H29/PragmaSOFT-TechnicalTest.git directorio-destinoEstas son algunas de las formas más comunes de clonar un repositorio, dependiendo del servicio de alojamiento y las preferencias de autenticación. Elige el método que mejor se adapte a tu caso y comienza a trabajar con el repositorio en tu entorno local.
- Navega al directorio
server/. - Crea un archivo
prod.envcon la configuración necesaria:
Variables de entorno de la base de datos Postgres:
DB_NAME: Nombre de la base de datos utilizada por el proyecto.DB_USER: Nombre de usuario para acceder a la base de datos.DB_PASSWORD: Contraseña del usuario de la base de datos.DB_HOST: Dirección o nombre de host de la base de datos.DB_PORT: Puerto en el que se ejecuta la base de datos.
Variables de entorno de la aplicación Django:
SECRET_KEY: Clave secreta utilizada por Django para la generación de tokens y la protección de datos sensibles.
Variables de entorno de la API REST:
API_HOST: Host o dirección de la API REST.API_PORT: Puerto en el que se ejecuta la API REST.
Variables de entorno para PgAdmin:
PGADMIN_DEFAULT_EMAIL: Correo electrónico del usuario administrador de PgAdmin.PGADMIN_DEFAULT_USERNAME: Nombre de usuario del usuario administrador de PgAdmin.PGADMIN_DEFAULT_PASSWORD: Contraseña del usuario administrador de PgAdmin.
- Ejecuta los siguientes comandos:
docker-compose -f "docker-compose.yml" up -d --build- Comprobar que los contenedores esten corriendo con el siguiente comando
docker psEjemplo de resultado
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
565ca9da5f3d nginx:1.0 "/docker-entrypoint.…" 8 seconds ago Up 7 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx
40465aac4c19 dpage/pgadmin4 "/entrypoint.sh" 8 seconds ago Up 7 seconds 443/tcp, 0.0.0.0:5050->80/tcp, :::5050->80/tcp pg_admin
3f14dad1a9f9 backend:1.0 "sh ./scripts-sh/doc…" 8 seconds ago Up 7 seconds 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp backend_pragma
638138f290fe postgres:13.3-alpine "docker-entrypoint.s…" 8 seconds ago Up 8 seconds 0.0.0.0:5430->5432/tcp, :::5430->5432/tcp db_postgres
- Si los contenedores se han levantado correctamente, puede dirigirse a
http://localhost/api/: Para ingresar a la interfaz grafica de la API de Django Rest Framework
http://localhost/pgadmin4/: Para ingresar al administrador de base de datos de Postgres
| URI | METHOD | DESCRIPCION | TOKEN REQUIRED |
|---|---|---|---|
| /api/login | POST | Inicio de sesion | NO |
| /api/series/ | GET | Obtener la lista de las series | SI |
| /api/series/id | GET | Obtener una serie por su id | SI |
| /api/series/ | POST | Dar de alta a una nueva serie | SI |
| /api/series/id/ | PUT | Actualizar a una serie existente | SI |
| /api/series/id | DELETE | Eliminar una serie existente | SI |
- URL:
http://localhost:8000/api/login/ - Método:
POST - Ejemplo de Cuerpo de la Petición:
{
"host": "database",
"port": 5432,
"database_name": "postgres",
"user": "postgres",
"password": "postgres"
}- Ejemplo de Cuerpo de la Respuesta:
[
{
"token": "iUzGcBEnovH9tMX1q4CvepIjBK07qQ9gl0KqtAR9",
"user": "a942b37ccfaf5a813b1432caa209a43b9d144e47ad0de1549c289c253e556cd5",
"database": "a942b37ccfaf5a813b1432caa209a43b9d144e47ad0de1549c289c253e556cd5"
}
]Con el valor del token el usuario podra autenticarse y realizar cualquier operacion. Hay que tener en cuenta que el valor del token puede modificarse por cada consulta que se le haga al servidor.
- URL:
http://localhost:8000/api/series/ - Método:
GET - Autenticacion:
Token <token> - Ejemplo de Respuesta:
[
{
"id": 1,
"titulo": "Ejemplo de Serie 1",
"descripcion": "Descripción de la serie 1",
"fecha_estreno": "2023-10-18",
"estrellas": 4,
"genero": "Accion",
"precio_alquiler": 5.99,
"atp": true,
"estado": "AC"
},
{
"id": 2,
"titulo": "Ejemplo de Serie 2",
"descripcion": "Descripción de la serie 2",
"fecha_estreno": "2023-10-20",
"estrellas": 5,
"genero": "Comedia",
"precio_alquiler": 7.99,
"atp": false,
"estado": "AC"
}
]- URL:
http://localhost:8000/api/series/ - Método:
POST - Autenticacion:
Token <token> - Ejemplo de Cuerpo de la Petición:
{
"titulo": "Nueva Serie",
"descripcion": "Descripción de la nueva serie",
"fecha_estreno": "2023-11-01",
"estrellas": 4,
"genero": "Drama",
"precio_alquiler": 6.99,
"atp": true,
"estado": "AC"
}- URL:
http://localhost:8000/api/series/<ID_SERIE> - Método:
PUT - Autenticacion:
Token <token> - Ejemplo de Cuerpo de la Petición:
{
"titulo": "Serie Actualizada",
"descripcion": "Nueva descripción de la serie",
"fecha_estreno": "2023-11-02",
"estrellas": 5,
"genero": "Fantasia",
"precio_alquiler": 8.99,
"atp": false,
"estado": "AN"
}- URL:
http://localhost:8000/api/series/<ID_SERIE> - Método:
DELETE - Autenticacion:
Token <token>
- Navega al directorio
client/ - Ejecuta el siguiente comando para instalar las dependencias
npm install- Inicia la aplicación con:
ng serveEl frontend estará disponible en http://localhost:4200/. Luego debera dirigirse a login/
El usuario debe ingresar los datos configurados en:
DB_NAMEDB_USERDB_PASSWORDDB_HOSTDB_PORT
Si los datos son correctos la aplicacion lo redirigira a admin/ en el cual se mostrara el panel de administracion de la base de datos de series
Operaciones
- Dar de alta a una serie
- Dar de editar a una serie
- Anular a una serie
Implica modificar el estado de 'AC' (Activo) a 'AN' (Inactivo)
- Eliminar a una serie
- Busqueda de registros
Cuando el usuario hace click sobre el boton de buscar le debera aparecer un input que le permita filtrar en tiempo real al registro. Los filtros pueden realizarse por los siguientes campos:
- Titulo
- Descripcion
- Genero
- Precio de Alquiler
- Estado
- El usuario cuando inicia sesion se almacenan los datos del token, el nombre del usuario y el nombre de la base de datos dentro del navegador lo que permitiria certificar que el usuario esta logueado. Cuando el usuario cierra la sesion esos datos son borrados.
- Para la modificacion, anulacion y eliminacion es necesario: tener al menos un registro en la tabla y seleccionar un solo registro de la tabla.
- Para la carga y modificacion todos los inputs son requeridos.
- Una vez que el registro sea anulado no se puede modificar o rebocar su anulacion.










