Giter VIP home page Giter VIP logo

codeit-api's Introduction

Documentação CodeIt API

Sumario:

Usuários

Cadastro de usuário

Dados:

Campo Tipo de dado Requisitos Obrigatório
id String Apenas números sim
name String - sim
email String blablabla@blablabla sim
password String Ao menos 6 caracteres sim
is_teacher boolean - não (false por padrão)

Corpo da requisição:

Método: POST
Rota: /users

{
  "id": "20184906",
  "name": "Lucas Sônego",
  "email": "[email protected]",
  "password": "123456",
  "is_teacher": false
}

Para o cadastro de um professor basta enviar o campo is_teacher: true no corpo da requisição.

Corpo da resposta:

{
  "id": "20184906",
  "name": "Lucas Sônego",
  "email": "[email protected]",
  "is_teacher": false
}

Login

Dados

Campo Tipo de dado Requisitos Obrigatório
email String blablabla@blablabla sim
password String Ao menos 6 caracteres sim

Corpo da requisição:

Método: POST
Rota: /sessions

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

Corpo da resposta:

{
  "user": {
    "id": "20184906",
    "name": "Lucas Sônego",
    "email": "[email protected]",
    "is_teacher": false
  },
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM..."
}

Validação de autenticação

Corpo da requisição:

Método: GET
Rota: /sessions
Query params (opcional): newtoken: true, retorna um novo token de autenticação O cabeçalho da requisição deve conter o token de autenticação.

Corpo da resposta:

Sem query string:
{
  "user": {
    "id": "20184906",
    "name": "Lucas Sônego",
    "email": "[email protected]",
    "is_teacher": false
  },
}
Com newtoken=true
{
  "user": {
    "id": "20184906",
    "name": "Lucas Sônego",
    "email": "[email protected]",
    "is_teacher": false
  },
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEyMzQ1NiIsImlhdCI6MTU4Nzc1ODMwMywiZXhwIjoxNTg4MzYzMTAzfQ.UtWJ0_Xz2kKU9feCI9lf72U1sB9dfAv5M5ffUjOI5JI"
}

Editar dados

Para as requisições de edição de dados, podem ser enviados apenas os campos que serão alterados

Dados

Campo Tipo de dado Requisitos Obrigatório
name String - não
email String blablabla@blablabla não
oldPassword String Corresponder a senha antiga deste usuário Apenas quando o campo password for enviado
password String Ao menos 6 caracteres não
is_teacher boolean - não

Corpo da requisição:

Método: PUT
Rota: /users
O cabeçalho da requisição deve conter o token de autenticação.

{
  "email": "[email protected]",
  "oldPassword": "123456",
  "password": "654321",
  "is_teacher": true
}

Corpo da resposta:

{
  "id": "20184906",
  "name": "Lucas Sônego",
  "email": "[email protected]",
  "is_teacher": true
}

Listar

Listar todos os usuários

Método: GET
Rota: /users
O cabeçalho da requisição deve conter o token de autenticação.

Listar apenas os professores ou estudantes

Método: GET
Rota: /users
Query params: type=teachers ou type=students
O cabeçalho da requisição deve conter o token de autenticação.

Corpo da resposta:

Com type=students ou sem query params:
[
  {
    "id": "1",
    "name": "Usuario 1",
    "email": "[email protected]",
    "is_teacher": false
  },
  {
    "id": "2",
    "name": "Usuario 2",
    "email": "[email protected]",
    "is_teacher": false
  },
  {
    "id": "3",
    "name": "Usuario 3",
    "email": "[email protected]",
    "is_teacher": true
  }
]
Com type=teachers
[
  {
    "id": "1",
    "name": "Professor 1",
    "email": "[email protected]",
    "is_teacher": true,
    "disciplines": [
      {
        "id": "2020D1",
        "name": "Disciplina 1"
      }
    ]
  },
  {
    "id": "2",
    "name": "Professor 2",
    "email": "[email protected]",
    "is_teacher": true,
    "disciplines": [
      {
        "id": "2020D2",
        "name": "Disciplina 2"
      },
      {
        "id": "2020D3",
        "name": "Disciplina 3"
      }
    ]
  }
]

Disciplinas

Criar disciplina

Campo Tipo de Dado Requisitos Obrigatório
id String identificação única sim
name String - sim

Corpo da requisição

Método POST
Rota /disciplines

O cabeçalho deve conter o token de autenticação de um usuário que seja professor

{
  "id": "2020D1",
  "name": "Disciplina 1"
}

Corpo da resposta

