# [Proyecto final] Web salud mental.
:::info
:bulb: El proyecto estará basado en una Web relacionada con el tema de salud mental, adicciones y la gestion de ellas.
:::
## :+1: Sobre el proyecto:
:::success
Tecnologías planificadas de uso en el proyecto:
:::
### :small_blue_diamond: Front: React / Redux, Sass, TypeScript.
### :small_blue_diamond: Back: MongoDB, NodeJS, TypeScript, Express, mongoose.
### :small_blue_diamond: Testing: Jest.
## 🤔 Objecciones.
### 1. ¿Como funcionará la web?
La principial idea es que el usuario pueda asignar ciertas adicciones o condiciones mentales a la hora de registrarse, y que durante el día pueda ir "asignando" ciertos valores que por la noche le permitan hacer un computo global de ese día, y también compararlo con otros.
### 2. ¿Como podrás saber cuanto tiempo llevas sin consumir o relativo?
Se tratará de un simple contador de tiempo desde el momento en el que lo activas, que según pase el tiempo y llegue a ciertos valores de tiempo te proporcionen algún tipo de "recompensa" o felicitación.
## :100: Objetivos
### :small_blue_diamond: Semana 1: Backend & 100% testing, conexión con MongoDB y funcionamiento.
### :small_blue_diamond: Semana 2: Frontend, hacer el sistema Redux completo con llamadas a nuestro Back, con su respectivo testing.
### :small_blue_diamond: Semana 3: Finalización del proyecto, finalización de detalles, y tratar de implementar Cypress al testing ya hecho durante las semanas anteriores.
## 🗡: Modelos
### :small_blue_diamond: User:
* Age: number,
* Name: string,
* profilePic?: string,
* NickName: string | number,
* timeWithout: date,
* Addictions?: Adiction[],
* Conditions?: Condition[],
* mood: States[]
### :small_blue_diamond: Adiction:
* actualThing: string,
* Cause?: string,
* TimeConsuming: date,
### :small_blue_diamond: Condition:
* actualCondition: string,
* Cause?: string,
* psychoHelp: boolean,
### :small_blue_diamond: States:
* States = "Happy" | "Sad" | "Angry" | "Excited" | "Calm"
## 🪕: Listado de responsabilidades:
:small_blue_diamond: Componente NavBar:
Lo que renderiza: una barra de navegación con enlaces a diferentes páginas y a la información de la cuenta del usuario.
Cómo interactúa con el usuario: el usuario puede hacer clic en los enlaces para navegar a diferentes páginas.
Lo que recibe: no se necesitan props o contexto.
:small_blue_diamond: Componente LoginForm:
Lo que renderiza: un formulario de inicio de sesión para que el usuario ingrese sus credenciales.
Cómo interactúa con el usuario: el usuario puede ingresar su nombre de usuario y contraseña y hacer clic en el botón "Iniciar sesión" para enviar sus credenciales.
Lo que recibe: un objeto "auth" del store de Redux, que contiene información de autenticación del usuario, como su estado de inicio de sesión y su token de acceso.
:small_blue_diamond: Componente SignUp:
Lo que renderiza: un formulario de registro para que el usuario cree una cuenta.
Cómo interactúa con el usuario: el usuario puede ingresar su nombre, correo electrónico, nombre de usuario y contraseña y hacer clic en el botón "Registrarse" para enviar su información.
Lo que recibe: un objeto "auth" del store de Redux, que contiene información de autenticación del usuario, como su estado de inicio de sesión y su token de acceso.
:small_blue_diamond: Componente Dashboard:
Lo que renderiza: una página principal donde el usuario puede ver un resumen de su actividad diaria, incluyendo sus adicciones, estados de ánimo y condiciones.
Cómo interactúa con el usuario: el usuario puede hacer clic en diferentes elementos de la página para ver más detalles y estadísticas sobre su actividad diaria.
Lo que recibe: la información de la cuenta del usuario para mostrar su actividad diaria.
:small_blue_diamond: Componente AddictionDetails:
Lo que renderiza: una página que muestra detalles y estadísticas sobre una adicción específica del usuario.
Cómo interactúa con el usuario: el usuario puede ver gráficos y estadísticas sobre su consumo de la adicción seleccionada.
Lo que recibe: la información de la adicción seleccionada para mostrar detalles y estadísticas.
:small_blue_diamond: Componente ConditionDetails:
Lo que renderiza: una página que muestra detalles y estadísticas sobre una condición mental específica del usuario.
Cómo interactúa con el usuario: el usuario puede ver gráficos y estadísticas sobre la condición mental seleccionada.
Lo que recibe: la información de la condición mental seleccionada para mostrar detalles y estadísticas.
:small_blue_diamond: Componente HomePage:
Lo que renderiza: la página principal con información general sobre el proyecto y posibles opciones para el usuario.
Cómo interactúa con el usuario: el usuario puede añadir distintas adicciones, estados mentales y elegir su estado de animo actual.
Lo que recibe: no se necesitan props o contexto.
:small_blue_diamond: Componente Profile:
Lo que renderiza: la página de perfil del usuario con información sobre su cuenta y opciones para editarla.
Cómo interactúa con el usuario: el usuario puede editar su información de perfil y guardar los cambios.
Lo que recibe: información del usuario actual, como su nombre, imagen de perfil, etc.
:small_blue_diamond: Componente ConditionForm:
Lo que renderiza: un formulario para que el usuario pueda agregar una nueva condición a su lista de condiciones.
Cómo interactúa con el usuario: el usuario puede escribir el nombre de la condición y hacer clic en el botón "Agregar" para agregarla a la lista.
Lo que recibe: una función de callback para agregar la nueva condición a la lista.
:small_blue_diamond: Componente AddictionForm:
Lo que renderiza: un formulario para que el usuario pueda agregar una nueva adicción a su lista de adicciones.
Cómo interactúa con el usuario: el usuario puede escribir el nombre de la adicción y hacer clic en el botón "Agregar" para agregarla a la lista.
Lo que recibe: una función de callback para agregar la nueva adicción a la lista.
## 🦔Endpoints:
:small_blue_diamond:Endpoints Adicciones:
Listar todas las adicciones: GET -> /addictions
Obtener detalles de una adicción: GET -> /addictions/:id
Crear una nueva adicción: POST -> /addictions
Actualizar información de una adicción: PATCH -> /addictions/:id
Eliminar una adicción: DELETE -> /addictions/:id
:small_blue_diamond:Endpoints de Condiciones mentales:
Listar todos los estados mentales: GET -> /states
Obtener detalles de un estado mental: GET -> /states/:id
Crear un nuevo estado mental: POST -> /states
Actualizar información de un estado mental: PATCH -> /states/:id
Eliminar un estado mental: DELETE -> /states/:id
:small_blue_diamond:Endpoints de Usuarios:
Listar todos los usuarios: GET -> /users
Obtener detalles de un usuario: GET -> /users/:id
Crear un nuevo usuario: POST -> /users/register
Iniciar sesion como usuario: POST -> /users/login
Actualizar información de un usuario: PATCH -> /users/:id
Eliminar un usuario: DELETE -> /users/:id