Coder Social home page Coder Social logo

pataamigaapi's Introduction

  • 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 - Matrícula: 01519574
    4. Daniel Ferreira - Matrícula: 01504933

  • UML do BackEnd
  • image

  • UML do mobile
  • image

  • Imagens do Projeto - Figma
  • Splash Screen

    Register/Login

    Tela de Login

    Telas de Cadastro

    Tela Principal

    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:

    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: 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 4: 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 5: 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 6: 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 7: 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 8: 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 9: 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 10: 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 11: 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(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

    auth/user/login

    Body:
    {
        "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

    /user

    Body:
    {	
        "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

    /user

    Body:
    {
        "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

    /user/change_password

    Body:
    {
        "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

    /postsPets

    Body:
    {
        "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

    /postsPets/{postId}

    Body:

    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

    /postsPets/{postId}

    Body:
    {
      "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
        },
    ]

    pataamigaapi's People

    Contributors

    danielsantos404 avatar evertonfigueiroa avatar matheusvict avatar vicentef2004 avatar vinir262 avatar

    Stargazers

     avatar  avatar

    Watchers

     avatar

    pataamigaapi's Issues

    Refact code architecture

    It needs a better architecture like:

    • services
    • DTOs
    • responses default
    • to reuse funcs

    Things optional

    • interceptors
    • middlewares
    • tests

    Features

    It needs:

    • Profile Picture save
    • banner picture
    • liked users posts

    optional features

    • specie entity

    Recommend Projects

    • React photo React

      A declarative, efficient, and flexible JavaScript library for building user interfaces.

    • Vue.js photo Vue.js

      🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

    • Typescript photo Typescript

      TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

    • TensorFlow photo TensorFlow

      An Open Source Machine Learning Framework for Everyone

    • Django photo Django

      The Web framework for perfectionists with deadlines.

    • D3 photo D3

      Bring data to life with SVG, Canvas and HTML. 📊📈🎉

    Recommend Topics

    • javascript

      JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

    • web

      Some thing interesting about web. New door for the world.

    • server

      A server is a program made to process requests and deliver data to clients.

    • Machine learning

      Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

    • Game

      Some thing interesting about game, make everyone happy.

    Recommend Org

    • Facebook photo Facebook

      We are working to build community through open source technology. NB: members must have two-factor auth.

    • Microsoft photo Microsoft

      Open source projects and samples from Microsoft.

    • Google photo Google

      Google ❤️ Open Source for everyone.

    • D3 photo D3

      Data-Driven Documents codes.