{
  "id": "2020D1",
  "name": "Disciplina 1",
  "teacher": {
    "id": "1",
    "name": "Professor 1",
    "email": "[email protected]"
  }
}

Editar disciplina

Campo Tipo de dado Requisitos Obrigatório
name String - não
newTeacher String id válido, e de um usuário que seja professor não

Corpo da requisição

Método: PUT
Rota: /disciplines/2020D1 *id da disciplina que deseja editar

O cabeçalho da requisição deve conter o token de autenticação do professor desta disciplina

{
  "name": "Novo nome",
  "newTeacher": "2"
}

Corpo da resposta

{
  "id": "2020D1",
  "name": "Novo nome",
  "teacher": {
    "id": "2",
    "name": "Professor 2",
    "email": "[email protected]"
  }
}

Listar disciplinas

Listar todas as disciplinas

Método: GET
Rota: /disciplines
O cabeçalho da requisição deve conter um token válido, que pode ser tanto de um professor quanto de um estudante.

Buscar disciplinas de um único professor

Método: GET
Rota: /disciplines
Query params (opcionais):
teacher=231412 *id do professor: Lista apenas as disciplinas do professor buscado.
id=2020D1 *id da disciplina: Retorna dados da disciplina buscada, e lista todos os estudantes matriculados nesta disciplina

O cabeçalho da requisição deve conter um token válido, que pode ser tanto de um professor quanto de um estudante.

Corpo da resposta

Sem query string:

{
  "enrolled_disciplines": [
    {
      "id": "2020D1",
      "name": "Discipline 1",
      "teacher": {
        "id": "654321",
        "name": "Teacher 1",
        "email": "[email protected]"
      }
    }
  ],
  "disciplines": [
    {
      "id": "2020D2",
      "name": "Discipline 2",
      "teacher": {
        "id": "654321",
        "name": "Teacher 1",
        "email": "[email protected]"
      }
    },
    {
      "id": "2020D3",
      "name": "Discipline 3",
      "teacher": {
        "id": "234567",
        "name": "Teacher 2",
        "email": "[email protected]"
      }
    }
  ]
}

Com query teacher:

[
  {
    "id": "2020D1",
    "name": "Discipline 1",
    "teacher": {
      "id": "654321",
      "name": "Teacher 1",
      "email": "[email protected]"
    }
  },
  {
    "id": "2020D2",
    "name": "Discipline 2",
    "teacher": {
      "id": "654321",
      "name": "Teacher 1",
      "email": "[email protected]"
    }
  },
  {
    "id": "2020D3",
    "name": "Discipline 3",
    "teacher": {
      "id": "654321",
      "name": "Teacher 1",
      "email": "[email protected]"
    }
  }
]

Com query id (para o professor vinculado a disciplina):

{
  "id": "2020D1",
  "name": "Disciplina 1",
  "teacher": {
    "id": "654321",
    "name": "Teacher 1",
    "email": "[email protected]"
  },
  "enrollments": [
    {
      "created_at": "2020-04-20T15:31:33.477Z",
      "student": {
        "id": "1234",
        "name": "Estudante 1",
        "email": "[email protected]"
      }
    },
    {
      "created_at": "2020-04-20T15:32:21.477Z",
      "student": {
        "id": "4321",
        "name": "Estudante 2",
        "email": "[email protected]"
      }
    }
  ]
}

Com query id (para um estudante):

{
  "id": "2020D1",
  "name": "Disciplina 1",
  "teacher": {
    "id": "654321",
    "name": "Teacher 1",
    "email": "[email protected]"
  }
}

Deletar disciplina

Requisição

Método: DELETE
Rota: /disciplines/2020D1 *id da disciplina que deseja deletar

O cabeçalho da requisição deve conter o token de autenticação do professor desta disciplina

Resposta

{
  "message": "Disciplina removida com sucesso"
}

OBS: Deletar uma disciplina não irá apaga-la do banco de dados (soft delete), a disciplina apenas não será mais listada.

Matrículas

Efetuar matrícula

Requisição

Método: GET
Rota: /enrollments/2020D1 *id da disciplina

O cabeçalho da requisição deve conter o token de autenticação do estudante

Corpo da resposta

{
  "discipline_id": "2020D1",
  "student_id": "20184906",
  "createdAt": "2020-04-20T15:31:33.477Z"
}

Remover matrícula

Requisição

Método: DELETE
Rota: /enrollments/2020D1 *id da disciplina

O cabeçalho da requisição deve conter o token de autenticação do estudante matriculado

Corpo da resposta

{
  "message": "Matrícula removida"
}

