Coder Social home page Coder Social logo

open-source-uc / bdd Goto Github PK

View Code? Open in Web Editor NEW
8.0 8.0 3.0 555 KB

Base de Datos Unificada y Comunitaria

Home Page: https://open-source-uc.github.io/bdd/

Python 92.84% Shell 3.13% Dockerfile 3.29% Makefile 0.73%
api fastapi mkdocs-material postgresql puc sqlmodel strawberry-graphql

bdd's People

Contributors

aenrione avatar agucova avatar benjavicente avatar fardust avatar nico-mac avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

bdd's Issues

Documentar setup

A pesar de que la Makefile hace prácticamente toda la pega, creo que es importante hacer algo de documentación del setup, que dependencias hay que instalar (poetry, Docker, etc) y cómo configurarse para contribuir (pre-commit, etc).

También se debieran eliminar los archivos del setup antiguo que fueron reemplazados por Docker.

Documentar modelos y endpoints

Falta aprovechar los docstrings para documentar las cosas. Por ejemplo, no está claro que un curso (course) es un ramo (subject) dictado en un semestre y sección en particular (es decir, el curso es el que uno cursa en un semestre y sección).

Añadir más enpoints y opciones para la api REST

Ahora para la mayoría de las cosas es para obtener la lista completa de elementos, lo ideal sería tener algunos endpoints y opciones adicionales como para búsqueda por nombre / código / id y además algunos parámetros para filtrar resultados.

Uso de context manager en patrón repetido

Si este patrón se repite mucho, demás se podría hacer un context para manejarlo:

# ./utils.py
from contextlib import asynccontextmanager

@asynccontextmanager
async def catch_exc(msg: str, *cleanup_fns: list[Callable]):
    try:
        yield
    except Exception:
          log.error(msg, code, exc_info=True)
          errors.add(code)
          for fn in cleanup_fns:
              fn()

# Ejemplos
with catch_exc(f"Cannot get requirements and syllabus for {code}", db_session.rollback):
   ...

No creo que esta versión que deje (y que no he probado) funcione para todos los casos, pero creo que se podría ver para simplificar el código 🤔

Originally posted by @benjavicente in #19 (comment)

Añadir documentos importantes y auxiliares

Todavía no hay licencia en el repo.

Además, se podrían añadir archivos de utilidad de GitHub, como los templates para PR e issues (idealmente no tan molestos para incentivar la colaboración).

Mejorar relación entre dependencias (poetry + docker)

Ahora mkdocs y fastapi están en el mismo pyproject.toml en las dependencias no dev. Esto hace que en producción se instalen dependencias que no son necesarias para la API, y que al crear los docs se instalen cosas de la API que los docs no necesitan.

Una opción para arreglar esto es separar las dependencias en 2 archivos (ej dejar la de los docs en docs/requirements.txt).
Los cambios que se hagan deberían reflejarse en los archivos Dockerfile correspondientes.

Implementar migraciones para manejar el schema de la BDD

Actualmente, cada vez que se inicia la aplicación se crean las todas las tablas mediante:

SQLModel.metadata.create_all(engine)

Esto crea las tablas con el SQL IF NOT EXISTS, es decir, si las tablas ya existen entonces no se modifican para alterar la columnas cuando surgen cambios en los modelos. Debe haber un manejo del estado/versionamiento del schema para permitir hacer cambios cuando sea necesario, sin tener que rehacer la BDD completamente de nuevo.

Probablemente la mejor solución sea usar Alembic (un motor de migraciones para SQLAlchemy). Como referecia dejo esta issue de SQLModel que explica como se puede realizar esta implementación.

Mejor readme y documentación de como colaborar

Hay que dejar el link a como contribuir al principio del readme, y probablemente halla que añadir una explicación de que es este proyecto, como funciona, y otros links de interés antes de mostrar los comandos de como correrlo.

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.