Esta aplicação foi desenvolvida para gerenciar inscrições em eventos, conectando participantes com interesses em comum. A ideia principal é oferecer funcionalidades que permitam a organização de eventos para os participantes, a interação entre eles e a compra de ingressos.
- Lista de eventos publicados com data a partir do dia atual.
- Exibição de detalhes como:
- Descrição completa.
- Nome do organizador.
- Agenda do evento.
- Valor do ingresso.
- Botão para compra de ingresso (se disponível) ou mensagem de esgotado.
- Cadastro de novos usuários com nome, sobrenome, cpf, e-mail e senha.
- Possibilidade de completar o perfil com:
- Links para redes sociais.
- Cidade, estado e telefone.
- Salvar eventos como favoritos.
- Visualizar lista de ingressos adquiridos.
- Visulizar lista de feedbacks feitos.
- Escolha de ingressos disponíveis na página de detalhes do evento.
- Compra com status temporário de “ingresso confirmado”.
- Exibição de ingressos comprados na seção "Meus ingressos".
- Cada ingresso confirmado possui:
- Token único de 36 caracteres alfanuméricos.
- QR Code gerado para controle de acesso.
- Registro de utilização do ingresso:
- Apenas uma vez por dia configurado no evento.
- Solicitação de lembrete para eventos futuros sem ingressos disponíveis.
- Envio de e-mail no dia da abertura de vendas de ingressos.
- Feed para postagens entre participantes com ingresso confirmado.
- Recursos do feed:
- Suporte a texto enriquecido.
- Upload de imagens.
- Curtidas e comentários.
- Resumo das últimas 10 postagens na página inicial do usuário.
- Comunicados oficiais destacados, sem curtidas ou comentários.
- Feedbacks feitos pelos usuários que participaram do evento.
- Após o evento, usuários podem fornecer feedback:
- Feedback geral ou específico por item da agenda.
- Público ou anônimo.
- Feedbacks públicos aparecem no feed do evento.
- Palestrantes do evento podem responder feedbacks.
- Organizadores têm acesso a todos os feedbacks.
-
Setup:
- Ruby 3.3.2+
- Rails 8.0.1+
- SQLite
-
Gems:
Para construir o projeto, siga estas etapas:
# Abra o terminal (Prompt de comando ou PowerShell para Windows, Terminal para macOS ou Linux)
# Clone este repositório:
git clone https://github.com/TreinaDev/participants-app.git
# Navegue para a pasta do projeto:
cd participants-app
# Instale as dependências:
bundle install
# Crie e migre o banco de dados:
rails db:create
rails db:migrate
# Também é possível rodar as seeds para popular o banco com dados iniciais:
rails db:seed
# Pré-compile os assets estáticos para melhorar visualização do css
rails assets:precompile
# Execute o servidor:
bin/dev
Acesse a aplicação:
Abra seu navegador e acesse http://localhost:3000
para ver o participants-app em funcionamento.
Login no Sistema: Para se logar com o usuário criado pelas seeds, use os seguintes dados:
- Email:
[email protected]
- Senha:
123456
- Execute os testes:
rspec
O Participants-App funciona em conjunto com as aplicações [Events-App|https://github.com/TreinaDev/events-app] [Speakers-App|https://github.com/TreinaDev/speakers-app]. Dados são compartilhados com as demais aplicações pelos endpoints descritos abaixo. De modo geral, erros no servidor retornam status http 500.
Par | Tipo | Descrição |
---|---|---|
id |
string | Código alfanumérico único do evento |
200 OK
{
[
{
"name": "Carla",
"last_name": "Fernandes",
"email": "[email protected]",
"cpf": "222.222.222-80"
},
{
"name": "Eduardo",
"last_name": "Menezes",
"email": "[email protected]",
"cpf": "333.333.333-70"
}
]
}
Par | Tipo | Descrição |
---|---|---|
event_id |
string | Código alfanumérico único do lote de um evento |
id |
string | Código alfanumérico único do evento |
{
"id": 198,
"sold_tickets": 27
}
Retorna 404 quando o lote não foi encontrado
Par | Tipo | Descrição |
---|---|---|
event_id |
string | Código alfanumérico único do evento |
{
"event_id": 12345,
"feedbacks": [
{
"id": 1,
"title": "Ótimo Evento",
"comment": "Gostei muito do evento, foi bem organizado!",
"mark": 5,
"user": "João Silva"
},
{
"id": 2,
"title": "Poderia ser melhor",
"comment": "O local estava muito lotado.",
"mark": 3,
"user": "Maria Souza"
}
],
"item_feedbacks": [
{
"id": 10,
"title": "Qualidade do Palestrante",
"comment": "O palestrante principal foi incrível.",
"mark": 5,
"user": "Ana Pereira",
"schedule_item_id": 1001
},
{
"id": 11,
"title": "Feedback sobre Workshop",
"comment": "A sessão prática foi muito curta.",
"mark": 4,
"user": "Carlos Oliveira",
"schedule_item_id": 1002
}
]
}
Retorna 404 quando não há feedbacks para o evento ou se o evento não foi encontrado
Par | Tipo | Descrição |
---|---|---|
item_feedback_id |
string | Código alfanumérico único da atividade de um evento |
name |
string | Nome que quem está respondendo |
email |
string | Email de quem está respondendo |
comment |
string | Corpo da resposta ao feedback |
Status 201
{
"id": 1,
"name": "John Doe",
"email": "[email protected]",
"comment": "Obrigado pelo seu feedback",
"item_feedback_id": 5,
"created_at": "2025-02-09T12:34:56Z",
"updated_at": "2025-02-09T12:34:56Z"
}
Status 406
{
"errors": [
"Nome não pode ficar em branco",
"Email é inválido"
]
}
Status 406
{
"error": "Item feedback not found"
}
Par | Tipo | Descrição |
---|---|---|
schedule_item_id |
string | Código alfanumérico único da atividade |
{
"comentarios_itens": [
{
"id": 1,
"titulo": "Ótima Sessão",
"comentario": "Discussão muito esclarecedora!",
"nota": 5,
"usuario": "João Silva",
"id_item_agenda": 101
},
{
"id": 2,
"titulo": "Poderia ser melhor",
"comentario": "A sessão foi informativa, mas faltou mais engajamento.",
"nota": 3,
"usuario": "Maria Oliveira",
"id_item_agenda": 102
}
]
}
Retorna 404 quando não há feedbacks para a atividade
Par | Tipo | Descrição |
---|---|---|
token |
string | Código alfanumérico do ingresso |
Status 200
{
"token": "ABC123",
"status_confirmed": false,
"date_of_purchase": "2025-02-09T12:00:00Z",
"payment_method": 1,
"user_id": 2,
"event_id": "EVT001",
"batch_id": "BATCH001",
"usage_status": 1
}
Status 422: quando ticket já está marcado como usado
{
"error": "This ticket is already used for this day"
}
Status 404: quando a requisição ocorre em um dia diferente da validade do ticket
{
"error": "This ticket can be used only on the day of the event"
}
Par | Tipo | Descrição |
---|---|---|
code |
string | Código alfanumérico do usuário |
Status 200
{
"name": "Nome Teste",
"last_name": "Sobrenome Teste",
"cpf": "42547083000",
"email": "[email protected]"
}
Status 404
{
"error": "User not found"
}
Cristiano Santana |
César Faustino |
David Bolivar |
Gabriel Ribeiro |
João Branco |
Samuel Rocha |
---|