Tarefas

Criar Tarefa

Corpo da requisição

Método: POST
Rota: /tasks/2020D1 *id da disciplina

O cabeçalho da requisição deve conter o token de autenticação do professor vinculado à disciplina em que a tarefa será criada

{
    "title": "Task 1",
    "description": "Description for task 1",
    "code": "function example()",
    "language": "javascript"
}
Campo Tipo de dado Requisitos Obrigatório
title String - sim
description String - sim
code String - não
language String - não

Corpo da resposta

{
  "id": "2020D1wAFgrq",
  "discipline": {
    "id": "2020D1",
    "name": "Test discipline 1",
    "teacher": {
      "id": "654321",
      "name": "Test Teacher",
      "email": "[email protected]"
    }
  },
  "title": "Task 1",
  "description": "Description for task 1",
  "code": "function example()",
  "language": "javascript"
}

Editar Tarefa

Corpo da requisição

Método: PUT
Rota: /tasks/2020D1 *id da disciplina

O cabeçalho da requisição deve conter o token de autenticação do professor vinculado à disciplina em que a tarefa foi criada

{
  "title": "Task 1",
  "description": "Description for task 1",
  "code": "function example()",
  "language": "javascript"
}
Campo Tipo de dado Requisitos Obrigatório
title String - não
description String - não
code String - não
language String - não

Corpo da resposta

{
  "id": "2020D1wAFgrq",
  "discipline": {
    "id": "2020D1",
    "name": "Test discipline 1",
    "teacher": {
      "id": "654321",
      "name": "Test Teacher",
      "email": "[email protected]"
    }
  },
  "title": "Task 1",
  "description": "Description for task 1",
  "code": "function example()",
  "language": "javascript"
}

Listar tarefas

Requisição

Método: GET
Rota: /tasks
Query params (opcionais):
discipline=2020D1 *id da disciplina
id=2020D1wAFgrq *id da tarefa

Corpo da resposta (sem query, para um estudante)

[
  {
    "id": "2020D1",
    "name": "Test discipline 1",
    "tasks": [
      {
        "id": "2020D1O0hsGW",
        "title": "Teste",
        "description": "Mussum Ipsum, cacilds vidis litro abertis.\r\n",
        "code": "function teste(){}",
        "language": "javascript",
        "closed_at": null,
        "answer": null
      }
    ]
  },
  {
    "id": "2020D2",
    "name": "Test discipline 2",
    "tasks": [
      {
        "id": "2020D2JwqUcr",
        "title": "Teste",
        "description": "Mussum Ipsum, cacilds vidis litro abertis.\r\n",
        "code": "function teste(){}",
        "language": "javascript",
        "closed_at": null,
        "answer": null
      },
      {
        "id": "2020D2di5mxL",
        "title": "Teste",
        "description": "Mussum Ipsum, cacilds vidis litro abertis.",
        "code": "function teste(){}",
        "language": "javascript",
        "closed_at": "2020-05-20T18:02:35.757Z",
        "answer": {
          "code": "function teste()",
          "language": "javascript",
          "feedback": null,
          "feedback_code": null,
          "feedback_at": null,
          "updated_at": "2020-05-18T00:10:48.309Z",
          "accepted_at": "2020-05-18T00:10:48.309Z",
        }
      }
    ]
  }
]

Corpo da resposta (sem query, para um professor)

[
  {
    "id": "TD1",
    "name": "Test Discipline 1",
    "tasks": [
      {
        "id": "TD1di5mxL",
        "title": "Task 1",
        "description": "Task 1 desctiption",
        "code": "function teste(){}",
        "language": "javascript",
        "created_at": "2020-05-17T22:20:50.982Z",
        "answers": [
          {
            "id": "TD1di5mxL123456",
            "code": "function test()",
            "language": "javascript",
            "feedback": null,
            "feedback_code": null,
            "feedback_at": null,
            "created_at": "2020-05-17T22:22:18.801Z",
            "updated_at": "2020-05-18T00:10:48.310Z",
            "accepted_at": "2020-05-18T00:10:48.309Z",
            "student": {
              "id": "123456",
              "name": "Test User",
              "email": "[email protected]"
            }
          },
          {
            "id": "TD1di5mxL112233",
            "code": "function test()",
            "language": "javascript",
            "feedback": null,
            "feedback_code": null,
            "feedback_at": null,
            "created_at": "2020-05-18T00:10:48.309Z",
            "updated_at": "2020-05-18T00:10:48.309Z",
            "accepted_at": null,
            "student": {
              "id": "112233",
              "name": "Test User 2",
              "email": "[email protected]"
            }
          }
        ]
      },
      {
        "id": "TD1JwqUcr",
        "title": "Task 2",
        "description": "Task 2 description",
        "code": "function test(){}",
        "language": "javascript",
        "created_at": "2020-05-19T01:44:06.797Z",
        "answers": []
      }
    ]
  },
  {
    "id": "TD2",
    "name": "Test Discipline 2",
    "tasks": [
      {
        "id": "TD2Mzc2NT",
        "title": "Tarefa respondida",
        "description": "tarefa respondida",
        "code": null,
        "language": null,
        "created_at": "2020-05-19T23:05:16.038Z",
        "answers": [
          {
            "id": "TD2Mzc2NT123456",
            "code": "function test()",
            "language": "javascript",
            "feedback": null,
            "feedback_code": null,
            "feedback_at": null,
            "created_at": "2020-06-18T17:02:17.238Z",
            "updated_at": "2020-06-19T20:56:18.500Z",
            "accepted_at": null,
            "student": {
              "id": "123456",
              "name": "Test User",
              "email": "[email protected]"
            }
          }
        ]
      }
    ]
  }
]

