Git Product home page Git Product logo

devotion-backend's Introduction

D. E. V. O. T. I. O. N.

Development Environment for the Visualization of Organizational Tasks Inspired Obviously by Notion

Setup del back end

Requiere Python 3.9 o superior.

pip install -r requirements.txt
gunicorn devotion.wsgi

API bonita

☆ = Requiere autenticación de token Bearer.

Para crear o actualizar un recurso, el usuario debe ser líder del proyecto papá. La única excepción a esto es PUT /tasks/<id>/status/, que puede ser ejecutado por cualquier miembro del proyecto. Ser un superuser sobrepasa todas estas restricciones.

  • GET /test/ - Hola, mundo

Users

Projects

Tasks

Dashboard (Aún no tan)

  • GET /projects/<id>/dashboard/ - Obtener dashboard del proyecto
  • POST /projects/<id>/dashboard/widgets/ - Crear widget
  • PUT /projects/<id>/dashboard/widgets/ - Actualizar widget
  • POST /projects/<id>/dashboard/sources/ - Crear fuente de datos

Users

POST /users/ - Crear usuario

Entrada

  • email
  • password
  • first_names
  • last_names

Salida

{
  "id": 1,
  "token": "eyJ0..."
}

POST /login/ - Iniciar sesión

Entrada

  • email
  • password

Salida

{
  "access": "eyJ0...",
  "refresh": "eyJ0..."
}

GET /users/ - Obtener todos los usuarios ☆

Salida

[
  {
    "id": "e729a80d-0033-4e0e-8891-20085212b445",
    "email": "[email protected]",
    "firstNames": "Sergio",
    "lastNames": "Pérez"
  },
  {
    "id": "42e74cee-497c-41f5-834e-ac3578229cb6",
    "email": "[email protected]",
    "firstNames": "Lewis",
    "lastNames": "Hamilton"
  },
  ...
]

GET /me/ - Obtener usuario ☆

Salida

{
  "id": "e729a80d-0033-4e0e-8891-20085212b445",
  "email": "[email protected]",
  "firstNames": "Sergio",
  "lastNames": "Pérez"
}

PUT /me/ - Actualizar usuario ☆

Entrada

  • email (opcional)
  • first_names (opcional)
  • last_names (opcional)

GET /me/projects/ - Obtener proyectos del usuario ☆

Salida

[
  {
    "id": "4bfca576-83d2-447a-9b79-cdc778417c84",
    "name": "FSAE 2024",
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin volutpat tortor eget lacus ultricies, nec ullamcorper risus viverra. Pellentesque non ultrices nibh."
  },
  ...
]

GET /me/calendar/ - Obtener calendario global del usuario ☆

Salida

Nota: las fechas son arreglos de dos números, que representan la posición de la tarea (o tareas) en la matriz del calendario.

{
  "tasks": [
    {
      "date": [
        0,
        1
      ],
      "tasks": [
        {
          "id": "f8ed4488-0fbc-44b4-9b96-c626caf6a44a",
          "name": "Junta inicial 123",
          "status": 2,
          "priority": 0
        },
        ...
      ]
    },
    ...
  ],
  "today": [
    1,
    5
  ]
}

Projects

POST /projects/ - Crear proyecto ☆

Entrada

  • name
  • description
  • parent (opcional) - ID del proyecto papá
  • leaders - IDs de usuarios líderes separados por ","
  • members - IDs de usuarios miembros separados por ","

GET /projects/<id>/ - Obtener proyecto

Query params

  • get - Para obtener respuestas parciales de solo la información del proyecto o solo las tareas del mismo (sí ahorra mucho tiempo).
    • Opciones: info, tasks, all, default es all
  • view - Cambia el formato de la respuesta para facilitar el front.
    • Opciones: table, kanban, calendar, default es table
  • assigned - Mostrar solo tareas asignadas al usuario. Si la request no tiene autenticación, este parámetro se ignora.
    • Opciones: true, false, default es false
  • subtree - Mostrar todo el subárbol de tareas debajo del proyecto actual.
    • Opciones: true, false, default es false

