Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • T taskee_wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Taskee
  • taskee_wiki
  • Wiki
  • Banco de Dados

Last edited by Lucas Aquino Brentano Sep 13, 2025
Page history
This is an old version of this page. You can view the most recent version or browse the history.

Banco de Dados

Visão Geral

O projeto utiliza Cloud Firestore, um banco de dados NoSQL do Firebase, para gerenciar eventos interativos. O banco de dados foi projetado para acesso em tempo real, alta escalabilidade e performance de leitura, utilizando referências e denormalização planejada. O sistema é estruturado em torno das coleções centrais users (os participantes) e events (os contêineres principais da experiência).

Para gerenciar as interações, a plataforma utiliza outras coleções:

  • activities: Agenda detalhada do evento, como palestras e workshops.
  • tasks: Desafios gamificados para engajar o público.
  • user_event: Gerencia as inscrições dos participantes e consolida a pontuação final.
  • user_task: Registra em detalhes as submissões de tarefas, incluindo as respostas dos usuários e os resultados das validações.

A arquitetura da plataforma é construída sobre o ecossistema Google Firebase, utilizando serviços como Cloud Firestore, Firebase Authentication, Cloud Storage e Firebase Realtime Database.


Tecnologias

A arquitetura da plataforma é construída sobre o ecossistema Google Firebase, utilizando os seguintes serviços:

  • Google Firebase: Uma plataforma de desenvolvimento de aplicativos que oferece um conjunto de serviços para ajudar na criação de aplicativos web e mobile. A plataforma inclui diversas ferramentas que facilitam o desenvolvimento, o gerenciamento e a escalabilidade de aplicações.
  • Cloud Firestore: Um banco de dados NoSQL, flexível e escalável, para armazenar e sincronizar dados de aplicativos em tempo real.
  • Firebase Authentication: Um serviço completo para autenticar e gerenciar usuários de forma segura, com suporte a login por e-mail, redes sociais e outros métodos.
  • Cloud Storage for Firebase: Oferece armazenamento de objetos, como imagens, áudio e vídeo, de forma segura, robusta e escalável, ideal para conteúdo gerado pelo usuário.
  • Firebase Realtime Database: Um banco de dados NoSQL que armazena e sincroniza dados em tempo real, permitindo que os clientes acessem a informação mais atualizada em milissegundos.

Coleções e Campos

users

Armazena os dados de perfil de cada indivíduo cadastrado na plataforma. É a coleção fundamental que gerencia a identidade e as permissões dos usuários, como se são administradores ou usuários comuns.

Campo Tipo Restrições Descrição Exemplo
id String Obrigatório. Identificador único do documento na coleção users, gerado automaticamente pelo Firestore. aG8jL2xRkM4nB7oP3jL5
firebase uid String Obrigatório. ID de autenticação do usuário, gerado pelo Firebase Auth. Usado para vincular o login aos dados do usuário. 4f2bT8aG9qN3x5H7s2
name String Obrigatório. Nome completo do usuário. Juca da Silva
email String Obrigatório. Validador de formato. E-mail do usuário. [email protected]
birth date Timestamp Opcional. Data de nascimento do usuário. October 20, 1995 at 12:00:00 AM UTC-3
field String Opcional. Área de atuação profissional do usuário. Engenharia de Software
phone_number String Obrigatório. Validador de formato. Número de telefone do usuário. +5551999998888
city String Obrigatório. Cidade de residência do usuário. Porto Alegre
state String Obrigatório. Estado de residência do usuário. Rio Grande do Sul
country String Obrigatório. País de residência do usuário. Brasil
gender String Opcional. Valores Permitidos: male, female, non_binary, other, no_info. Gênero com o qual o usuário se identifica. male
is_active boolean Obrigatório. Valores Permitidos: true, false. Indicador se o usuário está ativo ou inativo no sistema (soft delete). true
is_admin boolean Obrigatório. Valores Permitidos: true, false. Indicador se o usuário é administrador do sistema. true
created_at Timestamp Obrigatório. Data e hora de criação do registro. August 19, 2025 at 4:13:40 AM UTC-3
updated_at Timestamp Obrigatório. Data e hora da última atualização do registro. August 19, 2025 at 4:13:40 AM UTC-3

events

