Giter Club home page Giter Club logo

kanvas's Introduction

🖥 Kanvas

🛠 Tecnologias utilizadas

Framework

  • Django

Bibliotecas

  • python-dotenv
  • djangorestframework

🛠 Organização para ambiente do projeto

Caso queira fazer uma clonagem e rodar o processo na sua máquina siga as seguintes instruções:

1 - Inicie um ambiente virtual (venv) no seu projeto (usamos o poetry como gerenciador de pacotes):

$ pip install poetry

2 - Instale as dependências presentes no arquivo pyproject.toml com o seguinte comando no terminal:

$ poetry install # instala todos os pacotes
$ # poetry install --only main # instala os pacotes usados em produção

4 - Verifique as variáveis de ambientes de configuração necessárias no arquivo .env.example, crie uma cópia desse arquivo preencha as chaves necessárias e nomeie-o .env

3 - Em seguida, inicie a aplicação django rodando o seguinte comando no terminal:

$ task run

opcional

1 - Para rodar os testes execute o comando:

$ task test

2 - para visualizar a cobertura dos testes abra o arquivo htmlcov/index.html em qualquer navegador.




🔚 Endpoints


> Usuário


Registro

POST /api/accounts/

Qualquer pessoa pode criar qualquer usuário:

{
  "first_name": "John",
  "last_name": "Doe",
  "email": "[email protected]",
  "password": "1234",
  "is_admin": false
}

Dessa requisição é esperado um retorno com os dados do usuário cadastrado, como mostrado a seguir:

{
  "uuid": "37c65691-d4fc-47e0-aef4-afe7b09c261f",
  "first_name": "John",
  "last_name": "Doe",
  "email": "[email protected]",
  "is_admin": false
}

Login

POST /api/login/

Esta API utiliza verificação por Token de autenticação, na grande maioria das próximas rotas será necessário o uso destes tokens.

{
  "email": "[email protected]",
  "password": "1234"
}

Dessa requisição é esperado um retorno com o token de acesso do usuário, como mostrado a seguir:

{
  "token": "76a6683c3a38c40caee04af738d279753e2c4d8d"
}

Listagem

GET /api/accounts/

Esse endpoint servirá para fazermos a listagem de usuários no curso: Requer token de instrutor

// REQUEST
// Header -> Authorization: Token 'token-do-instrutor'
[
  {
    "uuid": "61039ae4-7016-48d3-b90e-95a78b39e427",
    "first_name": "Maria",
    "last_name": "Joaquina",
    "email": "[email protected]",
    "is_admin": true
  },
  {
    "uuid": "af8af8b1-7d19-4032-b93d-04c84c66f8e1",
    "first_name": "João",
    "last_name": "Souza",
    "email": "[email protected]",
    "is_admin": true
  },
  {
    "uuid": "5fef85a3-61e3-4e03-b6bd-ee544cd9bcdd",
    "first_name": "Joaquim",
    "last_name": "Ferreira",
    "email": "[email protected]",
    "is_admin": false
  },
  {
    "uuid": "5f2747f3-8899-49d9-b7f9-4ade850db837",
    "first_name": "Marcelo",
    "last_name": "Soares",
    "email": "[email protected]",
    "is_admin": false
  },
  {
    "uuid": "f09c6c88-6cd3-4ed9-b818-432e9f8df11c",
    "first_name": "Pedro",
    "last_name": "Martins",
    "email": "[email protected]",
    "is_admin": false
  }
]

Cadastrando um endereço para o usuário

PUT /api/address/

Esse endpoint deverá fazer a criação do endereço, caso ele não exista e associá-lo ao usuário logado:

// REQUEST
// Header -> Authorization: Token 'token-do-instrutor'
{
  "zip_code": "123456789",
  "street": "Rua das Flores",
  "house_number": "123",
  "city": "Curitiba",
  "state": "Paraná",
  "country": "Brasil"
}

Exemplo de resposta dessa rota:

{
  "uuid": "7bf9d19a-2c22-4daa-b7dc-30be78bf1047",
  "street": "Rua das Flores",
  "city": "Curitiba",
  "state": "Paraná",
  "zip_code": "123456789",
  "country": "Brasil",
  "users": [
    {
      "uuid": "38f8b8b7-8edc-4685-9369-643bb85169d2",
      "first_name": "John",
      "last_name": "Doe",
      "email": "[email protected]",
      "is_admin": false
    }
  ]
}

