Newer
Older
surveyApi / model.ts
/*
  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;
}