Define os eventos principais. Cada documento é um evento único (ex: congresso, feira, simpósio) que serve como um contêiner para todas as atividades e tarefas relacionadas a ele. Controla informações macro como datas, título e o status geral do evento.

Campo Tipo Restrições Descrição Exemplo
id String Obrigatório. Identificador único do documento na coleção events, gerado automaticamente pelo Firestore. kM4nB7oP3jL5aG8jL2xR
title String Obrigatório. Título principal do evento. Semana da Inovação 2025
description String Obrigatório. Descrição completa do evento. Um evento focado nas últimas tendências de IA e desenvolvimento de software...
access_code String Obrigatório. Deve conter 5 caracteres. Código alfanumérico para o usuário se inscrever no evento. 1A5VP
field String Obrigatório. Área de conhecimento ou setor principal ao qual o evento pertence. Tecnologia da Informação
start_date Timestamp Obrigatório. Data e hora exatas de início do evento. November 10, 2025 at 9:00:00 AM UTC-3
end_date Timestamp Obrigatório. Data e hora exatas de término do evento. November 12, 2025 at 6:00:00 PM UTC-3
type String Obrigatório. Tipo de evento, usado para classificar sua natureza e formato. Feira
status String Obrigatório. Valores Permitidos: draft, published, ongoing, ended, canceled. Status atual do ciclo de vida do evento. ongoing
is_active boolean Obrigatório. Valores Permitidos: true, false. Indicador para exclusão lógica (soft delete). True
customization Map Obrigatório. Objeto (Map) contendo as personalizações visuais da página do evento. { "primary_color": "#3A10E5", "banner_url": "https://.../banner.png"}
tasks Array Opcional. Array de objects tasks embarcados como sub coleção. Representa as tarefas associadas a este evento. { "taskld01", "taskld02"}
activities Array Opcional. Array de objects activities embarcados como sub coleção. Representa as atividades associadas a este evento. { "activityld01", "activityld02"}
created_at Timestamp Obrigatório. Data e hora de criação do registro. August 19, 2025 at 4:38:20 AM UTC-3
updated_at Timestamp Obrigatório. Data e hora da última atualização do registro. August 19, 2025 at 4:38:20 AM UTC-3

events.customization

Este objeto funciona como um painel de controle para a identidade visual de um evento, permitindo a personalização de cores, fontes e imagens para criar uma experiência única para os participantes.

Campo Tipo Restrições Descrição Exemplo
primary_color String Obrigatório. Formato HEX. Cor primária usada nos elementos visuais do evento. #3A10E5
secondary_color String Obrigatório. Formato HEX. Cor secundária usada nos elementos visuais do evento. #FFFFFF
tertiary_color String Obrigatório. Formato HEX. Cor terciária usada nos elementos visuais do evento. #000000
font String Obrigatório. Família de fonte a ser utilizada na página do evento. Roboto
banner_url String Obrigatório. URL do banner do evento. https//.../banner.png:

events.tasks

Contém o catálogo de todas as tarefas interativas que os usuários podem realizar. Cada sub documento define uma tarefa, seja ela um quiz, uma question ou um challenge.

Campo Tipo Restrições Descrição Exemplo
id String Obrigatório. Identificador único do sub documento da tarefa na coleção events. bH9kL2xRkM4nB7oP3jL5
is_active boolean Obrigatório. Valores Permitidos: true, false. Indicador para definir se a task está disponível para o usuário. True
number number Obrigatório para normal_task em task_category. Número que define a ordem de execução da tarefa. 1
score number Obrigatório. Pontuação máxima que o usuário pode obter ao completar a tarefa. 100
description String Obrigatório. Instrução ou descrição da tarefa. Responda ao quiz sobre a palestra de abertura.
title String Obrigatório. Título curto da tarefa. Quiz: Palestra de Abertura
status String Obrigatório. Valores Permitidos: upcoming, underway, ended. Status da tarefa, que pode controlar se ela está visível ou aceitando respostas. underaway
task_type String Obrigatório. Valores Permitidos: quiz, question, challenge. Tipo de tarefa, para diferenciar lógicas de negócio. quiz
task_category String Obrigatório. Valores Permitidos: normal, lightining. Categoria de tarefa para definir o comportamento. Normal
questions Array Obrigatório para quiz e question em task_type. Array de objetos (Map), onde cada objeto representa uma pergunta da tarefa. [ { "question_type": "multiple_choice", ...}]
created_at Timestamp Obrigatório. Data e hora de criação da tarefa. August 19, 2025
updated_at Timestamp Obrigatório. Data e hora da última atualização. August 19, 2025

