/* API data model */ /* USER */ interface User { id: number; nit: number; username: string; first_name: string; last_name: string; email: string; password: string; photo: string; // OPIONAL: si consideran que puede ser útil role: string; // o puede ser una tabla de roles permissions: string[]; created_at: Date; // OPCIONAL: en algún punto puede ser útil para gestón updated_at: Date; // OPCIONAL: en algún punto puede ser útil para gestón last_login: Date; // OPCIONAL: en algún punto puede ser útil para gestón } interface Interviewed { id: number; nit: number; first_name: string; last_name: string; email: string; birth_date: Date; city: City; } interface Creator { id: number; user: User; created_at: Date; } /* CITY */ interface City { id: number; name: string; description: string; } /* SURVEY */ interface Survey { id: number; // Pienso que puede ser mejor idea usar de id algo como "N&SDJNJ&20Ur%&&wdDWEFDS", para no acceder tan fácil a la url title: string; description: string; image: string; creators: Creator[]; questions: Question[]; answers: Answer[]; created_at: Date; updated_at: Date; } interface QuestionType { id:number; name:string; } interface Question { id: number; question: string; type: number; is_obligatory: boolean; // Dudo que sea necesario, teniendo en cuenta que todas las respuestas son editables options: string[]; other_option: boolean; // Define si el que responder puede sugerir una respuesta } interface AnswerPerson { id_question: number; answers_person: any[]; } interface Answer { creators: Creator[]; interviewed: Interviewed; // IMPORTANTE: Si esto es muy importante de definir. // 1. Si se hace como una variable aparte, tocaría // colocar una pregunta fija para todas las encuestas, que tome todos los datos del encuestado, // y permitiria buscar y filtrar por datos de encuestado // 2. Si esa pregunta no es fija para todas las, tocaría dejar que el que cree // la encuesta agrege la pregunta de datos de encuestado a su gusto, // sin embargo, si se hace así, no se podría ni buscar ni filtrar por encuestado answer_person: AnswerPerson[]; state: State; created_at: Date; updated_at: Date; } interface State { id: number; name: string; // Completado; En proceso; No responde; pendiente; description: string; }