|
1 | 1 | --- |
2 | 2 | title: "Trabajo Final Integrador" |
3 | | -subject: "Placeholder" |
| 3 | +subject: "Enunciado" |
4 | 4 | titlepage: true |
5 | 5 | ... |
| 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