Nosso aplicativo é voltado para adoção de Pets, você pode doar e também adotar um Pet, de maneira rápida e simples.
- Matheus Victor - Matrícula: 01515370
- Everton Figueirôa - Matrícula: 01177129
- Vinicius Rodrigues - Matrícula: 01519574
- Daniel Ferreira - Matrícula: 01504933
Splash Screen
Register/Login
Tela de Login
Telas de Cadastro
Tela Principal
Tela do Perfil de Pet
Tela para adicionar um Pet para adoção
Tela de Perfil do Usuário
Tela para edição do Perfil do Usuário
Requisitos funcionais
Caso de Uso 1: Cadastro do Usuário
O usuário deve se cadastrar no sistema. O usuário deve fornecer informações básicas, como e-mail, senha, nome completo e data de nascimento para criar a conta. Além disso, o usuário deve ser capaz de inserir informações adicionais , tais como foto, telefone, whatsapp, instagram, facebook e endereço. Descrição:
Fluxo Principal:
- O usuário acessa o sistema e seleciona a funcionalidade de Cadastro.
- O sistema exibe o formulário de registro.
- O usuário preenche as informações básicas (e-mail, senha, nome completo e data de nascimento) e detalhes adicionais ( foto, telefone, whatsapp, instagram, facebook e endereço).
- O sistema salva as informações e exibe uma mensagem de confirmação.
Se o usuário cometer algum erro durante o preenchimento do formulário, o sistema deve exibir uma mensagem de erro e permitir que o usuário corrija/edite as informações incorretas. Fluxo Alternativo:
Caso de Uso 2: Registro do Animal
Um usuário pode registrar um animal na sua lista de adoção no sistema, incluindo informações como foto, nome, espécie, raça, sexo, idade, peso, se é castrado, se é vacinado, se é vermifugado, sé precisa de cuidado especiais. Além disso, o usuário deve ser capaz de inserir informações adicionais, como uma descrição. Descrição:
Fluxo Principal:
- O usuário acessa o sistema e seleciona a funcionalidade de registro do animal.
- O sistema exibe o formulário de registro.
- O usuário preenche as informações básicas do animal, incluindo foto, nome, espécie, raça, sexo, idade, peso, se é castrado, se é vacinado, se é vermifugado, sé precisa de cuidado especiais.
- O usuário inclui detalhes adicionais, como uma descrição.
- O sistema valida as informações inseridas pelo usuário e salva as informações do novo animal.
- O sistema exibe uma mensagem de confirmação para o usuário.
Se o usuário cometer algum erro durante o preenchimento do formulário, o sistema deve exibir uma mensagem de erro indicando qual campo contém informações incorretas. O usuário pode então corrigir as informações incorretas antes de submeter o formulário novamente. Fluxo Alternativo:
Caso de Uso 3: Listar animais no feed
Após estar autenticado e entrar no aplicativo, o usuário verá uma lista com todos os PETS. Descrição:
Fluxo Principal:
- O usuário acessa o sistema e poderá interagir com os diversos posts .
- O sistema exibe cada um dos pets que estão marcados como “não adotados”.
- O sistema atualiza os registros sempre que o usuário entrar no app.
Se o usuário não tiver conexão com a internet ou, houver alguma falha no servidor, o sistema deve notificá-lo sobre o ocorrido, igualmente caso não haja nenhum animal disponível para adoção. Fluxo Alternativo:
Caso de Uso 4: Exibir cada Post de animal(individualmente)
O usuário pode acessar as informações completas de um animal, ao acessar o post. Descrição:
Fluxo Principal:
- O usuário clica no post de seu interesse e acessa as informações do pet
- O usuário pode ver a localização do animal e saber se pode ajudá-lo.
- Ao clicar em adotar o sistema deve exibir todas as informações de contato do dono do post.
Se o usuário desistir da adoção ele pode cancelar a ação clicando no botão de sair. Fluxo Alternativo:
Caso de Uso 5: Adoção do pet
Um usuário pode realizar a adoção do pet, com isso vai clicar no botão adotar que tem no detalhamento do animal Descrição:
Fluxo Principal:
- O usuário acessa o sistema e seleciona o animal desejado.
- O sistema exibe a página de detalhes do animal.
- O usuário vai clicar no botão de adotar!
- O sistema vai abrir uma caixa de mensagem com as opções de e-mail, telefone, whatsapp, instagram e facebook. Com informações adicionais dentro das opções contendo os dados de cada canal do doador.
Se o usuário não conseguir acessar o botão adotar o sistema deve apresentar uma mensagem de erro com o motivo. Ex.: Quando não tiver canal disponibilizado pelo doador. Fluxo Alternativo:
Caso de uso 6: O post pode ser atualizado pelo dono
Um usuário pode realizar a atualização de informações do post Descrição:
Fluxo Principal:
- O usuário acessa a aba de edição do post.
- O sistema exibe a página de edição com todas as informações atuais do post.
- O usuário pode salvar as alterações
- O sistema vai abrir uma caixa de mensagem perguntando se o usuário quer realmente atualizar aquele post.
Se o usuário colocar informações inválidas no post o sistema deve informá-lo o que está errado. Fluxo Alternativo:
Caso de Uso 7: O post pode ser apagado pelo dono
Um usuário pode deletar o post de sua preferência. Descrição:
Fluxo Principal:
- O usuário acessa o post que deseja apagar.
- O sistema exibe a opção de deletar.
- O usuário pode clicar em deletar.
- O sistema vai abrir uma caixa de mensagem confirmando se o usuário deseja apagar.
Se o usuário não quiser mais deletar o post ele pode clicar em cancelar na caixa de mensagem de confirmação. Fluxo Alternativo:
Caso de Uso 8: O usuário pode editar o perfil
Um usuário pode acessar seu perfil e editar suas informações Descrição:
Fluxo Principal:
- O usuário acessar seu perfil e mudar informações como nome, endereço, etc...
- O sistema exibe os dados atuais do usuário.
- Ao terminar o usuário aperta em atualizar.
Se o usuário preencher algum campo indevidamente o sistema deve exibir uma mensagem informando onde está o erro. Fluxo Alternativo:
Caso de Uso 9: O usuário pode ver seu perfil
Um usuário pode acessar seu perfil e ver suas informações visíveis. Descrição:
Fluxo Principal:
- O usuário acessar seu perfil a qualquer momento
- O sistema exibe os dados atuais do usuário.
Se houver algum erro ao carregar as informações do banco o sistema deve informá-lo sobre o problema. Fluxo Alternativo:
Caso de Uso 10: O usuário ver sua lista de posts
Um usuário pode acessar seu perfil e ver todos os seus posts Descrição:
Fluxo Principal:
- O usuário acessar seu perfil e clica no botão “seus pets”
- O sistema exibe todos os posts feitos por aquele usuário.
- O usuário pode acessar seus posts daquele momento
Se o usuário não possuir nenhum post deve ser exibido uma mensagem de que não há posts e um botão que redireciona para a página de criação de posts. Fluxo Alternativo:
Caso de Uso 11: O usuário sair do app
Um usuário pode fechar o aplicativo pelo próprio aplicativo Descrição:
Fluxo Principal:
- Ao aperta voltar duas vezes no menu inicial.
- O sistema exibe uma caixa de mensagem perguntando se o usuário quer sair do aplicativo.
- Ao clicar em sair o aplicativo fecha corretamente.
Fluxo Alternativo:
Se o usuário escolher não fechar o aplicativo ficará aberto.
EndPoints da API
OBS: Todas as rotas possuiem o prefixo /api
(exceto o login). E somente a rota de login, criação de usuário e alteração de senha não precisam de token
User's EndPoint
Login
Post
Body: auth/user/login
{
"email": String,
"password": String,
}
Return:
status code:
200 ok
{
"message": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ"
}
Create one user
Método responsável por criar um usuário no banco
Post
Body: /user
{
"name": Sting,
"email": String,
"password": String,
"birth": String,
"location": String,
"profilePic": String,
"banner": String,
"phone": String,
"whatsapp": String,
"instagram": String,
"facebook": String
}
Os campos profilePic, banner, instagram, facebook e whatsapp são opcionais. Ex.:
{
"name": Sting,
"email": String,
"password": String,
"birth": String,
"location": String,
"profilePic": null,
"banner": null,
"phone": String,
"whatsapp": null,
"instagram": null,
"facebook": null
}
Return:
status code:
201 created
{
"id": Long,
"name": String,
"email": String,
"birth": String,
"location": String,
"profilePic": String,
"banner": String,
"phone": String,
"instagram": String,
"facebook": String,
"whatsapp": String
}
get one user
Método responsável por listar um usuário no banco com base no token passado
get
/user/byself
Return:
status code:
200 OK
{
"id": Long,
"name": String,
"email": String,
"birth": String,
"location": String,
"profilePic": String,
"banner": String,
"phone": String,
"instagram": String,
"facebook": String,
"whatsapp": String
}
update user
Método responsável por atualizar um usuário no banco com base no token
put
Body: /user
{
"name": String,
"location": String,
"phone": String,
"instagram": String,
"facebook": String,
"whatsapp": String
}
Return:
status code:
200 OK
{
"id": Long,
"name": String,
"email": String,
"birth": String,
"location": String,
"profilePic": String,
"banner": String,
"phone": String,
"instagram": String,
"facebook": String,
"whatsapp": String
}
update password
Método responsável por atualizar a senha de um usuário no banco com base no email
patch
Body: /user/change_password
{
"email": String,
"newPassword": String
}
Return:
status code:
200 OK
delete user
Método responsável por um usuário no banco com base no token
delete
/user
Return:
status code:
200 OK
postPet's EndPoint
create post
Método responsável por criar um post de adoção
post
Body: /postsPets
{
"name": String,
"postPic": String,
"race": String,
"specie": String,
"sex": String,
"age": String,
"size": String,
"weight": String,
"about": String,
"petLocation": String,
"isAdopted": Boolean,
"isCastrated": Boolean,
"isVaccinated": Boolean,
"isPedigree": Boolean,
"isDewormed": Boolean,
"isEspecialNeeds": Boolean
}
Return:
status code:
201 created
{
"id": Long,
"postPic": "String",
"name": "String",
"race": "String",
"specie": "String",
"sex": "String",
"age": "String",
"size": "String",
"weight": "String",
"about": "String",
"petLocation": "String",
"isAdopted": Boolean,
"isCastrated": Boolean,
"isVaccinated": Boolean,
"isPedigree": Boolean,
"isDewormed": Boolean,
"isEspecialNeeds": Boolean,
"userId": Long,
"userPic": "String",
"userName": "String"
}
get one post for id
Método responsável por listar um post com base no seu ID
get
Body: /postsPets/{postId}
Return:
status code:
200 ok
{
"id": Long,
"postPic": "String",
"name": "String",
"race": "String",
"specie": "String",
"sex": "String",
"age": "String",
"size": "String",
"weight": "String",
"about": "String",
"petLocation": "String",
"isAdopted": Boolean,
"isCastrated": Boolean,
"isVaccinated": Boolean,
"isPedigree": Boolean,
"isDewormed": Boolean,
"isEspecialNeeds": Boolean,
"userId": Long,
"userPic": "String",
"userName": "String"
}
get all posts
Método responsável por listar todos os posts
get
/postsPets
Return:
status code:
200 ok
[
{
"id": Long,
"postPic": "String",
"name": "String",
"race": "String",
"specie": "String",
"sex": "String",
"age": "String",
"petLocation": "String"
},
{
"id": Long,
"postPic": "String",
"name": "String",
"race": "String",
"specie": "String",
"sex": "String",
"age": "String",
"petLocation": "String"
},
{
"id": Long,
"postPic": "String",
"name": "String",
"race": "String",
"specie": "String",
"sex": "String",
"age": "String",
"petLocation": "String"
},
]
update post
Método responsável por atualizar os posts no banco(Você só pode atualizar os seus posts)
put
Body: /postsPets/{postId}
{
"name": "String",
"postPic": "String",
"race": "String",
"sex": "String",
"age": "String",
"size": "String",
"weight": "String",
"about": "String",
"isAdopted": Boolean,
"isCastrated": Boolean,
"isVaccinated": Boolean,
"isPedigree": Boolean,
"isDewormed": Boolean,
"isEspecialNeeds": Boolean
}
Return:
status code:
200 ok
{
"id": 4,
"postPic": String,
"name": "String",
"race": "String",
"specie": "String",
"sex": "String",
"age": "String",
"size": "String",
"weight": "String",
"about": "String",
"petLocation": "String",
"isAdopted": false,
"isCastrated": true,
"isVaccinated": true,
"isPedigree": false,
"isDewormed": true,
"isEspecialNeeds": false,
"user": {
"id": 2,
"name": "String",
"email": "String",
"password": "String",
"birth": "String",
"location": "String",
"profilePic": "String",
"banner": "String",
"phone": "String",
"instagram": "String",
"facebook": "String",
"whatsapp": "String"
}
}
deletePost
Método responsável por apagar um post no banco(Você só pode deletar os seus posts)
delete
/postsPets/{postId}
Return:
status code:
204 No Content
get all user Posts
Método responsável por pegar todos os posts do usuário
get
/likedPost/users
Return:
status code:
200 OK
[
{
"id": Long,
"postPic": String,
"name": String,
"race": String,
"specie": String,
"sex": String,
"age": String,
"petLocation": String
},
{
"id": Long,
"postPic": String,
"name": String,
"race": String,
"specie": String,
"sex": String,
"age": String,
"petLocation": String
},
]