Construye una aplicación full stack de JavaScript que sea funcionalmente similar a esta: <https://issue-tracker.freecodecamp.rocks/>. Trabajar en este proyecto implicará escribir tu código utilizando uno de los siguientes métodos:
Cuando hayas terminado, asegúrate de que una demostración funcional de tu proyecto esté alojado en algún lugar público. Luego, envía la URL en el campo `Solution Link`. Opcionalmente, también envía un enlace al código fuente de tu proyecto en el campo `GitHub Link`.
- Completa las rutas necesarias en `/routes/api.js`
- Crea todas las siguientes pruebas funcionales en `tests/2_functional-tests.js`
- Copia el archivo `sample.env` a `.env` y establece las variables apropiadamente
- Para ejecutar las pruebas, descomenta `NODE_ENV=test` en tu archivo `.env`
- Para ejecutar las pruebas en la consola, usa el comando `npm run test`. Para abrir la consola de Replit presiona Ctrl+Shift+P (Cmd si estas en Mac) y escribe "open shell"
Escribe las siguientes pruebas en `tests/2_functional-tests.js`:
- Crear un problema con cada campo: solicitud POST a `/api/issues/{project}`
- Crear un problema con sólo los campos requeridos: solicitud POST a `/api/issues/{project}`
- Crear un problema con los campos requeridos faltantes: solicitud POST a `/api/issues/{project}`
- Ver problemas en un proyecto: Solicitud GET a `/api/issues/{project}`
- Ver problemas en un proyecto con un filtro: Solicitud GET a `/api/issues/{project}`
- Ver problemas en un proyecto con múltiples filtros: Solicitud GET a `/api/issues/{project}`
- Actualizar un campo en un problema: Solicitud PUT a `/api/issues/{project}`
- Actualizar varios campos en un problema: Solicitud PUT a `/api/issues/{project}`
- Actualizar un problema con `_id`faltante: solicitud PUT a `/api/issues/{project}`
- Actualizar un problema sin campos para actualizar: solicitud PUT a `/api/issues/{project}`
- Actualizar un problema con un `_id` inválido: Solicitud PUT a `/api/issues/{project}`
- Eliminar un problema: solicitud DELETE a `/api/issues/{project}`
- Eliminar un problema con un `_id` inválido: solicitud DELETE a `/api/issues/{project}`
- Eliminar un problema con `_id` faltante: solicitud DELETE a `/api/issues/{project}`
Puedes enviar una solicitud `POST` a `/api/issues/{projectname}` con datos de formulario que contienen los campos obligatorios `issue_title`, `issue_text`, `created_by`, y opcionalmente `assigned_to` y `status_text`.
La solicitud `POST` a `/api/issues/{projectname}` devolverá el objeto creado y debe incluir todos los campos enviados. Los campos opcionales excluidos serán devueltos como cadenas vacías. Además, incluye `created_on` (fecha/hora), `updated_on` (fecha/hora), `open` (booleano, `true` para abrir - valor predeterminado, `false` para cerrar), y `_id`.
Puedes enviar una solicitud `GET` a `/api/issues/{projectname}` para un arreglo de todos los incidentes para ese `projectname`, con todos los campos presentes para cada incidente.
Puedes enviar una solicitud `GET` a `/api/issues/{projectname}` y filtrar la solicitud también, pasando por cualquier campo y valor como una consulta de URL (por ejemplo, `/api/issues/{project}?open=false`). Puedes pasar uno o más pares de campo/valor a la vez.
Puedes enviar una solicitud `PUT` a `/api/issues/{projectname}` con un `_id` y uno o más campos para actualizar. En caso de éxito, el campo `updated_on` debe actualizarse, y debe ser devuelto `{ result:'successfully updated', '_id':_id }`.
Cuando la solicitud `PUT` enviada a `/api/issues/{projectname}` no incluya los campos para actualizar, el valor devuelto es `{ error:'no update field(s) sent', '_id':_id }`. En cualquier otro error, el valor devuelto es `{ error:'could not update', '_id':_id }`.
Puede enviar una solicitud `DELETE` a `/api/issues/{projectname}` con un `_id` para eliminar un problema. Si ningún `_id` es enviado, el valor devuelto es `{ error:'missing _id' }`. En caso de éxito, el valor devuelto es `{ result:'successfully deleted', '_id':_id }`. En caso de fallo, el valor devuelto es `{ error:'could not delete', '_id':_id }`.