Appearance
Archivos de la Carpeta interfaces
La carpeta src/interfaces define las estructuras de datos y tipos que se utilizan en toda la aplicación. Estos archivos son fundamentales para la claridad del código, la validación de datos y el desarrollo seguro en TypeScript, ya que establecen contratos claros sobre cómo deben lucir los objetos y qué propiedades deben contener. Al centralizar estas definiciones, se promueve la consistencia y se facilita el mantenimiento.
multer.interface.ts
Este archivo extiende las interfaces predefinidas de Express para incluir tipos específicos necesarios en la aplicación, particularmente para el manejo de archivos.
- Descripción: Contiene la definición de
MulterRequest, una interfaz que extiende la interfazRequestde Express para incorporar la propiedadfilesque es añadida por el middleware Multer cuando se suben archivos. - Propósito: Proporcionar una tipificación precisa para las solicitudes HTTP que incluyen subidas de archivos, permitiendo a TypeScript reconocer la estructura de
req.filesy ofreciendo autocompletado y validación de tipos en tiempo de desarrollo. - Funcionalidad:
MulterRequest: Define la estructura esperada para el objetofiles(tanto para un solo archivo como para múltiples archivos) que Multer adjunta a la solicitud.
- Rol en la aplicación: Mejora significativamente la seguridad y la robustez del código al manejar subidas de archivos. Al tipificar explícitamente
req.files, se evitan errores comunes relacionados con el acceso a propiedades indefinidas y se facilita la comprensión de cómo se espera que lleguen los archivos al servidor.
ts
import { Request } from "express";
export interface MulterRequest extends Request {
files?:
| {
[fieldname: string]: Express.Multer.File[];
}
| Express.Multer.File[];
}
google.service.account.credentials.ts
Este archivo define la estructura de las credenciales necesarias para autenticarse con los servicios de Google, específicamente para una cuenta de servicio.
- Descripción: Proporciona la interfaz
GoogleServiceAccountCredentials, que detalla todas las claves y sus tipos esperados para que una cuenta de servicio de Google pueda autenticarse y acceder a APIs como Google Drive. - Propósito: Establecer un contrato de datos estricto para la configuración de las credenciales de Google, asegurando que todas las propiedades requeridas estén presentes y sean del tipo correcto al cargarlas desde las variables de entorno.
- Funcionalidad:
GoogleServiceAccountCredentials: Lista de forma exhaustiva las propiedades comotype,project_id,private_key,client_email, etc., que son estándar para la autenticación de cuentas de servicio de Google.
- Rol en la aplicación: Es crucial para la integración segura y correcta con Google Drive. Al definir esta interfaz, se garantiza que el módulo de configuración de Google Drive reciba y valide un conjunto completo y coherente de credenciales antes de intentar la autenticación, lo que previene errores en tiempo de ejecución relacionados con credenciales incompletas o mal formadas.
ts
export interface GoogleServiceAccountCredentials {
type: string;
project_id: string;
private_key_id: string;
private_key: string;
client_email: string;
client_id: string;
auth_uri: string;
token_uri: string;
auth_provider_x509_cert_url: string;
client_x509_cert_url: string;
universe_domain: string;
}
student.interface.ts
Este archivo define las interfaces y enumeraciones relacionadas con la estructura de los datos de un estudiante en el sistema.
- Descripción: Contiene varias enumeraciones (
Sex,Source,CommunicationPreference,School,Course) que definen listas de opciones predefinidas, así como la interfaz principalStudent, que describe las propiedades y sus tipos para un registro completo de estudiante, incluyendo datos personales, de contacto, estado de llamadas y enlaces a documentos en Google Drive. - Propósito: Proporcionar una estructura de datos clara y consistente para los objetos de estudiante, lo que facilita la validación, el almacenamiento y la manipulación de la información de los estudiantes en toda la aplicación. Las enumeraciones garantizan la uniformidad de los datos.
- Funcionalidad:
- Enumeraciones: Definen conjuntos finitos de valores para campos específicos (ej., sexo, fuente de contacto, escuela, curso), lo que ayuda a prevenir errores de entrada de datos y a mantener la coherencia.
CallStatus: Una interfaz para tipificar el estado y comentario de una llamada.Student: La interfaz principal que encapsula todos los atributos de un estudiante, incluyendo tipos de datos básicos, opciones a partir de enumeraciones y enlaces a archivos externos (con sus IDs de Google Drive).
- Rol en la aplicación: Es una definición central para la lógica de negocio relacionada con los estudiantes. Asegura que todos los componentes que manejan datos de estudiantes (controladores, servicios, modelos de base de datos) trabajen con el mismo formato, lo que reduce la posibilidad de errores y hace que el código sea más legible y mantenible.
ts
export enum Sex {
Male = "MASCULINO",
Female = "FEMENINO",
Other = "OTROS",
}
export enum Source {
SocialMedia = "REDES SOCIALES",
InPerson = "CAPTADOR",
}
export enum CommunicationPreference {
Whatsapp = "WHATSAPP",
Phone = "TELÉFONO",
}
export enum School {
Quinta = "QUINTA NORMAL",
Buin = "BUÍN",
Granja = "LA GRANJA",
Nunoa = "ÑUÑOA",
Pudahuel = "PUDAHUEL",
Miguel = "SAN MIGUEL",
}
export enum Course {
NB1 = "1° NIVEL BÁSICO",
NB2 = "2° NIVEL BÁSICO",
NB3 = "3° NIVEL BÁSICO",
NM1 = "1° NIVEL MEDIO",
NM2 = "2° NIVEL MEDIO",
}
export interface CallStatus {
completed: boolean;
comment: string | null;
}
type PositiveFeedbackOptions =
| ""
| "AÚN SIN RESPUESTAS"
| "NO SE MATRICULARÁ"
| "INCONTACTABLE"
| "PERSONA INTERESADA QUE ENVIARÁ DOCUMENTACIÓN"
| "PERSONA QUE ENVIÓ DOCUMENTACIÓN PERO LE FALTA FIRMAR SU MATRÍCULA"
| "PERSONA QUE IRÁ A MATRICULARSE DIRECTAMENTE A LA ESCUELA"
| "PERSONA CON DOCUMENTACIÓN Y MATRÍCULA FIRMADA EN ESCUELA"
| "INTERESADA PARA PRÓXIMO AÑO"
| "PERSONA QUE ENVÍA DOCUMENTACIÓN Y SE DEBE TRASLADAR A OTRA PLANILLA";
export interface Student {
id: string; // UUID del estudiante
name: string; // Nombre del estudiante (obligatorio)
lastname: string; // Apellido del estudiante (obligatorio)
rut?: string; // RUT del estudiante (opcional)
sex?: Sex; // Sexo del estudiante (opcional)-
birthdate?: Date; // Fecha de nacimiento (opcional)-
nationality?: string; // Nacionalidad (opcional)
address?: string; // Dirección (opcional)
phone?: string; // Teléfono (opcional)-
email?: string; // Correo electrónico (obligatorio)
source?: Source; // Fuente de contacto (opcional)-
contact?: string; // Cómo se realizó el contacto (opcional)
contactDate?: Date; // Fecha de contacto (opcional)-
call1?: string; // Estado de la llamada 1 (opcional)-
call2?: string; // Estado de la llamada 2 (opcional)-
call3?: string; // Estado de la llamada 3 (opcional)-
comments1?: string;
comments2?: string;
comments3?: string;
positiveFeedback: PositiveFeedbackOptions;
studentImage?: string;
studentImageDriveId?: string | null; // ID en Google Drive
birthCertificate?: string;
birthCertificateDriveId?: string | null; // ID en Google Drive
studyCertificate?: string;
studyCertificateDriveId?: string | null; // ID en Google Drive
linkDni?: string; // Enlace al DNI (opcional)
linkDniDriveId?: string | null; // ID en Google Drive
school?: School; // Colegios
course?: Course; // Cursos
communicationPreference?: CommunicationPreference; // Preferencia de comunicación (opcional)-
createdAt?: Date; // Fecha de creación (opcional)-
}
user.interface.ts
Este archivo define la estructura de los datos para un usuario en el sistema.
- Descripción: Contiene el tipo
allowedRoles, que especifica los roles permitidos para un usuario, y la interfazUser, que describe las propiedades esenciales de un usuario, como su ID, correo electrónico, contraseña y rol. - Propósito: Proporcionar una tipificación clara y obligatoria para los objetos de usuario, asegurando que todos los componentes que manejan usuarios cumplan con un formato predefinido, lo que es vital para la autenticación y autorización.
- Funcionalidad:
allowedRoles: Un tipo de unión que enumera los roles de usuario válidos, garantizando que solo se asignen roles permitidos.User: La interfaz que define las propiedades fundamentales de un usuario, incluyendoid(UUID),email,passwordyrole.
- Rol en la aplicación: Es fundamental para la gestión de la identidad y el control de acceso. Al definir explícitamente la estructura del usuario y sus roles, facilita la implementación de la lógica de autenticación y autorización, permitiendo a la aplicación determinar quién es un usuario y qué acciones puede realizar.
ts
export type allowedRoles = "admin" | "catcher" | "editor" | "visit";
export interface User {
id: string;
email: string;
password: string;
role: allowedRoles;
}