> Cursos


Registro

POST /api/courses/

Esse endpoint servirá para realizar a criação de cursos na plataforma Kanvas, somente instrutores poderão criar, atualizar, deletar e matricular estudantes nos cursos:

// REQUEST
// Header -> Authorization: Token 'token-do-instrutor'

{
  "name": "Django",
  "demo_time": "9:00",
  "link_repo": "https://gitlab.com/turma_django/"
}

Dessa requisição é esperado um retorno com os dados do curso cadastrado, como mostrado a seguir:

{
  "uuid": "7c32c787-83c3-4994-8f45-b6ef113cde5e",
  "name": "Django",
  "demo_time": "09:00:00",
  "created_at": "2022-02-15T19:12:44.914032Z",
  "link_repo": "https://gitlab.com/turma_django/",
  "instructor": null,
  "students": []
}

Listagem


GET /api/courses/

Este endpoint pode ser acessado por qualquer client (mesmo sem autenticação). A resposta do servidor deve trazer uma lista de cursos, mostrando cada aluno inscrito, no seguinte formato:

[
  {
    "uuid": "87556b7e-ac9a-4a8d-9b9f-c2ea7e956a94",
    "name": "Django",
    "demo_time": "09:00:00",
    "created_at": "2022-02-15T19:08:15.927682Z",
    "link_repo": "https://gitlab.com/turma_django/",
    "instructor": null,
    "students": [
      {
        "uuid": "5fef85a3-61e3-4e03-b6bd-ee544cd9bcdd",
        "first_name": "Joaquim",
        "last_name": "Ferreira",
        "email": "[email protected]",
        "is_admin": false
      }
    ]
  },
  {
    "uuid": "696e31d3-2dd4-42b5-9d2d-4f92035a13fb",
    "name": "Node",
    "demo_time": "09:00:00",
    "created_at": "2022-02-15T19:09:29.898611Z",
    "link_repo": "https://gitlab.com/turma_node/",
    "instructor": null,
    "students": [
      {
        "uuid": "5f2747f3-8899-49d9-b7f9-4ade850db837",
        "first_name": "Marcelo",
        "last_name": "Soares",
        "email": "[email protected]",
        "is_admin": false
      }
    ]
  },
  {
    "uuid": "787673a7-fa4e-4bb8-9ec1-eabbba02fca5",
    "name": "React",
    "demo_time": "09:00:00",
    "created_at": "2022-02-15T19:10:43.883684Z",
    "link_repo": "https://gitlab.com/turma_django/",
    "instructor": {
      "uuid": "61039ae4-7016-48d3-b90e-95a78b39e427",
      "first_name": "Maria",
      "last_name": "Joaquina",
      "email": "[email protected]",
      "is_admin": true
    },
    "students": [
      {
        "uuid": "5f2747f3-8899-49d9-b7f9-4ade850db837",
        "first_name": "Marcelo",
        "last_name": "Soares",
        "email": "[email protected]",
        "is_admin": false
      },
      {
        "uuid": "f09c6c88-6cd3-4ed9-b818-432e9f8df11c",
        "first_name": "Pedro",
        "last_name": "Martins",
        "email": "[email protected]",
        "is_admin": false
      }
    ]
  }
]

GET /api/courses/<id>/

Este endpoint pode ser acessado por qualquer client (mesmo sem autenticação). A resposta do servidor deve trazer o elemento filtrado pelo id do curso informado na url, e deverá ter o seguinte formato:

{
  "uuid": "87556b7e-ac9a-4a8d-9b9f-c2ea7e956a94",
  "name": "Django",
  "demo_time": "09:00:00",
  "created_at": "2022-02-15T19:08:15.927682Z",
  "link_repo": "https://gitlab.com/turma_django/",
  "instructor": null,
  "students": [
    {
      "uuid": "5fef85a3-61e3-4e03-b6bd-ee544cd9bcdd",
      "first_name": "Joaquim",
      "last_name": "Ferreira",
      "email": "[email protected]",
      "is_admin": false
    }
  ]
}

