AECC database project.
1# Introduccion
2
3El proyecto se encuentra en:
4 - https://ada.uprrp.edu/~diego.estrada1/CCOM/4027/db/
5
6El codigo para el proyecto se encuentra en:
7 - https://codeberg.org/stau/aecc-db/
8
9## Descripcion general
10
11Este sistema organiza la informacion relacionada a las transacciones de la
12Asociacion de Estudiantes de Ciencia de Computos (AECC) de la Universidad de
13Puerto Rico, Recinto de Rio Piedras. Este sistema tiene 4 tipos de datos
14fundamentales para su uso:
15- productos
16- transacciones
17- miembros de la AECC
18- actividades hechas por la AECC
19
20Un concepto implicito con el uso de este sistema es que todas estas
21transacciones ocurren desde la perspectiva de la cuenta de banco de la AECC.
22Entonces, por ejemplo, una transaccion registrada como debito, es un gasto de
23dinero por parte de la AECC.
24
25### Productos
26
27Un producto es una entidad que tiene un costo, en centavos USD, y una
28descripcion. Por ejemplo, un producto podria ser: la membresia de la AECC,
29tendra un costo de 500 centavos y descripcion como "Membresia anual de la AECC."
30
31### Transacciones
32
33Una transaccion tiene 3 partes importantes:
34- el iniciador de la transaccion
35- el registrador de la transaccion
36- la metadata de la transaccion
37
38#### Iniciador
39
40El iniciador es la persona que inicie la compra o adquiere el producto. Con el
41sistema actual, el iniciador tiene que ser miembro de la AECC. Esto se puede
42resolver creando un miembro "dummy" para registrar transacciones con entidades
43que no sean miembros de la AECC.
44
45#### Registrador
46
47El registrador es la persona que monitorea la compra. Este tiene la
48responsabilidad de verificar que el monto de ingreso o de gasto de la cuenta de
49la AECC sea pagado por completo. Es por esto que se requiere que esta persona
50sea miembro de la directiva de la AECC, sin excepciones. Ademas, se esta
51contemplando restringir los registradores de compra a solo:
52- Tesorero
53- Vice-presidente
54- Presidente
55
56#### Metadata
57
58En la metadata de la transaccion hay informacion como:
59- el producto
60- la cantidad que se compro
61- si la transaccion fue un gasto o un ingreso
62
63### Miembro de la AECC
64
65Un miembro de la AECC puede verificar el estado de su cuenta, si esta activa o
66no simplemente visitando el area de "Members" de la pagina de inicio. Alli,
67tambien se pueden crear miembros nuevos. En el futuro, la AECC piensa tener esta
68area publica para que miembros de la AECC puedan verificar si tienen que pagar
69la subscripcion o no. Ademas, la AECC piensa implementar una manera de "log-in",
70que manejaria quienes tienen permiso para crear cuentas nuevas. Implicitamente,
71se registra una compra cada vez que se crea una cuenta nueva, por lo tanto, esto
72va a ser monitoreado por un integrante de la directiva de la AECC.
73
74### Actividades de la AECC
75
76En el area de "Activities" en la pagina de inicio se pueden ver las actividades
77que la AECC ha hecho. En el futuro, pensamos tener un area de
78"activity-transactions" que nos deja ver todas las transacciones asociadas a una
79actividad. Esto nos seria muy util para encontrar cuanto se gasta o gana por
80actividad.
81
82## Proposito del sistema
83
84Anterior a la implementacion de este sistema, la AECC mantenia los records de
85transacciones a mano y por google sheets. Esto no es muy eficiente y es muy
86tedioso. Ademas, como estudiantes de ciencia de computos, tenemos el
87conocimiento para resolver un problema justo como este.
88
893. Alcance del sistema
90
91### Sistema actual (si fuera el caso)
92
93- No hay un sistema actual.
94
95### Requisitos
961. Funcionales
97 - El sistema debe crear, editar y borrar las transacciones de la AECC.
98 - El sistema debe calcular cuando un usuario debe pagar la membresia.
992. No funcionales
100 - El sistema debe ser facil de usar, ya que ese es uno de los problemas que
101 encontramos con google sheets.
102 - El sitema debe manejar la data de manera segura.
103 - Rendimiento
104
105## API Endpoints
106
107### /api/v1/create/
108
109```txt
110https://ada.uprrp.edu/~diego.estrada1/CCOM/4027/db/api/v1/create/
111```
112
113- permiso: ninguno[2][3]
114- metodo: `POST`
115- parametros:
116
117| Campo | Tipo | Descripcion |
118|---------------|----------|---------------------------------------------------|
119| `t` | `String` | Tabla en la que quieras crear una tupla.[4] |
120| `cents` | `int` | Cantidad de centavos para un `product`. |
121| `description` | `String` | Descripcion para un `product`. |
122
123- respuestas:
124 - Exito:
125 - 201: La tupla se inserto exitosamente.
126 - Devuelve los valores de la tupla en la tabla.
127 - Fallo:
128 - 200: Error con el lenguaje de PHP.[5]
129 - 400: Error con los parametros que se enviaron.
130 - 500: Error insertando la tupla en la tabla.
131
132
133### /api/v1/read/
134
135```txt
136https://ada.uprrp.edu/~diego.estrada1/CCOM/4027/db/api/v1/read/
137```
138
139- permiso: ninguno[2][3]
140- metodo: `POST`
141- parametros:
142
143| Campo | Tipo | Descripcion |
144|---------------|----------|---------------------------------------------------|
145| `t` | `String` | Tabla en la que quieras buscar.[4] |
146| `id` | `int` | ID de la tupla que quieras buscar.[4] |
147| `q` | `String` | Texto que quieras buscar en atributos FULLTEXT. |
148
149- respuestas:
150 - Exito:
151 - 201: Se hizo la busqueda adecuadamente.
152 - Devuelve los valores de las tuplas que se encontraron.
153 - Fallo:
154 - 200: Error con el lenguaje de PHP.[5]
155 - 400: Error con los parametros que se enviaron.
156 - 500: Error buscando tuplas en la tabla.
157
158### /api/v1/update/
159
160- method: `POST`[1]
161
162### /api/v1/delete/
163
164- method: `POST`[1]
165
166# Footer
167
168- [1]: Por restricciones de ADA, no se pueden hacer requests de `PUT` o
169 `DELETE`. Por lo tanto, en este proyecto solo se utilizaran `GET` y
170 `DELETE`.
171- [2]: Por restricciones de tiempo el API esta abierto a quien sea.
172- [3]: En el futuro, el permiso sera: `Treasurer`, `President`, `VicePresident`.
173- [4]: Las tablas disponibles son:
174 - `board_member`
175 - `member`
176 - `activity_transaction`
177 - `activity`
178 - `transaction`
179 - `logger`
180 - `initiator`
181 - `product`
182- [5]: Cuando ocurre un error con PHP, la respuesta vuelve como 200 y no hay
183 manera de cambiar eso.
184- [6]: Como esta pagina es un "single page application", este request se ve
185 mejor por `POST` para no afectar el URL de la pagina. Sin embargo, deberia
186 ser por `GET`.