Corpo da resposta (com query discipline=2020D1)

{
  "open": [
    {
      "id": "2020D1JwqUcr",
      "title": "Teste",
      "description": "Mussum Ipsum, cacilds vidis litro abertis.",
      "code": "function teste(){}",
      "language": "javascript",
      "closed_at": null
    }
  ],
  "closed": [
    {
      "id": "2020D1di5mxL",
      "title": "Teste",
      "description": "Mussum Ipsum, cacilds vidis litro abertis.",
      "code": "function teste(){}",
      "language": "javascript",
      "closed_at": "2020-05-20T18:02:35.757Z"
    }
  ]
}

Corpo da resposta (com query id=2020D1JwqUcr)

{
  "id": "2020D1JwqUcr",
  "title": "Teste",
  "description": "Mussum Ipsum, cacilds vidis litro abertis.\r\n",
  "code": "function teste(){}",
  "language": "javascript",
  "closed_at": null,
  "discipline": {
    "id": "2020D1",
    "name": "Test discipline 1",
    "teacher": {
      "id": "654321",
      "name": "Test Teacher",
      "email": "[email protected]"
    }
  },
  "answer": {
    "id": "2020D1JwqUcr123456",
    "code": "function teste()",
    "language": "javascript",
    "feedback": null,
    "feedback_code": null,
    "feedback_at": "2020-05-18T00:10:48.309Z",  
    "accepted_at": "2020-05-18T00:10:48.309Z"
  },
  "user_enrolled": true
}

Fechar tarefa (não aceitar mais respostas)

Corpo da requisição

Método: DELETE
Rota: /tasks/2020D1wAFgrq *id da tarefa

O cabeçalho da requisição deve conter o token de autenticação do professor vinculado à disciplina em que a tarefa foi criada

Corpo da resposta

{
  "message": "Tarefa fechada com sucesso"
}

Reabrir tarefa (voltar a aceitar respostas)

Corpo da requisição

Método: PATCH
Rota: /tasks/2020D1wAFgrq *id da tarefa

O cabeçalho da requisição deve conter o token de autenticação do professor vinculado à disciplina em que a tarefa foi criada

Corpo da resposta

{
  "message": "Tarefa reaberta com sucesso"
}

Respostas

Enviar resposta

Corpo da requisição

Método: POST
Rota: /answers/2020D1JwqUcr *id da tarefa

O cabeçalho da requisição deve conter o token de autenticação de um estudante matriculadona disciplina em que a tarefa foi criada

{
    "code": "function example()"
}
Campo Tipo de dado Requisitos Obrigatório
code String - sim

Corpo da resposta

{
  "id": "2020D1JwqUcr20184906",
  "task": {
    "id": "2020D1JwqUcr",
    "title": "Title for the task",
    "description": "Description for the task",
    "code": "function exampleTask()",
    "closed_at": null
  },
  "code": "function example"
}

Editar resposta

Corpo da requisição

Método: PUT
Rota: /answers/2020D1JwqUcr *id da tarefa

O cabeçalho da requisição deve conter o token de autenticação de um estudante matriculadona disciplina em que a tarefa foi criada

{
    "code": "function example()"
}

Corpo da resposta

{
  "id": "2020D1JwqUcr20184906",
  "task": {
    "id": "2020D1JwqUcr",
    "title": "Title for the task",
    "description": "Description for the task",
    "code": "function exampleTask()",
    "closed_at": null
  },
  "code": "function example"
}

