Git Product home page Git Product logo

api-exdev's Introduction

API ExDev

Esta es una API multipropósitos del club ExDev. La idea es que sea un sistema monolítico que se preocupe de todos los procesos que ocurren en el club, y que todos los sistemas que se creen a futuro beban de esta, y sean solo interfaces bonitas para lo que ocurre acá.

Preventivamente se decidició utilizar Rust con el framework Actix para este propósito, pero aún no es una idea fija.

Documentación

Existe una documentación hecha con rustdocs que puede ser compilada con cargo. Para poder leerla, ejecuta el siguiente comando:

cargo doc --open

Instrucciones para montar

Se necesita tener cargo, rust y todo el toolchain relacionado. Puedes instalar este toolchain siguiendo estas instrucciones.

La siguiente dependencia importante es SQLite3. Necesitas tener un archivo de ambiente que especifique la URL de conexion de la base de datos; o sea, el archivo donde se guardarán los datos.

La solución más sencilla es la creación de un archivo llamado data.db:

touch data.db # Archivo de base de datos SQLite3.
cp .env.example .env # Archivo de ambiente por defecto.

El último paso es correr las migraciones necesarias. Primero, instala la herramienta de terminal de SQLx con el siguiente comando:

cargo install sqlx-cli

Hecho esto, puedes correr las migraciones con el comando:

sqlx migrate run

Con el toolchain instalado, SQLite3 listo, y las migraciones hechas, simplemente corre el comando siguiente, y empieza a modificar el código a tu gusto:

cargo run

Esto es opcional! pero si te es cómodo que recompile el código conforme estás modificándolo, puedes hacerlo con cargo watch. Instálalo con el siguiente comando:

cargo install cargo-watch

Luego, puedes utilizarlo con un comando como el siguiente:

cargo watch -c -x run

api-exdev's People

Contributors

rafaelmoralesv avatar

Stargazers

w0ny avatar  avatar Victor U. Ramirez avatar

Watchers

Jorge Verdugo avatar

Forkers

im-fran

api-exdev's Issues

[FEAT] Documentación

El código, tal cual existe ahora, está en un lenguaje extraño para la mayoría de miembros, y posee una barrera de entrada muy alta!

Es importante generar documentación al respecto, y explicar partes de la API que no resulten claras en documentos que se mantengan relativamente al día, cosa de que este proyecto pueda ser mantenible con el tiempo.

Esto no solo se refiere a escribir comentarios en el código, pero es cierto que es algo que deberíamos hacer pronto!

[FEAT] Tests!

Ahora que ya tenemos un CRUD inicial y funcional, creo que es buen momento para empezar a incluir testing. Si seguimos expandiendo el código sin crear esta costumbre, probablemente este proyecto se vuelva inmantenible más temprano que tarde.

En este sentido, se adjuntan un par de recursos para poder implementar y decidir la mejor manera de agregar estas pruebas:

  1. Este video por parte de Roberto Huertas, parte de una serie de videos sobre Actix en español. Quizás esté desactualizado! debido a que lleva más de dos años arriba.
  2. La sección de pruebas en la documentación oficial de Actix.

[FEAT] Uso de Auth - token

Tu propuesta es relacionada a un problema? describe
Actualmente el funcionamiento de la API se hace sin autenticación de ningún tipo. El primer paso debería ser implementar una autenticación simple y uniforme. Es probable que prontamente se necesite complejizar de alguna u otra forma el proceso de autenticación para soportar distintos niveles de permisos, pero creo que en lo pronto no es necesario!

Describe la solución que te gustaría
La solución debería probablemente involucrar la creación de un API-TOKEN manualmente para cada usuario a utilizar la API, y no un método de autorización extraordinario como usuario y contraseña hacia un JWT.
Los detalles que considero actualmente son:

  • Los tokens deben, si o si, ser encriptados.
  • Los tokens deben estar acompañados por un nivel de autorización arbitrario. Probablemente se respete la misma mecánica de encargado y miembro de club, al menos en un principio. A nivel de implementación, esto puede tratarse con un Enum y ya, en caso de necesitarse nuevos roles, se pueden agregar al enum y jugar a recompilar.
  • El middleware debería simplemente rechazar el request si no existe la autorización, en vez de mostrar 404 o algo similar. Da igual ocultar información en principio.

Describe alternativas que hayas considerado
Pensé en un inicio el proceso de JWT, pero creo que habilitar endpoints para crear cuentas, recuperar contraseñas y quien sabe que otra cosa, lo hace muy difícil de manejar.

[FEAT] Uso de Docker

Tu propuesta es relacionada a un problema? describe

El proceso de montar la API no es tan directo como me gustaría.
Debería haber una forma de montarla de forma más sencilla a través de Docker / Docker compose.

Describe la solución que te gustaría

En vez de pasar por la cantidad de comandos necesarios, simplemente hacer algo tipo docker run en la terminal debería bastar para armar la API.

Describe alternativas que hayas considerado

Ninguna en particular

Contexto adicional

Ningún contexto adicional.

[FEAT] Plataforma estudiantil exdev

Tu propuesta es relacionada a un problema? describe

El club está en proceso de crear una nueva plataforma, vista en este repositorio. Parte importante de la funcionalidad de este repositorio será provista por la API, según entiendo. Aún falta discusión, pero me gustaría empezar a ver historias de usuario que crear acá.

Describe la solución que te gustaría

Existen dos cosas importantes: un repositorio donde los alumnos suben archivos relevantes; por ejemplo, archivos en formador PDF; y un foro de discusión a nivel de curso y de archivo.

Describe alternativas que hayas considerado

El repositorio creo que debería ser indexado con el algorito TF-IDF para proporcionar una forma de búsqueda por términos.

Los comentarios debería tener las siguientes propiedades:

  • Autor
  • Creación
  • Contenido (formato Markdown)
  • Curso donde se comentó
  • Archivo donde se comentó (nulo en caso de ser un comentario sobre el curso).
  • Comentario al que está respondiendo (genera una especie de árbol de comentarios).

Contexto adicional

Ver las reuniones en Notion.

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.