Executando o projeto • Testes • Guia de uso da aplicação • Informações da aplicação • Observação • Documentação API
Para executar o projeto Open-Buffet, é necessário possuir na sua maquina as segintes ferramentas instaladas e executar os passos seguintes.
Comando para instalar o Libvips no ubuntu:
sudo apt install libvips-dev
- Clone o repositório
git clone https://github.com/DaniloRibeiro07/Open-Buffet.git
- Abra o diretório pelo terminal
cd Open-Buffet
- Instale as Gems via bundle
bundle install
- Cria e popula o banco de dados
rails db:setup
- Execute a aplicação
rails s
- Acesse a aplicação no link http://localhost:3000/
Comando para executar testes integrados da aplicação:
rspec
Ao acessar a aplicação, o usuário visualizará na tela inicial os buffets cadastrados, poderá clicar nos buffets para vê detalhes, pesquisar pelo nome do buffet, ou cidade ou nome do evento e fazer login.
Enquanto o usuário não fizer login, ele só terá acesso a páginas de detalhes de eventos do buffet ou do próprio buffet.
Se o usuário estiver logado como cliente, ele poderia fazer um pedido, vê o andamento de todos os seus pedidos, conversar com o buffet, avaliar o pedido após confirmado e realizado o evento.
Se o usuário estiver logado como dono do buffet, ele deverá ter informado os dados do seu buffet, poderá cadastrar evento, ativar ou desativar o seu evento e o seu buffet, vê todos os seus pedidos e vê outros buffets.
Na aplicação há 3 usuários clientes:
- Usuário Joana, email: [email protected] e senha: teste123
- Usuário Sabrina, email: [email protected] e senha : teste123
- Usuário Olivia, email: [email protected] e senha: teste123
Na aplicação há 7 usuários empresas:
-
Usuário Alecrim, email: [email protected] e senha: teste123
Que possui um buffet e dois tipos de evento. -
Usuário Marcola, email: [email protected] e senha: teste123
Que possui um buffet e três tipos de evento.
Com 4 pedidos aprovados e avaliados.
1 Pedido Aguardando Avaliação do Cliente
1 Pedido aguardando a avaliação do buffet -
Usuário Nanda, email: [email protected] e senha: teste123
Que possui um buffet e três tipos de evento. -
Usuário Otavio, email: [email protected] e senha: teste123
Que possui um buffet, desabilitado, e um tipo de evento. -
Usuário Marcia, email: [email protected] e senha: teste123
Que ainda não cadastrou o seu buffet. -
Usuário Sofia, email: [email protected] e senha: teste123
Sofia possui o seu buffet e dois eventos cadastrados:
Amazonico, que está desabilitado
Pirata, que está habilitado, e com duas imagens -
Usuário Matheus, email: [email protected] e senha: teste123
Matheus possui apenas o buffet, sem eventos cadastrados
Observação na tarefa API de Buffets:
Tópico: Consulta de disponibilidade?
Um buffet estará disponível quando não houver agendamentos confirmados naquele dia.
- Listagem de Bufets
- Listagem de tipos de eventos de um buffet
- Detalhes de um buffet
- Consulta de disponibilidade
Para requisitar uma listar de todos os buffet será necessário fazer a seguinte requisição:
Verbo: GET URL: http://127.0.0.1:3000/api/v1/buffet_registrations
A resposta a requisição será um json contendo uma lista de objetos. Cada objeto conterá o ID do buffet, nome, estado e cidade. Se a requisição for realizada com sucesso, o status retornado é 200.
Caso ocorra um erro no servidor durante a requisição, haverá uma resposta com status 500.
Exemplo: GET para http://127.0.0.1:3000/api/v1/buffet_registrations/
Resultado da requisição:
Status: 200
Content_type: application/json; charset=utf-8
body:
[
{
"id": 1,
"trading_name": "Buffet da familia",
"state": "TO",
"city": "Palmas"
},
{
"id": 2,
"trading_name": "Buffet da Avon",
"state": "RJ",
"city": "São Gonçalo"
},
{
"id": 3,
"trading_name": "Buffet Alegre",
"state": "TO",
"city": "Palmas"
}
]
Caso não haja buffets cadastado, o resultado será uma lista json vázia.
Para requisitar uma lista filtrada pelo nome do buffet, será necessário fazer a seguinte requisição:
Verbo: GET URL: http://127.0.0.1:3000/api/v1/buffet_registrations?filter=`name`
Onde o "name
" da URL é o nome utilizado no filtro.
A resposta a requisição será um json contendo uma lista de objetos filtrados. Cada objeto conterá o ID do buffet, nome, estado e cidade.
O status da requisição com sucesso é 200
.
Caso não seja encontrado buffets com o 'name
' informado, será retornado um objeto json, com status 406
e com o attributo "errors
" "igual a 'Não foi encontrados registros de 'name
'"
Caso ocorra um erro no servidor durante a requisição, haverá uma resposta com status 500.
Exemplo de requisição com sucesso filtrando buffets pelo nome:
Requisição: GET para http://127.0.0.1:3000/api/v1/buffet_registrations/?filter=`alegre`
Resultado da requisição:
Status: 200
Content_type: application/json; charset=utf-8
body:
[
{
"id": 3,
"trading_name": "Buffet Alegre",
"state": "TO",
"city": "Palmas"
}
]
Exemplo de requisição com falha, pois não há buffets com o name informado:
Requisição: GET para http://127.0.0.1:3000/api/v1/buffet_registrations/?filter=`super`
Resultado da requisição:
Status: 406
Content_type: application/json; charset=utf-8
body:
{
"errors": "Não foi encontrados registros de super"
}
Para requisitar uma listar de todos os eventos de um buffet será necessário fazer a seguinte requisição:
Verbo: GET URL: http://127.0.0.1:3000/api/v1/buffet_registrations/`buffet_registration_id`/event_types
Onde buffet_registration_id
deve ser substitudo pelo ID do buffet.
Caso haja um buffet com o ID informado, será dado a seguinte resposta:
A resposta a requisição será um json contendo uma lista de objetos de tipos de evento deste buffet.
Cada objeto conterá o ID do tipo de evento, nome, descrição e quantidade mínima e máxima de pessoas, duração do evento, o menu, se pode conter bebidas, decorações, serviço de valet, se pode ser dentro ou fora do buffet, ID do buffet, se o valor é diferente no final de semana ou não e os valores na semana e final de semana.
Caso não haja tipos de eventos cadastrado no buffet, a resposta será uma lista vazia.
O status da requisição com sucesso é 200.
Caso não seja encontrado buffets com o id
informado, será retornado um objeto json, com status 406
e com o attributo "errors
" "igual a 'Não há buffet com o id: 'id
'"
Caso ocorra um erro no servidor durante a requisição, haverá uma resposta com status 500
.
Exemplo: GET para http://127.0.0.1:3000/api/v1/buffet_registrations/1/event_types
Resultado da requisição:
Status: 200
Content_type: application/json; charset=utf-8
body:
[
{
"id": 1,
"name": "Chá de revelação",
"description": "Chá de revelação para novos pais ",
"minimum_quantity": 10,
"maximum_quantity": 55,
"duration": 63,
"menu": "Bolo, salgados e docinhos",
"alcoholic_beverages": false,
"decoration": true,
"valet": false,
"insider": true,
"outsider": false,
"buffet_registration_id": 1,
"different_weekend": false,
"weekend_price": {
"base_price": 50.39,
"price_per_person": 30,
"overtime_rate": 30
},
"working_day_price": {
"base_price": 50.39,
"price_per_person": 30,
"overtime_rate": 30
}
}
]
Exemplo: GET para http://127.0.0.1:3000/api/v1/buffet_registrations/991/event_types (buffet inexistente)
Resultado da requisição:
Status: 406
Content_type: application/json; charset=utf-8
body:
{
"errors": "Não há buffet com o id: 991"
}
Para requisitar detalhes de um buffet será necessário fazer a seguinte requisição:
Verbo: GET URL: http://127.0.0.1:3000/api/v1/buffet_registrations/`id`
Onde id
deve ser substitudo pelo ID do buffet.
Caso haja um buffet com o ID informado, será dado a seguinte resposta:
A resposta a requisição será um json contendo um objeto com os atributos sendo os detalhes do buffet.
Os atributos serão: id, nome fantasia, telefone, email, logradouro, numero, bairro, estado, cidade, CEP, descrição complemento, um objeto de formas de pagamentos e uma lista de objetos de tipos de evento.
O objeto de formas de pagamentos contém nos seus elementos os métodos de pagamento e o valor de cada elemento representa se é aceito ou não, caso o valor seja true, o metodo de pagamento é aceito, caso o contrário, não.
Cada objeto do tipo de evento contem um id e nome do evento.
Caso não haja tipos de eventos cadastrado no buffet, a resposta será uma lista vazia.
O status da requisição com sucesso é 200.
Caso não seja encontrado buffets com o id
informado, será retornado um objeto json, com status 406
e com o attributo "errors
" "igual a 'Não há buffet com o id: 'id
'"
Caso ocorra um erro no servidor durante a requisição, haverá uma resposta com status 500
.
Exemplo: GET para http://127.0.0.1:3000/api/v1/buffet_registrations/1
Resultado da requisição:
Status: 200
Content_type: application/json; charset=utf-8
body:
{
"id": 1,
"trading_name": "Buffet da familia",
"phone": "7995876812",
"email": "[email protected]",
"public_place": "Quadra 1112 Sul Alameda 5",
"neighborhood": "Plano Diretor Sul",
"state": "TO",
"city": "Palmas",
"zip": "77024-171",
"description": "O melhor buffet das perfumaras",
"payment_method_id": 1,
"address_number": "25A",
"complement": "",
"payment_method": {
"pix": true,
"boleto": null,
"credit_card": null,
"debit_card": null,
"money": null,
"bitcoin": null,
"bank_transfer": null
},
"event_types": [
{
"id": 1,
"name": "Chá de revelação"
}
],
"average": "2.0"
}
Exemplo: GET para http://127.0.0.1:3000/api/v1/buffet_registrations/9999 (buffet inexistente)
Resultado da requisição:
Status: 406
Content_type: application/json; charset=utf-8
body:
{
"errors": "Não há buffet com o id: 9999"
}
Para requisitar se há disponibilidade de um buffet para um determinado evento, será necessário fazer a seguinte requisição
Verbo: POST URL: http://localhost:3000/api/v1/event_types/`event_type_id`/orders?date=`date_value`&amount_of_people=`number_value`
Onde event_type_id
deve ser substituido pelo ID do tipo de evento,
date_value
deve ser substitudo pela data do evento e number_value
deve ser substitudo pela quantidade de pessoas participantes do evento.
Haverá disponibilidade para o evento caso não haja pedidos confirmados no dia.
O data_value
deve esta no formato de data dd/mm/yyyy e deve ser maior ou igual a data de hoje. Caso contrário, o servidor retornará como resposta a requisição o status 412
e no body, um arquivo json com o erro de data.
O number_value
é a quantidade de participantes, este deve ser maior ou igual a quantidade mínima de participantes e menor ou igual a quantidade máxima. Caso contrário, o servidor retornará como resposta a requisição o status 412
e no body, um arquivo json com o erro de quantidade de participantes.
Caso haja um tipo de evento com o ID informado, não haja um pedido confirmado no dia, a data seja válida e quantidade de pessoas também, a resposta será dada da seguinte forma:
A resposta à requisição será um json contendo um único atributo ('prior_value') sendo o valor do pedido.
Caso não haja um problema no servidor, o status da resposta será 200.
Exemplo: POST para http://localhost:3000/api/v1/event_types/1/orders?date=2025/05/12&amount_of_people=30
Resultado da requisição:
Status: 200
Content_type: application/json; charset=utf-8
body:
{
"prior_value": 650.39
}
Caso não seja encontrado o tipo de evento com o id
informado, será retornado um objeto json, com status 406
e com o attributo "errors
" "igual a 'Não há um tipo de evento com o id: 'id
'"
Exemplo: POST para http://localhost:3000/api/v1/event_types/99999/orders?date=2025/05/12&amount_of_people=30 (tipo de evento inexistente)
Resultado da requisição:
Status: 406
Content_type: application/json; charset=utf-8
body:
{
"errors": "Não há um tipo de evento com o id: 9999"
}
Caso ocorra um erro no servidor durante a requisição, haverá uma resposta com status 500
.
Caso não seja informado a data ou a quantidade de pessoas no evento, será retornado um erro de status 412 e no corpo da resposta, haverá um objeto json com o elemento 'errors' contendo uma lista de strings de errors.
Exemplo: POST para http://localhost:3000/api/v1/event_types/1/orders?amount_of_people=30 (Não há data)
Resultado da requisição:
Status: 412
Content_type: application/json; charset=utf-8
body:
{
"errors": [
"Data não pode ficar em branco",
"Data deve ser maior do que hoje (13/05/2024)"
]
}
Exemplo: POST para http://localhost:3000/api/v1/event_types/1/orders?date=2035/05/12 (Não há quantidade de pessoas)
Resultado da requisição:
Status: 412
Content_type: application/json; charset=utf-8
body:
{
"errors": [
"Participantes do Evento não pode ficar em branco"
]
}
Exemplo: POST para http://localhost:3000/api/v1/event_types/1/orders (Não há quantidade de pessoas e nem data)
Resultado da requisição:
Status: 412
Content_type: application/json; charset=utf-8
body:
{
"errors": [
"Data não pode ficar em branco",
"Participantes do Evento não pode ficar em branco",
"Data deve ser maior do que hoje (13/05/2024)"
]
}
Caso a quantidade de pessoas seja maior ou menor do que a suportada pelo evento, será retornado um erro com status 412 e com o corpo do texto informado o erro e a quantidade suportada.
Exemplo: POST para http://localhost:3000/api/v1/event_types/1/orders?date=2025/05/12&amount_of_people=500 (Quantidade de pessoas maior do que o suportado)
Resultado da requisição:
Status: 412
Content_type: application/json; charset=utf-8
body:
{
"errors": [
"Participantes do Evento Deve ser menor ou igual a 55"
]
}
Exemplo: POST para http://localhost:3000/api/v1/event_types/1/orders?date=2025/05/12&amount_of_people=1 (Quantidade de pessoas menor do que o suportado)
Resultado da requisição:
Status: 412
Content_type: application/json; charset=utf-8
body:
{
"errors": [
"Participantes do Evento Deve ser maior ou igual a 10"
]
}
Caso a data informada seja menor do que o dia de hoje, o resultado da requisição conterá um erro de status 412 e no corpo da resposta haverá um attributo 'errors' com uma lista de errors.
Exemplo: POST para http://localhost:3000/api/v1/event_types/1/orders?date=2021/05/12&amount_of_people=1 (Data do evento inferior ao dia de hoje)
Resultado da requisição:
Status: 412
Content_type: application/json; charset=utf-8
body:
{
"errors": [
"Data deve ser maior do que hoje (13/05/2024)"
]
}