Skip to content

UmActually/Devotion-Backend

Repository files navigation

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": "sergioperez@example.com",
    "firstNames": "Sergio",
    "lastNames": "Pérez"
  },
  {
    "id": "42e74cee-497c-41f5-834e-ac3578229cb6",
    "email": "lewishamilton@example.com",
    "firstNames": "Lewis",
    "lastNames": "Hamilton"
  },
  ...
]

GET /me/ - Obtener usuario ☆

Salida

{
  "id": "e729a80d-0033-4e0e-8891-20085212b445",
  "email": "sergioperez@example.com",
  "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": "valtteribottas@example.com",
    "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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5

Languages