Salida

Parámetros default:

{
  "id": "887ebfdd-bd39-417c-9b42-90396c2b8e59",
  "name": "Chasis",
  "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin volutpat tortor eget lacus ultricies, nec ullamcorper risus viverra. Pellentesque non ultrices nibh.",
  "breadcrumbs": [
    [
      "4bfca576-83d2-447a-9b79-cdc778417c84",
      "FSAE 2024",
      false
    ],
    ...
  ],
  "projects": [
    {
      "id": "169bdff0-30d5-4b7f-ad7a-c2793a1a7328",
      "name": "Cockpit",
      "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin volutpat tortor eget lacus ultricies, nec ullamcorper risus viverra. Pellentesque non ultrices nibh."
    },
    ...
  ],
  "tasks": [
    {
      "id": "0191827d-1e38-4647-885c-aef73ea494b0",
      "name": "Peso y distribución",
      "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incidid.",
      "status": 3,
      "priority": 0,
      "startDate": "2024-02-13",
      "dueDate": "2024-02-21",
      "assignee": "Alexander Albon",
      "parentProject": "887ebfdd-bd39-417c-9b42-90396c2b8e59",
      "parentTask": null
    },
    ...
  ],
  "progress": 50
}

Ejemplo con get=tasks&view=calendar:

Nota: las fechas son arreglos de dos números, que representan la posición de la tarea (o tareas) en la matriz del calendario.

{
  "tasks": [
    {
      "date": [
        0,
        3
      ],
      "tasks": [
        {
          "id": "9bcfd443-9ff2-42cd-b69e-75aa032891e1",
          "name": "Diseño del chasis",
          "status": 0,
          "priority": 0
        },
        ...
      ]
    },
    ...
  ],
  "today": [
    1,
    5
  ]
}

Ejemplo con get=tasks&view=kanban:

{
  "tasks": {
    "notStarted": [
      {
        "id": "95a7529b-e750-4c2a-867c-cdb9b167ae34",
        "name": "Investigación de nuevos materiales para la construcción del chasis",
        "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incidid.",
        "priority": 1,
        "assignee": {
          "id": "f8c2280f-3840-490f-b85a-0779badd8f66",
          "name": "George Russell"
        }
      },
      ...
    ],
    "inProgress": [
      ...
    ],
    "inReview": [
      ...
    ],
    "done": [
      ...
    ]
  }
}

GET /projects/<id>/members/ - Obtener miembros del proyecto ☆

Salida

[
  {
    "id": "4fceb6df-d3ac-4f5a-b177-995ac5673d1a",
    "email": "[email protected]",
    "firstNames": "Valtteri",
    "lastNames": "Bottas"
  },
  ...
]

PUT /projects/<id>/ - Actualizar proyecto ☆

Entrada

  • name (opcional)
  • description (opcional)
  • parent (opcional) - ID del proyecto papá
  • leaders (opcional) - IDs de usuarios líderes separados por ","
  • members (opcional) - IDs de usuarios miembros separados por ","

DELETE /projects/<id>/ - Eliminar proyecto ☆


Tasks

POST /tasks/ - Crear tarea ☆

Entrada

  • name
  • description (opcional)
  • priority (opcional) - Entero. 0 es baja, 1 es media, 2 es alta, default es 0
  • start_date (opcional) - Fecha de inicio en formato YYYY-MM-DD, default es hoy, o due_date si ésta es del pasado
  • due_date - Formato YYYY-MM-DD
  • parent_project - ID del proyecto papá
  • parent_task (opcional) - ID de la tarea papá
  • assignee - ID del usuario asignado

GET /tasks/<id>/ - Obtener tarea

