/PataAmigaAPI

An application for the adoption of street animals

Primary LanguageKotlin

  • Pata Amiga
  • Nosso aplicativo é voltado para adoção de Pets, você pode doar e também adotar um Pet, de maneira rápida e simples.

  • Membros
    1. Matheus Victor - Matrícula: 01515370
    2. Everton Figueirôa - Matrícula: 01177129
    3. Vinicius Rodrigues Barbosa Das Chagas - Matrícula: 01519574
    4. Daniel Ferreira - Matrícula: 01504933
    5. Vicente Alfredo Ferreira - Matrícula: 01540471

  • UML do BackEnd
  • image

  • UML do mobile
  • image

  • Imagens do Projeto - Figma
  • Splash Screen

    Register/Login

    Tela de Login

    Telas de Cadastro

    Tela Principal

    Filtro de animais:

    Tela do Perfil de Pet

    Como adotar um pet:

    Tela para adicionar um Pet para adoção

    Mensagem de confirmação:

    Tela de Perfil do Usuário

    Confirmação de Sign Out:

    Perfil de outro usuário

    Tela para edição do Perfil do Usuário

  • Requisitos do Sistema
  • Requisitos funcionais

    Caso de Uso 1: Cadastro do Usuário

    Descrição:

    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.

    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.

    Fluxo Alternativo:

    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.

    Caso de Uso 2: Registro do Animal

    Descrição:

    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.

    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.

    Fluxo Alternativo:

    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.

    Caso de Uso 3: Favoritar animal

    Descrição:

    Um usuário deve ser capaz de favoritar um animal do feed no sistema, adicionando em sua lista de favoritos.

    Fluxo Principal:

    • O usuário acessa o sistema e seleciona o coração no post do animal.
    • O sistema troca a cor do coração de branco para vermelho e adiciona o animal na lista do usuário.
    • O usuário deve ter acesso a abas de favoritos onde vai está listado todos os animais já favoritos.
    • O usuário deve ter acesso a desfavoritar se o mesmo desejar, assim retirando o animal da aba favoritos.

    Fluxo Alternativo:

    Se o usuário cometer um erro e desfavoritar um animal errado, o sistema deve aparecer uma mensagem de confirmação da ação e permitir o usuário escolher se sim ou não.

    Caso de Uso 4: Filtrar animais do feed

    Descrição:

    Um usuário pode filtrar todos os animais disponíveis para ele, filtrando por espécie, raça, idade, sexo e peso(tamanho). O filtro deve fornecer informações relevantes, como todos os animais disponíveis e que atendam o critério escolhido. O sistema deve permitir ordenar os animais filtrados por mais recentes e mais próximos.

    Fluxo Principal:

    • O usuário acessa o sistema e seleciona a funcionalidade filtro.
    • O sistema exibe um formulário, permitindo que o usuário filtre por espécie, raça, idade, sexo e peso(tamanho).
    • O sistema apresenta os animais que correspondem aos critérios escolhidos no filtro.
    • O usuário pode clicar em um animal para visualizar mais detalhes, como nome, espécie, raça, sexo, idade, peso, se é castrado, se é vacinado, se é vermifugado, sé precisa de cuidado especiais e descrição.

    Fluxo Alternativo:

    Se o sistema não encontrar nenhum animal correspondente aos filtros utilizados, deve exibir uma mensagem de informação. Se houver um grande número de animais, o sistema deve exibir os animais em modo cascata com limite por página de 20 animais.

    Caso de Uso 5: Listar animais no feed

    Descrição:

    Após estar autenticado e entrar no aplicativo, o usuário verá uma lista com todos os PETS.

    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.

    Fluxo Alternativo:

    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.

    Caso de Uso 6: Exibir cada Post de animal(individualmente)

    Descrição:

    O usuário pode acessar as informações completas de um animal, ao acessar o post.

    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.

    Fluxo Alternativo:

    Se o usuário desistir da adoção ele pode cancelar a ação clicando no botão de sair.

    Caso de Uso 7: Adoção do pet

    Descrição:

    Um usuário pode realizar a adoção do pet, com isso vai clicar no botão adotar que tem no detalhamento do animal

    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.

    Fluxo Alternativo:

    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.

    Caso de uso 8: O post pode ser atualizado pelo dono

    Descrição:

    Um usuário pode realizar a atualização de informações do post

    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.

    Fluxo Alternativo:

    Se o usuário colocar informações inválidas no post o sistema deve informá-lo o que está errado.

    Caso de Uso 9: O post pode ser apagado pelo dono

    Descrição:

    Um usuário pode deletar o post de sua preferência.

    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.

    Fluxo Alternativo:

    Se o usuário não quiser mais deletar o post ele pode clicar em cancelar na caixa de mensagem de confirmação.

    Caso de Uso 10: O usuário pode editar o perfil

    Descrição:

    Um usuário pode acessar seu perfil e editar suas informações

    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.

    Fluxo Alternativo:

    Se o usuário preencher algum campo indevidamente o sistema deve exibir uma mensagem informando onde está o erro.

    Caso de Uso 11: O usuário pode ver seu perfil

    Descrição:

    Um usuário pode acessar seu perfil e ver suas informações visíveis.

    Fluxo Principal:

    • O usuário acessar seu perfil a qualquer momento
    • O sistema exibe os dados atuais do usuário.

    Fluxo Alternativo:

    Se houver algum erro ao carregar as informações do banco o sistema deve informá-lo sobre o problema.

    Caso de Uso 12: O usuário ver sua lista de posts

    Descrição:

    Um usuário pode acessar seu perfil e ver todos os seus posts

    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

    Fluxo Alternativo:

    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.

    Caso de Uso 13: O usuário sair do app

    Descrição:

    Um usuário pode fechar o aplicativo pelo próprio aplicativo

    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.

  • JSON
  • EndPoints da API

    OBS: Todas as rotas possuiem o prefixo /api

    User's EndPoint

    Login

    Post

    /user/login

    Body:
    {
        "email": String,
        "password": String,
    }

    Return:

    status code: 200 ok

    {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ"
    }

    CreateOneUser

    Método responsável por criar um usuário no banco

    Post

    /user

    Body:
    {
        "email": String,
        "name": String,
        "password": String,
        "birth": String,
        "location": String,
        "profileAvatarUrl": String,
        "banner": String,
        "phone": String,
        "instagram": String,
        "facebook": String,
        "whatsapp": String
    }

    Os campos instagram, facebook e whatsapp são opcionais. Ex.:

    {
        "email": String,
        "name": String,
        "password": String,
        "birth": String,
        "location": String,
        "profileAvatarUrl": String,
        "banner": String,
        "phone": String,
        "instagram": null,
        "facebook": null,
        "whatsapp": null
    }

    Return:

    status code: 201 created

    getOneUser

    Método responsável por listar um usuário no banco com base no ID

    get

    /user/{idUser}

    Return:

    {
        "id": Int,
        "email": String,
        "name": String,
        "password": String,
        "birth": String,
        "location": String,
        "profileAvatarUrl": String,
        "banner": String,
        "phone": String,
        "instagram": String,
        "facebook": String,
        "whatsapp": String,
        "postsPets": [],
        "likedPets": []
    }

    status code: 200 OK

    updateUser

    Método responsável por atualizar um usuário no banco

    patch

    /user/{idUser}

    Body:
    {
        "email": String,
        "name": String,
        "password": String,
        "birth": String,
        "location": String,
        "profileAvatarUrl": String,
        "banner": String,
        "phone": String,
        "instagram": String,
        "facebook": String,
        "whatsapp": String,
        "postsPets": [],
        "likedPets": []
    }

    Return:

    status code: 200 OK

    postPet's EndPoint

    createdPost

    Método responsável por criar um post de adoção

    post

    /postsPets

    Body:
    {
        "specie": String,
        "name": String,
        "race": String,
        "sex": String,
        "age": String,
        "isVaccinated": Boolean,
        "isCastrated": Boolean,
        "isPedigree": Boolean,
        "especialCares": Boolean,
        "isDewormed": Boolean,
        "size": String,
        "weight": String,
        "About": String,
        "OwnerId": String,
        "isAdopted": Boolean
    }

    Return:

    status code: 201 created

    getOnePostForId

    Método responsável por listar um post com base no seu ID

    get

    /postsPets/{postId}

    Body:

    Return:

    {
        "id": Int,
        "specie": String,
        "name": String,
        "race": String,
        "sex": String,
        "age": String,
        "isVaccinated": Boolean,
        "isCastrated": Boolean,
        "isPedigree": Boolean,
        "especialCares": Boolean,
        "isDewormed": Boolean,
        "size": String,
        "weight": String,
        "About": String,
        "OwnerId": String,
        "isAdopted": Boolean
    }

    status code: 200 ok

    getAllPosts

    Método responsável por listar todos os posts

    get

    /postsPets

    Return:

    [
        {
            "id": Long,
            "specie": String,
            "name": String,
            "race": String,
            "sex": String,
            "age": String,
            "isVaccinated": Boolean,
            "isCastrated": Boolean,
            "isPedigree": Boolean,
            "especialCares": Boolean,
            "isDewormed": Boolean,
            "size": String,
            "weight": String,
            "About": String,
            "OwnerId": String,
            "isAdopted": Boolean
        },
        {
            "id": Long,
            "specie": String,
            "name": String,
            "race": String,
            "sex": String,
            "age": String,
            "isVaccinated": Boolean,
            "isCastrated": Boolean,
            "isPedigree": Boolean,
            "especialCares": Boolean,
            "isDewormed": Boolean,
            "size": String,
            "weight": String,
            "About": String,
            "OwnerId": String,
            "isAdopted": Boolean
        }
    ]

    status code: 200 ok

    updatePost

    Método responsável por atualizar os posts no banco

    patch

    /postsPets/{postId}

    Body:
    {
        "specie": String,
        "name": String,
        "race": String,
        "sex": String,
        "age": String,
        "isVaccinated": Boolean,
        "isCastrated": Boolean,
        "isPedigree": Boolean,
        "especialCares": Boolean,
        "isDewormed": Boolean,
        "size": String,
        "weight": String,
        "About": String,
        "OwnerId": String,
        "isAdopted": Boolean
    }

    Return:

    status code: 200 ok

    deletePost

    Método responsável por apagar um post no banco

    delete

    /postsPets/{postId}

    Return:

    status code: 204 No Content

    toLikePost

    Método responsável por adicionar os post aos curtidos

    post

    /likedPost/{postId}/{userId}

    Return:

    status code: 200 OK