Skip to content

Commit

Permalink
Funcionalidad: definiciones + novedades
Browse files Browse the repository at this point in the history
  • Loading branch information
tanoinc committed Aug 31, 2017
1 parent 0d73205 commit f34720d
Show file tree
Hide file tree
Showing 15 changed files with 150 additions and 3 deletions.
1 change: 1 addition & 0 deletions inc/paquetes.tex
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,6 @@
\usepackage{tikz}
% \usepackage{fontspec}
\usepackage{csquotes}
\usepackage{multirow}
% - Índices
\usepackage[xindy]{imakeidx}
2 changes: 1 addition & 1 deletion main.tex
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
\appendix
\newpage
% - Bibliografía
\bibliographystyle{plain}
\bibliographystyle{unsrt}
\bibliography{src/bibliografia/lucianoc}
\newpage
% - Glosario
Expand Down
Binary file modified pdf/tesis.pdf
Binary file not shown.
2 changes: 1 addition & 1 deletion src/02-capitulo-2/marco_teorico_backend.tex
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,6 @@ \subsubsection{Lenguaje y \gls{framework}}

Finalmente, es importante destacar que \textit{Lumen} soporta (a través de \gls{php}) múltiples motores de bases de datos y el desarrollo se abstrae de las características particulares de ellos. Esto significa que se puede implementar por cualquier motor soportado por Lumen\footnote{Actualmente soporta: MySQL, Postgres, SQLite y SQL Server. \url{https://lumen.laravel.com/docs/5.4/database}}, siendo el cambio, totalmente transparente.

Por todas estas razones se elige a \textit{Lumen} como \gls{framework} de desarrollo para el proyecto \nombreApp. La versión que se utiliza es la 5.4.
Por todas estas razones se elige a \textit{Lumen} como \gls{framework} de desarrollo para el proyecto \nombreApp. La versión que se utiliza es la 5.4 (requiere \gls{php} 5.6 o superior).


3 changes: 3 additions & 0 deletions src/03-capitulo-3/_layout.tex
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,8 @@
\section{Capítulo III: Desarrollo}
\label{cap3}

\input{src/03-capitulo-3/introduccion}

\input{src/03-capitulo-3/funcionalidad}

\input{src/03-capitulo-3/modelo}
95 changes: 94 additions & 1 deletion src/03-capitulo-3/funcionalidad.tex
Original file line number Diff line number Diff line change
@@ -1,10 +1,97 @@
\subsection{Licencia}
\label{licencia}

Como se indica al comienzo del capítulo \ref{cap2}, una de las necesidades es la posibilidad de indicar que el software desarrollado sea libre para ser usado, copiado o modificado. Es por ello que se elige la licencia \gls{gnugpl} versión 3 para que aplique a este proyecto. Para llevar a cabo esto, se eligió como plataforma de distribución del código fuente a \gls{github} (utilizando \textit{git} como sistema de control de versiones).

Dentro de esta plataforma, el código de \nombreApp{} está dividido en dos:
\begin{itemize}
\item El \eng{backend}, con el desarrollo de la \gls{api} \gls{restful} en \textit{Lumen} (\gls{php}) ubicado en \url{https://github.com/tanoinc/mi-universidad-api}.
\item El \eng{frontend} con el código de la aplicación móvil para \textit{Ionic} en \url{https://github.com/tanoinc/mi-universidad-app}. Cabe destacar que el proyecto general está en la rama \textit{master}, mientras que el personalizado con la estética de la \unlp{} extiende a este y se encuentra en la rama \textit{unlp}.
\end{itemize}

Por otra parte, bajo esta licencia también es público el \eng{plugin} de \textit{Moodle} en \url{https://github.com/tanoinc/moodle-message_miuniversidad}\footnote{El nombre del repositorio es distitno respetando la nomenclatura de \eng{plugins} de \textit{Moodle}}.
Respecto a la personalización para \gls{siu} Guaraní (en \gls{chulupi}), quedará disponible para la comunidad de Universidades Nacionales, no pudiendo ser totalmente pública, debido a limitaciones en la licencia de \textit{Guaraní}.

Por último, este informe documental realizado con \textit{LaTeX} es público y está disponible en \url{https://github.com/tanoinc/tesis}. Queda libre como referencia para otras personas interesadas en el proyecto, o simplemente como modelo para la escritura del informe final en \textit{LaTeX}\footnote{El proyecto de \textit{LaTeX} creado por Cuesta Luengo y Carbone para su tesis, me ha servido como base para este informe. Disponible en \url{https://github.com/ncuesta/tesis}}.

\subsection{Funcionalidad}
\label{funcionalidad}

En este apartado se describe el funcionamiento del sistema: se revisan las distintas características que posee y la interacción entre sus distintos componentes.
Antes de continuar, se deben definir algunos conceptos que serán mencionados en varias ocasiones.

En primer lugar, a cada una de las características que tendrá \nombreApp{} se las refiere como \textit{puntos de integración} y a estos, se los definen como: una funcionalidad clave, genérica y transversal a cualquier servicio, que tiene el potencial de ser integrada en la aplicación.
Cabe destacar que hay una relación directa entre estos puntos y la definición de la \gls{api}, ya que estos serán expuestos a través de ella.

Por otro lado, se le llama \textit{servicios externos} (o servicios) a aquellos sistemas independientes (ajenos al proyecto) que tienen la capacidad de integrarse (o ya están integrados) a \nombreApp{}. Su comunicación se establece a través de la \gls{api} haciendo referencia a los \textit{puntos de integración}. Además, los usuarios tienen la posibilidad de añadir a sus cuentas personales, los servicios a los cuales estén interesados.

Con respecto a los usuarios, se indica como \textit{identificador externo} (o \textit{id externo}) al valor clave que identifica unívocamente al usuario dentro del servicio externo. \nombreApp provee de mecanismos para relacionar el usuario de la aplicación con el proveniente del servicio (en caso que se requiera).

\subsubsection{Noticias}
Por último, se denomina \textit{contextos} a las temáticas definidas por los \textit{servicios externos}. Estas permiten ser suscritas por los usuarios independientemente de si han añadido el servicio, definiendo un nivel más fino de granularidad. La suscripción a \textit{contextos} es la manera que tiene un usuario de indicar su interés por una temática y recibir toda la información relacionada a ella.
Los \textit{contextos} existen en el marco de un \textit{servicio} y su semántica es dada de acuerdo a la lógica de cada sistema. Dentro de la aplicación se los denomina \comillas{tema} o \comillas{temática}

A continuación, el informe comienza por definir los \textit{puntos de integración}.

\subsubsection{Novedades}
\label{funcionalidad_noticias}

Una de las características a implementar (referidas en la sección \ref{aplicaciones_utiles_existentes_novedades}) es la publicación y notificación de \textit{Novedades} (también referidas como noticias). Se detecta como factor común, que los sistemas y aplicaciones móviles analizadas, tienen algún componente de \textit{novedades} y sus atributos se pueden modelar de forma genérica. Se trata de uno de los principales \textit{puntos de integración}.

\paragraph{Aplicación móvil}
\label{funcionalidad_noticias_app}

Se destaca a las noticias como el ítem con mayor relevancia, siendo la primer pantalla en aparecer al abrir la aplicación (estando el usuario \textit{logueado}), ubicada en la pestaña \comillas{Inicio}.
Su modalidad de navegación secundaria es de \textit{lista} y \textit{tarjeta} (similar a aplicaciones como \textit{Facebook}, \textit{Instagram} y \textit{YouTube}).

\figura{03-capitulo-3/app_newsfeed.png}{Pantalla de inicio de \nombreApp{} (\eng{newsfeed}) }{app_newsfeed}{0.4}

El área donde se muestran las novedades se denomina \textit{newsfeed}. Cada una de ellas indica el título, fecha y contenido de la novedad, el servicio que la emite, el contexto (si existiera) y el alcance (global, de contexto y/o personal). Las noticias se muestran intercaladas una a continuación de la otra, de cualquier servicio y en orden por fecha descendente, siendo las más recientes, las que primero aparecen.

El alcance es representado por íconos dentro de la noticia:
\begin{itemize}
\item Un \comillas{mundo} representa que la novedad es global y puede ser vista por todos los que hayan añadido el servicio que la emite. Este tipo de noticias pueden ser útiles cuando desde el servicio externo se quiera notificar a todos sus usuarios. Por ejemplo, desde \textit{Guaraní} una facultad podría notificar a todos sus alumnos que cierto día hay asueto.
\item Una \comillas{etiqueta} indica que la noticia es enviada en el marco de un contexto. Esta novedad le aparecerá a los usuarios que estén suscritos a este. Por ejemplo, desde un sistema de aulas virtuales, en donde para su lógica, un contexto puede ser una materia, se podría enviar a todos los interesados en esa materia, el aviso de la publicación de una práctica.
\item Si no aparece ningún ícono, indica que el mensaje es personal: sólo lo verá el usuario al que esté dirigido.
\end{itemize}


\paragraph{API}
\label{funcionalidad_noticias_api}

Los métodos definidos para las novedades son:

\begin{itemize}
\item \textbf{POST /newsfeed}\footnote{Esto es solo demostrativo. La especificación completa en Swagger puede consultarse en \url{https://app.swaggerhub.com/apis/tanoinc/mi-universidad/1.0.0}}: Agrega una nueva \textit{novedad} a los \eng{newsfeed} de los usuarios interesados (a nivel de: destinatario, contexto y/o servicio externo).
\begin{itemize}
\item Ejemplo del cuerpo de una solicitud \gls{http} para enviar una noticia con notificación a los usuarios con identificación id\_externo 1, 2 y 3:
\begingroup
\jsonfile{src/codigo/03-capitulo-3/post_newsfeed_solicitud.json}
\captionof{listing}{Ejemplo de cuerpo JSON en solicitud de POST /newsfeed}.\label{codigo_post_newsfeed_solicitud}
\endgroup

\item Ejemplo de respuesta:
\begingroup
\jsonfile{src/codigo/03-capitulo-3/post_newsfeed_respuesta.json}
\captionof{listing}{Ejemplo de respuesta JSON de POST /newsfeed}.\label{codigo_post_newsfeed_respuesta}
\endgroup
\end{itemize}
\end{itemize}



\subsubsection{Calendario}
\label{funcionalidad_calendario}


\subsubsection{Contenidos}
\label{funcionalidad_contenidos}


\subsubsection{Notificaciones}
\label{funcionalidad_notificaciones}

Si bien se destaca a las notificaciones como una funcionalidad importante, estas no son consideradas \textit{punto de integración}.

\begin{itemize}
\item Globales
\begin{itemize}
Expand All @@ -19,3 +106,9 @@ \subsubsection{Noticias}
\item Con contexto asociado: Notifica a todos los usuarios interesados en el contexto.
\end{itemize}
\end{itemize}

\subsection{Autenticación de servicios externos}
\label{autenticacion_servicios_externos}

\subsubsection{Permisos}
\label{autenticacion_permisos}
2 changes: 2 additions & 0 deletions src/03-capitulo-3/introduccion.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
En este capítulo se detallan todas las características referentes a la creación y funcionalidad de la aplicación móvil. Se describen los aspectos técnicos del desarrollo enmarcados por los temas vistos en el capítulo anterior, ya no abordados genéricamente desde un marco teórico, sino particularizados concretamente en el proyecto \nombreApp.

2 changes: 2 additions & 0 deletions src/03-capitulo-3/modelo.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
\subsection{Modelo}
\label{modelo}
12 changes: 12 additions & 0 deletions src/codigo/03-capitulo-3/post_newsfeed_respuesta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"newsfeed" : {
"updated_at" : "2017-05-25 00:10:11",
"created_at" : "2017-05-25 00:10:11",
"global" : 0,
"id" : 1134,
"title" : "Título de la novedad",
"send_notification" : 1,
"content" : "Contenido del texto de la novedad"
},
"notification_push_data_uuid" : "e10adc-asda34-asdasdas-bbc"
}
12 changes: 12 additions & 0 deletions src/codigo/03-capitulo-3/post_newsfeed_respuesta.json~
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"newsfeed" : {
"updated_at" : "2017-08-25 00:10:11",
"created_at" : "2017-08-25 00:10:11",
"global" : 0,
"id" : 1134,
"title" : "Título de la novedad",
"send_notification" : 1,
"content" : "Contenido del texto de la novedad"
},
"notification_push_data_uuid" : "e10adc-asda34-asdasdas-bbc"
}
11 changes: 11 additions & 0 deletions src/codigo/03-capitulo-3/post_newsfeed_solicitud.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"title": "Título de la novedad",
"content": "Contenido del texto de la novedad",
"global": 0,
"send_notification": 1,
"recipients": [
"id_externo_1",
"id_externo_2",
"id_externo_3"
]
}
11 changes: 11 additions & 0 deletions src/codigo/03-capitulo-3/post_newsfeed_solicitud.json~
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"title": "Título de la novedad",
"content": "Contenido del texto de la novedad",
"global": 0,
"send_notification": 1,
"recipients": [
"id_externo_1",
"id_externo_2",
"id_externo_3"
]
}
Binary file added src/imagenes/03-capitulo-3/app_intro.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/imagenes/03-capitulo-3/app_login.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/imagenes/03-capitulo-3/app_newsfeed.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit f34720d

Please sign in to comment.