Query params

  • get - Para obtener respuestas parciales de solo la información de la tarea o solo las subtareas de la misma (sí ahorra mucho tiempo).
    • Opciones: info, tasks, all, default es all
  • view - Cambia el formato de la respuesta para facilitar el front.
    • Opciones: table, kanban, calendar, default es table
  • assigned - Mostrar solo tareas asignadas al usuario. Si la request no tiene autenticación, este parámetro se ignora.
    • Opciones: true, false, default es false
  • subtree - Mostrar todo el subárbol de tareas debajo de la tarea actual.
    • Opciones: true, false, default es false

Salida

Ejemplo con parámetros default:

{
  "id": "0191827d-1e38-4647-885c-aef73ea494b0",
  "name": "Peso y distribución",
  "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incidid.",
  "status": 3,
  "priority": 0,
  "startDate": "2024-02-13",
  "dueDate": "2024-02-21",
  "assignee": "Alexander Albon",
  "breadcrumbs": [
    [
      "4bfca576-83d2-447a-9b79-cdc778417c84",
      "FSAE 2024",
      false
    ],
    ...
  ],
  "tasks": [
    {
      "id": "0191827d-1e38-4647-885c-aef73ea494b0",
      "name": "Peso y distribución",
      "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incidid.",
      "status": 3,
      "priority": 0,
      "startDate": "2024-02-13",
      "dueDate": "2024-02-21",
      "assignee": "Alexander Albon",
      "parentProject": "887ebfdd-bd39-417c-9b42-90396c2b8e59",
      "parentTask": null
    },
    ...
  ]
}

Ejemplo con get=tasks&view=calendar:

Nota: las fechas son arreglos de dos números, que representan la posición de la tarea (o tareas) en la matriz del calendario.

{
  "tasks": [
    {
      "date": [
        0,
        3
      ],
      "tasks": [
        {
          "id": "9bcfd443-9ff2-42cd-b69e-75aa032891e1",
          "name": "Diseño del chasis",
          "status": 0,
          "priority": 0
        },
        ...
      ]
    },
    ...
  ],
  "today": [
    1,
    5
  ]
}

Ejemplo con get=tasks&view=kanban:

{
  "tasks": {
    "notStarted": [
      {
        "id": "95a7529b-e750-4c2a-867c-cdb9b167ae34",
        "name": "Investigación de nuevos materiales para la construcción del chasis",
        "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incidid.",
        "priority": 1,
        "assignee": {
          "id": "f8c2280f-3840-490f-b85a-0779badd8f66",
          "name": "George Russell"
        }
      },
      ...
    ],
    "inProgress": [
      ...
    ],
    "inReview": [
      ...
    ],
    "done": [
      ...
    ]
  }
}

PUT /tasks/<id>/ - Actualizar tarea ☆

Entrada

  • name (opcional)
  • description (opcional)
  • priority (opcional) - Entero. 0 es baja, 1 es media, 2 es alta, default es 0
  • start_date (opcional) - Fecha de inicio en formato YYYY-MM-DD, default es hoy, o due_date si ésta es del pasado
  • due_date (opcional) - Formato YYYY-MM-DD
  • parent_project (opcional) - ID del proyecto papá
  • parent_task (opcional) - ID de la tarea papá
  • assignee (opcional) - ID del usuario asignado

PUT /tasks/<id>/status/ - Cambiar estado de tarea ☆

Entrada

  • status - Entero. 0 es pendiente, 1 es en progreso, 2 es en revisión, 3 es completada

DELETE /tasks/<id>/ - Eliminar tarea ☆


Powered by SALAD, Society of Academic Labor and Application Development.

devotion-backend's People

Contributors

umactually avatar diego-hc avatar alexajro avatar andreabadillo14 avatar soosw avatar

Stargazers

 avatar

Watchers

 avatar  avatar

devotion-backend's Issues

Error on loading screen

The loading screen shows a random tip. However, this seems to cause errors that are shown in the browser console

image

In a project, leaders is not a subset of members

The 'members' many-to-many field in a project is supposed to represent both leaders and non-leaders.

  • Modify ProjectDeserializer in order to add any users of the leaders list that are not yet in the members list.
  • Migrate the database accordingly.

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.