Atualização

PATCH /api/courses/<id>/

Esse endpoint servirá para fazermos atualizações dos curso,

A aplicação permite a atualização parcial sem perca de dados existentes:

{
  "name": "Node", // Campo opcional
  "demo_time": "8:00", // Campo opcional
  "link_repo": "https://gitlab.com/turma_node/" // Campo opcional
}

Exemplo de resposta dessa rota:

{
  "uuid": "7c32c787-83c3-4994-8f45-b6ef113cde5e",
  "name": "Node",
  "demo_time": "08:00:00",
  "created_at": "2022-02-15T19:12:44.914032Z",
  "link_repo": "https://gitlab.com/turma_node/",
  "instructor": null,
  "students": []
}

Cadastro de instrutor no curso

PUT /api/courses//registrations/instructor/

Esse endpoint será responsável pela inserção de um Instrutor no curso.

Essa rota sempre atualizará o instrutor no curso:

// REQUEST
// Header -> Authorization: Token 'token-do-instrutor'

{
  "instructor_id": "61039ae4-7016-48d3-b90e-95a78b39e427"
}

Resposta:

{
  "uuid": "87556b7e-ac9a-4a8d-9b9f-c2ea7e956a94",
  "name": "Django",
  "demo_time": "09:00:00",
  "created_at": "2022-02-15T19:08:15.927682Z",
  "link_repo": "https://gitlab.com/turma_django/",
  "instructor": {
    "uuid": "61039ae4-7016-48d3-b90e-95a78b39e427",
    "first_name": "Maria",
    "last_name": "Joaquina",
    "email": "[email protected]",
    "is_admin": true
  },
  "students": [
    {
      "uuid": "5fef85a3-61e3-4e03-b6bd-ee544cd9bcdd",
      "first_name": "Joaquim",
      "last_name": "Ferreira",
      "email": "[email protected]",
      "is_admin": false
    }
  ]
}

Cadastro de estudantes no curso

PUT /api/courses//registrations/students/

Esse endpoint será responsável pela matrícula de estudantes no curso.

A lista de estudantes matriculados no curso sempre será atualizada, conforme as informações são enviadas:

// REQUEST
// Header -> Authorization: Token 'token-do-instrutor'

{
  "students_id": [
    "5fef85a3-61e3-4e03-b6bd-ee544cd9bcdd",
    "5f2747f3-8899-49d9-b7f9-4ade850db837",
    "f09c6c88-6cd3-4ed9-b818-432e9f8df11c"
  ]
}

Resposta:

{
  "uuid": "87556b7e-ac9a-4a8d-9b9f-c2ea7e956a94",
  "name": "Django",
  "demo_time": "09:00:00",
  "created_at": "2022-02-15T19:08:15.927682Z",
  "link_repo": "https://gitlab.com/turma_django/",
  "instructor": {
    "uuid": "61039ae4-7016-48d3-b90e-95a78b39e427",
    "first_name": "Maria",
    "last_name": "Joaquina",
    "email": "[email protected]",
    "is_admin": true
  },
  "students": [
    {
      "uuid": "5fef85a3-61e3-4e03-b6bd-ee544cd9bcdd",
      "first_name": "Joaquim",
      "last_name": "Ferreira",
      "email": "[email protected]",
      "is_admin": false
    },
    {
      "uuid": "5f2747f3-8899-49d9-b7f9-4ade850db837",
      "first_name": "Marcelo",
      "last_name": "Soares",
      "email": "[email protected]",
      "is_admin": false
    },
    {
      "uuid": "f09c6c88-6cd3-4ed9-b818-432e9f8df11c",
      "first_name": "Pedro",
      "last_name": "Martins",
      "email": "[email protected]",
      "is_admin": false
    }
  ]
}

Deleção de Cursos

PUT DELETE /api/courses/<course_id>/

Este endpoint somente poderá ser acessado por um instrutor e ele realizará a exclusão do curso no sistema.

// REQUEST
// Header -> Authorization: Token 'token-do-instrutor'

Resposta:

// RESPONSE STATUS -> HTTP 204 NO CONTENT

kanvas's People

Contributors

nafly09 avatar danilodcn avatar github-classroom[bot] avatar

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.