# Introduccion El proyecto se encuentra en: - https://ada.uprrp.edu/~diego.estrada1/CCOM/4027/db/ El codigo para el proyecto se encuentra en: - https://codeberg.org/stau/aecc-db/ ## Descripcion general Este sistema organiza la informacion relacionada a las transacciones de la Asociacion de Estudiantes de Ciencia de Computos (AECC) de la Universidad de Puerto Rico, Recinto de Rio Piedras. Este sistema tiene 4 tipos de datos fundamentales para su uso: - productos - transacciones - miembros de la AECC - actividades hechas por la AECC Un concepto implicito con el uso de este sistema es que todas estas transacciones ocurren desde la perspectiva de la cuenta de banco de la AECC. Entonces, por ejemplo, una transaccion registrada como debito, es un gasto de dinero por parte de la AECC. ### Productos Un producto es una entidad que tiene un costo, en centavos USD, y una descripcion. Por ejemplo, un producto podria ser: la membresia de la AECC, tendra un costo de 500 centavos y descripcion como "Membresia anual de la AECC." ### Transacciones Una transaccion tiene 3 partes importantes: - el iniciador de la transaccion - el registrador de la transaccion - la metadata de la transaccion #### Iniciador El iniciador es la persona que inicie la compra o adquiere el producto. Con el sistema actual, el iniciador tiene que ser miembro de la AECC. Esto se puede resolver creando un miembro "dummy" para registrar transacciones con entidades que no sean miembros de la AECC. #### Registrador El registrador es la persona que monitorea la compra. Este tiene la responsabilidad de verificar que el monto de ingreso o de gasto de la cuenta de la AECC sea pagado por completo. Es por esto que se requiere que esta persona sea miembro de la directiva de la AECC, sin excepciones. Ademas, se esta contemplando restringir los registradores de compra a solo: - Tesorero - Vice-presidente - Presidente #### Metadata En la metadata de la transaccion hay informacion como: - el producto - la cantidad que se compro - si la transaccion fue un gasto o un ingreso ### Miembro de la AECC Un miembro de la AECC puede verificar el estado de su cuenta, si esta activa o no simplemente visitando el area de "Members" de la pagina de inicio. Alli, tambien se pueden crear miembros nuevos. En el futuro, la AECC piensa tener esta area publica para que miembros de la AECC puedan verificar si tienen que pagar la subscripcion o no. Ademas, la AECC piensa implementar una manera de "log-in", que manejaria quienes tienen permiso para crear cuentas nuevas. Implicitamente, se registra una compra cada vez que se crea una cuenta nueva, por lo tanto, esto va a ser monitoreado por un integrante de la directiva de la AECC. ### Actividades de la AECC En el area de "Activities" en la pagina de inicio se pueden ver las actividades que la AECC ha hecho. En el futuro, pensamos tener un area de "activity-transactions" que nos deja ver todas las transacciones asociadas a una actividad. Esto nos seria muy util para encontrar cuanto se gasta o gana por actividad. ## Proposito del sistema Anterior a la implementacion de este sistema, la AECC mantenia los records de transacciones a mano y por google sheets. Esto no es muy eficiente y es muy tedioso. Ademas, como estudiantes de ciencia de computos, tenemos el conocimiento para resolver un problema justo como este. 3. Alcance del sistema ### Sistema actual (si fuera el caso) - No hay un sistema actual. ### Requisitos 1. Funcionales - El sistema debe crear, editar y borrar las transacciones de la AECC. - El sistema debe calcular cuando un usuario debe pagar la membresia. 2. No funcionales - El sistema debe ser facil de usar, ya que ese es uno de los problemas que encontramos con google sheets. - El sitema debe manejar la data de manera segura. - Rendimiento ## API Endpoints ### /api/v1/create/ ```txt https://ada.uprrp.edu/~diego.estrada1/CCOM/4027/db/api/v1/create/ ``` - permiso: ninguno[2][3] - metodo: `POST` - parametros: | Campo | Tipo | Descripcion | |---------------|----------|---------------------------------------------------| | `t` | `String` | Tabla en la que quieras crear una tupla.[4] | | `cents` | `int` | Cantidad de centavos para un `product`. | | `description` | `String` | Descripcion para un `product`. | - respuestas: - Exito: - 201: La tupla se inserto exitosamente. - Devuelve los valores de la tupla en la tabla. - Fallo: - 200: Error con el lenguaje de PHP.[5] - 400: Error con los parametros que se enviaron. - 500: Error insertando la tupla en la tabla. ### /api/v1/read/ ```txt https://ada.uprrp.edu/~diego.estrada1/CCOM/4027/db/api/v1/read/ ``` - permiso: ninguno[2][3] - metodo: `POST` - parametros: | Campo | Tipo | Descripcion | |---------------|----------|---------------------------------------------------| | `t` | `String` | Tabla en la que quieras buscar.[4] | | `id` | `int` | ID de la tupla que quieras buscar.[4] | | `q` | `String` | Texto que quieras buscar en atributos FULLTEXT. | - respuestas: - Exito: - 201: Se hizo la busqueda adecuadamente. - Devuelve los valores de las tuplas que se encontraron. - Fallo: - 200: Error con el lenguaje de PHP.[5] - 400: Error con los parametros que se enviaron. - 500: Error buscando tuplas en la tabla. ### /api/v1/update/ - method: `POST`[1] ### /api/v1/delete/ - method: `POST`[1] # Footer - [1]: Por restricciones de ADA, no se pueden hacer requests de `PUT` o `DELETE`. Por lo tanto, en este proyecto solo se utilizaran `GET` y `DELETE`. - [2]: Por restricciones de tiempo el API esta abierto a quien sea. - [3]: En el futuro, el permiso sera: `Treasurer`, `President`, `VicePresident`. - [4]: Las tablas disponibles son: - `board_member` - `member` - `activity_transaction` - `activity` - `transaction` - `logger` - `initiator` - `product` - [5]: Cuando ocurre un error con PHP, la respuesta vuelve como 200 y no hay manera de cambiar eso. - [6]: Como esta pagina es un "single page application", este request se ve mejor por `POST` para no afectar el URL de la pagina. Sin embargo, deberia ser por `GET`.