events.tasks.questions

Objeto aninhado que define a estrutura de uma pergunta.

Campo Tipo Restrições Descrição Exemplo
question_type String Obrigatório. Valores Permitidos: multiple_choice, single_choice, text_input. Formato da pergunta, para renderizar o componente correto na interface. multiple_choice
text String Obrigatório. Texto da pergunta que será exibido ao usuário. Qual foi o tema principal da palestra de abertura?
options Array Obrigatório para question_type do tipo choice. Array de objetos (Map), onde cada objeto representa uma opção de resposta. ({"text": "Letra A: ...", "is_correct": true}, ...]

events.tasks.questions.options

Objeto aninhado que representa uma opção de resposta.

Campo Tipo Restrições Descrição Exemplo
id number Obrigatório. Identificador único da opção. 1
text String Obrigatório. O texto da opção de resposta. Letra A: IA
is_correct boolean Obrigatório. Valores Permitidos: true, false. Indica se a opção é a resposta correta ou não. True

events.activities

Representa a agenda ou a programação de um evento. Cada documento é uma atividade específica e agendada.

Campo Tipo Restrições Descrição Exemplo
id String Obrigatório. Identificador único do sub documento da atividade na coleção event. cH1jL2xRkM4nB7oP3jL5
title String Obrigatório. Título da atividade. Coffee Break da Manhã
start_at Timestamp Obrigatório. Data e hora exatas de início da atividade. November 10, 2025 at 10:00:00 AM UTC-3
end_at Timestamp Obrigatório. Data e hora exatas de término da atividade. November 10, 2025 at 11:00:00 AM UTC-3
description String Obrigatório. Resumo ou sinopse da atividade. Uma pausa para recarregar as energias. Serão servidos café, chás, sucos, água, mini sanduíches, pães de queijo e uma seleção de bolos e frutas da estação.
type String Obrigatório. Valores Permitidos: meal, other. Categoria da atividade, usada para organização da agenda. meal
image_url String Obrigatório. URL de uma imagem de banner para a atividade. https://.../banner-photo.png
is_active boolean Obrigatório. Valores Permitidos: true, false. Indicador para exclusão lógica (soft delete). True
created_at Timestamp Obrigatório. Data e hora de criação do registro. August 19, 2025 at 4:13:40 AM UTC-3
updated_at Timestamp Obrigatório. Data e hora da última atualização do registro. August 19, 2025 at 4:13:40 AM UTC-3

user_task

É o registro de auditoria de todas as interações. Cada documento representa uma única tentativa que um usuário fez em uma tarefa. Armazena as respostas exatas, o resultado da correção e a pontuação obtida.

Campo Tipo Restrições Descrição Exemplo
id String Obrigatório. Identificador único do documento, formado pela junção de user_id e task_id. 4f2b...s2_bH9k...jL5
user_id String Obrigatório. ID do usuário (da coleção users) que realizou a tarefa. 4f2bT8aG9qN3x5H7s2
task_id String Obrigatório. ID da tarefa (da coleção tasks) que foi realizada. bH9kL2xRkM4nB7oP3jL5
event_id String Obrigatório. ID do evento ao qual esta submissão pertence. Denormalizado da tarefa para facilitar consultas. kM4nB7oP3jL5aG8jL2xR
answers Array Obrigatório. Array de objetos (Map) contendo as respostas enviadas pelo usuário para as perguntas da tarefa. { "question_text": "...", "user_answer": "..."}
is_correct boolean Obrigatório. Valores Permitidos: true, false. Indica se o conjunto de respostas está 100% correto. True
is_validated boolean Obrigatório. Valores Permitidos: true, false. Indica se a submissão foi validada por um administrador. True
score number Obrigatório. Pontuação que o usuário obteve nesta tarefa. 50
created_at Timestamp Obrigatório. Data e hora exatas em que o usuário submeteu a tarefa. August 19, 2025 at 7:22:41 AM UTC-3
updated_at Timestamp Obrigatório. Data e hora da última atualização do registro. August 19, 2025 at 7:22:41 AM UTC-3

user_task.answers

Detalha as respostas de uma submissão de tarefa.

