Skip to content

Commit 17baff1

Browse files
committed
[Cursada 2023] Primera versión del enunciado del TFI
1 parent a079671 commit 17baff1

1 file changed

Lines changed: 161 additions & 1 deletion

File tree

entregas/tfi/tfi.md

Lines changed: 161 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,165 @@
11
---
22
title: "Trabajo Final Integrador"
3-
subject: "Placeholder"
3+
subject: "Enunciado"
44
titlepage: true
55
...
6+
7+
En este Trabajo Final Integrador, buscaremos que apliques los conocimientos adquiridos en
8+
la materia para resolver un problema real, basado en un caso hipotético. El objetivo de la
9+
implementación que deberás hacer es tener un sistema que permita resolver las necesidades
10+
expuestas en este documento.
11+
12+
# Contexto
13+
14+
Estás a cargo del desarrollo de una aplicación de generación y gestión de links cortos, al
15+
estilo de [Bitly](https://bitly.com/), [T.ly](https://t.ly/), o [TinyURL](https://tinyurl.com/).
16+
El objetivo de esta aplicación web es brindar links cortos para URLs arbitrariamente largas,
17+
que puedan ser utilizados en redes sociales o cualquier comunicación online para compartir
18+
páginas web de manera sencilla.
19+
20+
En este documento se describirán los puntos principales y la funcionalidad mínima que la
21+
aplicación debe proveer, a la cual podrás agregar soporte para más acciones o interacciones,
22+
siempre respetando lo especificado aquí como base.
23+
24+
# Requisitos técnicos
25+
26+
El desarrollo debe realizarse utilizando el siguiente stack tecnológico:
27+
28+
* Una versión reciente de Ruby (`2.7` o superior).
29+
* La versión estable más reciente del framework Ruby on Rails (`7.1.2` al momento de escribir
30+
este documento).
31+
* Una base de datos SQLite para dar soporte de persistencia.
32+
33+
# Alcance
34+
35+
Deberás desarrollar una aplicación web para crear y gestionar links cortos llamada `chq.to`
36+
(que se lee _"Chiquito"_), que brindará las siguientes funcionalidades:
37+
38+
* Autenticación y registro (ver apartado **Gestión de usuarios**).
39+
* Creación y manejo de links cortos (ver apartado **Gestión de links**).
40+
* Acceso a los links cortos (ver apartado **Acceso a los links**).
41+
* Reportes de las estadísticas de los links (ver apartado **Reportes sobre los links**).
42+
43+
## Gestión de usuarios
44+
45+
`chq.to` deberá permitir que los usuarios se registren para poder gestionar sus links y
46+
acceder a los reportes. Para esto, la aplicación deberá brindar una interfaz de registro
47+
de usuarios que les permita crear su propio usuario, y luego mecanismos de autenticación
48+
y autorización que permitan que los usuarios se identifiquen y accedan a sus links. Cada
49+
link pertenece únicamente al usuario que lo creó y es únicamente ese usuario quien podrá
50+
modificar o borrar el link y visualizar la información relacionada a éste (estadísticas de
51+
acceso).
52+
53+
Cada usuario deberá tener, como mínimo, los siguientes atributos:
54+
55+
* Nombre de usuario (debe ser único)
56+
* Correo electrónico (debe ser único)
57+
* Contraseña
58+
59+
Los usuarios podrán borrarse, siendo únicamente el propio usuario quien podrá dar de baja
60+
(y borrar) su cuenta de la aplicación.
61+
62+
## Gestión de links
63+
64+
Cada usuario autenticado tendrá acceso a un tablero de control que le mostrará sus links
65+
cortos y le permitirá:
66+
67+
* Crear un link nuevo (automáticamente asociará al usuario como dueño del link).
68+
* Modificar un link existente.
69+
* Borrar un link existente.
70+
* Visualizar las estadísticas de acceso a un link existente.
71+
72+
Cada link corto tiene un código único o _slug_ que lo identifica, el cual es generado y
73+
asignado automáticamente por el sistema al momento de crear el link. El algoritmo usado
74+
para generar la secuencia de caracteres única para cada link queda a tu criterio, así como
75+
también las cadenas que se generen, pero siempre deberán respetarse caracteres que sean
76+
_seguros_ para ser utilizados en el _path_ de una URL según el protocolo HTTP. Lo mismo
77+
ocurre con el patrón de URL que se utilice para generar las URL públicas de los links, el
78+
cual deberá ser diseñado apuntando a ser lo más corto posible. De aquí en más llamaremos
79+
"URL única" a la URL pública que se utilizará para compartir un link corto. Por ejemplo,
80+
si un link tiene el _slug_ `dAFn2aB` y el patrón de URL a utilizar es `/l/:slug`,
81+
la _URL única_ de ese link será `https://chq.to/l/dAFn2aB`.
82+
83+
> _Nota: los links cortos pueden ser gestionados únicamente por el usuario que los creó (su
84+
dueño)._
85+
86+
### Tipos de links
87+
88+
Existen diferentes tipos de links cortos:
89+
90+
* Links regulares: son los links más básicos, pueden accederse públicamente y simplemente
91+
redirigen al visitante a la dirección de destino (previo registro del acceso para las
92+
estadísticas del link).
93+
* Links temporales: funcionan igual que los links cortos regulares, pero tienen además una
94+
fecha y hora de expiración. Pasada esa fecha y hora, el link seguirá existiendo en el
95+
sistema pero no funcionará más - es decir que cualquier acceso a su URL única retornará
96+
un código de respuesta HTTP `404 Not Found`.
97+
* Links privados: son links que, cuando un visitante que intenta accederlos mediante su
98+
URL única, le solicitan una clave (establecida por el usuario dueño del link) para
99+
acceder a la dirección de destino del link. Sólo si la clave que el visitante ingresa
100+
coincide con la que se estableció para el link, el visitante podrá acceder a la
101+
dirección de destino. En caso contrario, se le volverá a solicitar la clave sin permitir
102+
acceder a la dirección de destino.
103+
* Links efímeros: son links que solo pueden accederse una vez. Luego de esto, el link ya
104+
no funcionará más y cualquier acceso a su URL única retornará un código de respuesta
105+
HTTP `403 Forbidden`.
106+
107+
## Acceso a los links
108+
109+
Cualquier acceso a la URL única de un link, si se cumplen las condiciones necesarias
110+
acorde a lo especificado en el apartado **Tipos de links** para el tipo del link al que se
111+
está intentando acceder, generará una redirección HTTP (con un código de respuesta
112+
apropiado) cuyo destino será la URL de destino del link. Previamente a responder con la
113+
redirección, se deberá contabilizar el acceso al link junto con la información necesaria
114+
del acceso para poder almacenar lo que se requiera para poder brindar al usuario los
115+
reportes detallados en el apartado **Reportes sobre los links**. En caso que no se cumpla
116+
con las condiciones necesarias para poder acceder al link según su tipo, el intento de
117+
acceso no se contabilizará para las estadísticas.
118+
119+
En el caso de los links privados, la aplicación deberá presentar una página solicitando
120+
la clave del link para poder accederlo.
121+
122+
## Reportes sobre los links
123+
124+
Cada usuario podrá visualizar reportes detallados o sumarizados de las estadísticas de
125+
acceso a los links de los que sea dueño. Como mínimo, se deberán implementar estos
126+
reportes:
127+
128+
* Detalle de los accesos: deberá presentar un listado detallado de los accesos que tuvo el
129+
link. Para cada fila en el reporte, se deberá mostrar la fecha y hora, dirección IP
130+
desde la que se accedió. El reporte deberá permitir buscar por dirección IP o rango de
131+
fechas.
132+
* Cantidad de accesos por día: muestra la cantidad de accesos por cada día que tuvo el
133+
link.
134+
135+
## Consideraciones generales
136+
137+
* Se espera que todos los modelos tengan las validaciones adecuadas para asegurar la
138+
integridad de los datos.
139+
* Se deberá incluir un conjunto de datos de prueba para poder evaluar el sistema. Estos
140+
datos deberán generarse mediante el script `db/seeds.rb` del proyecto Ruby on Rails.
141+
* No se solicitará la implementación de un diseño visual para la interfaz de usuario. Se
142+
espera que la interfaz de usuario sea cómoda, entendible, y lo más intuitiva posible,
143+
pero no se solicitará para la entrega ningún tipo de librería ni interfaz en particular.
144+
* Se deberá documentar en el archivo `README.md` del raiz del proyecto cualquier decisión
145+
de diseño importante que se haya tomado, así como también se deberán dejar escritos
146+
los requisitos técnicos y los pasos (comandos) para hacer funcionar la aplicación.
147+
148+
# Modalidad de la entrega
149+
150+
El trabajo deberá realizarse de manera individual. Los trabajos entregados se compararán
151+
para encontrar posibles similitudes en su estructura que pudieran provenir de copias entre
152+
distintas entregas.
153+
154+
Esta entrega, además, es de caracter obligatorio, y su aprobación (en cualquiera de sus
155+
instancias) es condición necesaria para aprobar la cursada de la materia.
156+
157+
Tu trabajo tiene que estar versionado en un repositorio Git de GitHub, cuya URL deberás
158+
entregarnos mediante una tarea dedicada que publicaremos en el curso de la plataforma de
159+
Cátedras (Moodle). En caso que el repositorio sea privado, vamos a necesitar que nos
160+
brindes acceso al mismo para poder descargarlo y evaluarlo. Si esta es tu decisión, por
161+
favor consultá antes de la fecha límite de la entrega con el Jefe de Trabajos Prácticos
162+
para saber a qué usuarios de GitHub deberás brindarles acceso a tu repositorio.
163+
164+
Las fechas límite de entrega del trabajo fueron publicadas en el curso de la plataforma de
165+
Cátedras. No se admitirán entregas fuera de término.

0 commit comments

Comments
 (0)