# Models Esta sección del servicio se compone de archivos dentro del directorio `/src/models`, cada uno asociado a la ruta que lleva su nombre. Si por ejemplo queremos definir el modelo de `User` que internamente tiene los métodos `getAll` y `update`, el archivo debería llamarse `user.ts`. Cada modelo debe estar asociado a una tabla de la base de datos. ### Importaciones Primero, se debe importar el `pool` de la base de datos, el cual debería ya existir en la carpeta `src/util` con el nombre de archivo `database.ts` ```typescript import pool from "../utils/database"; ``` Finalmente hay importar las queries que se ejecutarán por cada método, estas deben en la carpeta `src/queries` y en este caso (ejemplo User), con el nombre de archivo `user.ts` ```typescript import { _getAll, _getById, _upsert, _deleteById } from "../queries/user"; ``` ### Estructura de los métodos Como los métodos interactúan directamente con la base de datos, deben ser nombrados por la acción que realizan, puntualmente: - `getAll` trae todos los registros - `getById` trae el registro que coincide con el `id` - `updateById` modifica el registro que coincide con el `id` - `upsert` crea un nuevo registro o lo modifica si existe - `deleteById` elimina el registro que coincide con el `id` Obviamente, pueden existir otros métodos que pueden realizar labores más específicas, pero la forma de nombrarlos debe ser semántica, por ejemplo `getByCustomerId` (trae todos los registros cuyo `customer_id` sea el que se indica como parámetro) Deben especificarse el tipo de dato de salida y deben ser asíncronos, para el ejemplo: ```typescript const getAll = async (): Promise<void> ``` ### Exportación Finalmente se deben exportar los métodos: ```typescript= // src/models/post.ts import pool from "../utils/database"; import { _getAll, _getById, _upsert, _deleteById } from "../queries/post"; import { Post } from "../interfaces/post"; const getAll = async (): Promise<Post[]> => { const resultPosts = await pool.query(_getAll); return resultPosts.rows; }; const getById = async (id: string): Promise<Post | null> => { const resultPost = await pool.query(_getById, [id]); return resultPost.rowCount && resultPost.rowCount > 0 ? (resultPost.rows[0] as unknown as Post) : null; }; const upsert = async ( user_id: number, message: string, image: string ): Promise<Post | null> => { const resultPost = await pool.query(_upsert, [user_id, message, image]); return resultPost.rowCount && resultPost.rowCount > 0 ? (resultPost.rows[0] as unknown as Post) : null; }; const deleteById = async (id: string): Promise<Post | null> => { const resultPost = await pool.query(_deleteById, [id]); return resultPost.rowCount && resultPost.rowCount > 0 ? (resultPost.rows[0] as unknown as Post) : null; }; export { getAll, getById, upsert, deleteById }; ``` Ver los siguientes documentos: - [**Creación de servicio BackEnd**](https://hackmd.io/@mGoZaVHZQTWgwFlq-J3U0w/B1eLiECDa)<br> - [**Routes**](https://hackmd.io/@mGoZaVHZQTWgwFlq-J3U0w/B1zN9PAPp)<br> - [**Controllers**](https://hackmd.io/@mGoZaVHZQTWgwFlq-J3U0w/SyFI9PAvT)<br> - [**Queries**](https://hackmd.io/@mGoZaVHZQTWgwFlq-J3U0w/B1KJswCv6)<br> - [**Schemas**](https://hackmd.io/@mGoZaVHZQTWgwFlq-J3U0w/Syhv28zk0)<br>