Campo Tipo Restrições Descrição Exemplo
question_text String Obrigatório para quiz e question em task_type. Cópia do texto da pergunta no momento da resposta. Qual foi o tema principal da palestra de abertura?
user_answer String Obrigatório para quiz e question em task_type. Para quiz, armazena o option_id. Para question, armazena o texto livre. "Inteligência Artificial" ou 1
is_correct boolean Obrigatório para quiz em task_type. Valores Permitidos: true, false. Resultado da verificação automática da resposta do quiz. true
submission_type String Obrigatório para challenge em task_type. Valores Permtidos: image, video. Define o tipo de arquivo enviado. image
submission_url String Obrigatório para challenge em task_type. URL do arquivo (imagem ou vídeo) enviado. https://storage.googleapis.com/...

user_event

Funciona como a lista de inscrição oficial, conectando usuários a eventos. Cada documento é a prova de que um usuário está participando de um evento específico. Além disso, serve como um placar consolidado, armazenando o total_score do usuário.

Campo Tipo Restrições Descrição Exemplo
id String Obrigatório. Identificador único, formado pela junção de user_id e event_id. 4f2b... H7s2_kM4n...L2xR
user_id String Obrigatório. ID do usuário (da coleção users) que está participando. 4f2bT8aG9qN3x5H7s2...
event_id String Obrigatório. ID do evento (da coleção events) do qual o usuário está participando. kM4nB7oP3jL5aG8jL2xR
total_score number Obrigatório. Placar final do usuário no evento. Calculado por uma Cloud Function ao final do período de revisão. 150
enrollment_date Timestamp Obrigatório. Data e hora em que o usuário se inscreveu no evento. August 19, 2025 at 8:25:10 AM UTC-3
updated_at Timestamp Obrigatório. Data e hora da última atualização neste registro. August 19, 2025 at 8:28:00 AM UTC-3

Relacionamentos

Relações Principais

  • events (Eventos): Um evento contém subcoleções aninhadas de activities e tasks. Um evento tem muitos users participantes, através da coleção de junção user_event.
  • users (Usuários): Um usuário pode participar de muitos events através da coleção user_event. Um usuário pode submeter muitas tasks através da coleção user_task.

Relações nas Coleções "Filhas"

  • activities (Atividades): É uma subcoleção aninhada dentro de cada documento de evento. Cada activity pertence ao evento pai por meio de sua hierarquia de caminho (/events/{event_id}/activities/{activity_id}).
  • tasks (Tarefas): É uma subcoleção aninhada dentro de cada documento de evento. Cada task pertence ao evento pai por meio de sua hierarquia de caminho (/events/{event_id}/tasks/{task_id}).

Relações nas Coleções de Junção

  • user_event: Conecta um user a um event. Serve como a "inscrição" e o placar geral, contendo o user_id e o event_id.
  • user_task: Conecta um user a uma task. Representa a "submissão", registrando a ação de um usuário em uma tarefa específica. Contém o user_id e o task_id, além de uma cópia do event_id para otimização de consultas.

Convenções de Nomenclatura

Para manter a consistência e a clareza do banco de dados, todas as coleções e campos devem seguir as seguintes convenções de nomenclatura:

  • Coleções: Nomes de coleções devem ser escritos em snake_case (letras minúsculas separadas por underscore) e sempre no plural. Exemplos: users, events, user_tasks.
  • Campos: Nomes de campos devem ser escritos em snake_case. Exemplos: total_score, start_date, access_code.
  • Campos de Identificação (IDs): Campos que armazenam referências (chaves estrangeiras) devem seguir o padrão nome_da_colecao_no_singular_id. Exemplos: user_id, event_id, task_id.
  • Campos Booleanos: Preferencialmente, devem começar com um prefixo como is_, has_ ou can_ para que a leitura se assemelhe a uma pergunta. Exemplos: is_active, is_admin, is_correct.
  • Campos de Data e Hora: Devem terminar com o sufixo _at. Exemplos: created_at, updated_at, start_at.
  • IDs de Documento Compostos: Para coleções de junção, o ID do documento deve ser composto pelos IDs das entidades relacionadas, separados por um underscore (_). Exemplos: user_event (ID: ${user_id}_${event_id}), user_task (ID: ${user_id}_${task_id}).

Clone repository
  • Arquitetura
  • Banco de Dados
  • Home