Buscar resposta

Corpo da requisição (busca por meio do id da tarefa)

Método: GET
Rota: /answers/2020D1JwqUcr *id da tarefa

O cabeçalho da requisição deve conter o token de autenticação de um estudante matriculadona disciplina em que a tarefa foi criada

Corpo da resposta

{
  "code": "function example()",
  "language": "javascript",
  "feedback": "Nice",
  "feedback_code": null,
  "feedback_at": "2020-05-18T00:10:48.309Z",
  "accepted_at": "2020-05-18T00:10:48.309Z",
  "updated_at": "2020-05-18T00:09:23.623Z",
  "student": {
    "id": "123456",
    "name": "Test User",
    "email": "[email protected]"
  }
}

Corpo da requisição (busca por meio do id da resposta)

Método: GET
Rota: /answers
Query params: id: TD2-5123456 *id da resposta

O cabeçalho da requisição deve conter o token de autenticação de um estudante matriculadona disciplina em que a tarefa foi criada

Corpo da resposta

{
  "id": "TD2-5123456",
  "code": "function teste(parametro) {\n  if (parametro === \"teste\") {\n    console.log(\"teste\");\n  }\n}\n\nteste(\"teste\");",
  "language": "javascript",
  "feedback": null,
  "feedback_code": null,
  "feedback_at": null,
  "created_at": "2020-06-18T17:02:17.238Z",
  "updated_at": "2020-06-19T20:56:18.500Z",
  "accepted_at": null,
  "task": {
    "id": "TD2-5",
    "title": "Tarefa teste 5",
    "description": "tarefa teste 5",
    "code": "function teste()",
    "language": null,
    "closed_at": "2020-06-29T19:09:52.880Z",
    "discipline": {
      "id": "TD2",
      "name": "Testes de Tarefas",
      "teacher": {
        "id": "654321",
        "name": "Test Teacher",
        "email": "[email protected]"
      }
    }
  },
  "student": {
    "id": "123456",
    "name": "Test User",
    "email": "[email protected]"
  }
}

Feedback

Enviar feedback

Corpo da requisição

Método: PUT
Rota: /feedback/2020D1JwqUcr20184906 *id da resposta

O cabeçalho da requisição deve conter o token de autenticação do professor vinculado à disciplina em que a tarefa foi criada

{
  "feedback": "Some feedback",
  "code": "function someCode()",
  "accepted": true
}
Campo Tipo de dado Requisitos Obrigatório
feedback String - não
code String - não
accepted Boolean - não

Corpo da resposta

{
  "id": "2020D1JwqUcr20184906",
  "code": "function example()",
  "feedback": "Some feedback",
  "feedback_code": "function someCode()",
  "accepted_at": "2020-05-18T00:10:48.309Z"
}

Listar respostas com feedback

Requisição

Método: GET
Rota: /feedback

O cabeçalho da requisição deve conter um token de autenticação.

Corpo da resposta (para um estudante)

(Lista os feedbacks de todas as respostas enviadas pelo estudante)

[
  {
    "id":"TD1di5mxL123456",
    "code": "function answer()",
    "language": "javascript",
    "feedback": "All ok",
    "feedback_code": null,
    "feedback_at": "2020-06-24T20:43:14.510Z",
    "accepted_at": "2020-06-24T20:43:14.510Z",
    "updated_at": "2020-05-11T00:06:07.775Z",
    "task": {
      "id": "TD1di5mxL",
      "title": "Test",
      "description": "test",
      "code": "function test(){}",
      "language": null,
      "closed_at": null,
      "discipline": {
        "id": "TD1",
        "name": "Test discipline 1"
      }
    }
  }
]

Corpo da resposta (para um professor)

(Lista todos os feedbacks enviados por esse professor)

[
  {
    id: "TD1di5mxL123456",
    code: "function answer()",
    language: "javascript",
    feedback: "All ok",
    feedback_code: null,
    feedback_at: "2020-06-24T20:43:14.510Z",
    accepted_at: "2020-06-24T20:43:14.510Z",
    updated_at: "2020-05-11T00:06:07.775Z",
    student: {
      id: "123456",
      name: "Test User",
      email: "[email protected]"
    },
    task: {
      id: "TD1di5mxL",
      title: "Test",
      description: "test",
      code: "function test(){}",
      language: null,
      closed_at: null,
      discipline: {
        id: "TD1",
        name: "Test Discipline 1"
      }
    }
  }
];

codeit-api's People

Contributors

lucassonego avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  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.