From ed3e3fde40f655e0f5503daced3a63d33c3bff8d Mon Sep 17 00:00:00 2001 From: michumier Date: Sun, 12 Feb 2023 13:10:58 +0100 Subject: [PATCH 01/22] =?UTF-8?q?Documentaci=C3=B3n=201:=20Introducci?= =?UTF-8?q?=C3=B3n=20y=20metas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/01_introduction_and_goals.adoc | 80 +++++++++++------------------ 1 file changed, 29 insertions(+), 51 deletions(-) diff --git a/docs/01_introduction_and_goals.adoc b/docs/01_introduction_and_goals.adoc index 7bba443..8961c95 100644 --- a/docs/01_introduction_and_goals.adoc +++ b/docs/01_introduction_and_goals.adoc @@ -1,75 +1,53 @@ [[section-introduction-and-goals]] -== Introduction and Goals +== Introducción y metas [role="arc42help"] -**** -Describes the relevant requirements and the driving forces that software architects and development team must consider. These include -* underlying business goals, essential features and functional requirements for the system -* quality goals for the architecture -* relevant stakeholders and their expectations -**** +LoMap es una aplicación desarrollada por HappySw, en la que sus usuarios tendrán acceso a un mapa personalizado con los sitios de su interés dentro de la ciudad de Bruselas. + +La funcionalidad principal se basa en un mapa, en el cual el propio usuario podrá seleccionar y guardar sus locales o lugares favoritos para tenerlos siempre a mano. Estos lugares pueden ir desde tiendas, bares o los monumentos más icónicos de la capital belga. + +A diferencia de otras aplicaciones de mapas, LoMap permite al usuario que sea él el que decida que ver sobre su propio mapa, eliminando los lugares de menos interés, lo cual permite que sea muy práctico, tanto para los propios habitantes de la ciudad como para los turistas. -=== Requirements Overview +La aplicación respeta la privacidad de los clientes mediante los principios SOLID. + + +=== Descripción de los requisitos [role="arc42help"] **** -.Contents -Short description of the functional requirements, driving forces, extract (or abstract) -of requirements. Link to (hopefully existing) requirements documents -(with version number and information where to find it). - -.Motivation -From the point of view of the end users a system is created or modified to -improve support of a business activity and/or improve the quality. +Los principales requisitos funcionales de la aplicación serán: -.Form -Short textual description, probably in tabular use-case format. -If requirements documents exist this overview should refer to these documents. +* Los usuarios podrán marcar con chinchetas (temporal) los lugares de interés. +* El sistema almacenará y mostrará los lugares ya marcados anteriormente dependiendo de los datos que haya en el pod de cada usuario. +* Los usuarios podrán añadir tanto fotos, como comentarios en los lugares que hayan añadido. +* Los usuarios podrán agregar amigos para poder ver los lugares y comentarios que hicieron sobre los mismos. +* El mapa tendrá filtros, ya sea para filtrar los lugares por restaurantes o monumentos, o para ver los lugares favoritos de sus amigos. -Keep these excerpts as short as possible. Balance readability of this document with potential redundancy w.r.t to requirements documents. **** -=== Quality Goals +=== Objetivos de calidad [role="arc42help"] -**** -.Contents -The top three (max five) quality goals for the architecture whose fulfillment is of highest importance to the major stakeholders. We really mean quality goals for the architecture. Don't confuse them with project goals. They are not necessarily identical. -.Motivation -You should know the quality goals of your most important stakeholders, since they will influence fundamental architectural decisions. Make sure to be very concrete about these qualities, avoid buzzwords. -If you as an architect do not know how the quality of your work will be judged … +[options="header",cols="1,2,2"] +|=== +|Prioridad|Meta|Motivación +| 1 | Usabilidad | La aplicación debe ser fácilmente usable por cualquier usuario, con mucha o poca experiencia. +| 2 | Calidad | La aplicación debe satisfacer las necesidades del usuario de una forma correcta. +| 3 | Privacidad | El tratamiento de la información privada del usuario debe ser descentralizada, asegurando así su privacidad. +| 4 | Eficiencia | Al abrir la aplicación o seleccionar un elemento debe ser eficiente y sus tiempos de carga bajos. +|=== -.Form -A table with quality goals and concrete scenarios, ordered by priorities -**** === Stakeholders [role="arc42help"] -**** -.Contents -Explicit overview of stakeholders of the system, i.e. all person, roles or organizations that - -* should know the architecture -* have to be convinced of the architecture -* have to work with the architecture or with code -* need the documentation of the architecture for their work -* have to come up with decisions about the system or its development - -.Motivation -You should know all parties involved in development of the system or affected by the system. -Otherwise, you may get nasty surprises later in the development process. -These stakeholders determine the extent and the level of detail of your work and its results. - -.Form -Table with role names, person names, and their expectations with respect to the architecture and its documentation. -**** [options="header",cols="1,2,2"] |=== -|Role/Name|Contact|Expectations -| __ | __ | __ -| __ | __ | __ +|Rol/Nombre|Contacto|Expectativas +| Cliente | Interaccionan de manera directa con la aplicación, tienen un usuario y amigos y pueden visualizar los puntos de interés | El objetivo principal es que sea capaz de interactuar con la aplicación de forma intuitiva y de una manera cómoda para el usuario aún sin ser un usuario avanzado. +| Equipo de desarrollo | Los creadores de la aplicación, pueden modificarla y mejorarla | Trabajan para aprender las tecnologías necesarias para desarrollar el proyecto y funcionar como un equipo. +| Profesores | Interaccionan con el equipo de desarrollo para corregir posibles defectos | Esperan que la aplicación sea funcional y cumpla los requisitos requeridos. También proporcionan soporte en caso de que sea necesario para el equipo de desarrollo. |=== From c15b27365889453cd88496fd732cd4c952c48dd5 Mon Sep 17 00:00:00 2001 From: UO271588 Date: Sun, 12 Feb 2023 18:45:57 +0100 Subject: [PATCH 02/22] Documentacion_03: V0.1 --- docs/03_system_scope_and_context.adoc | 71 +++++++++----------------- docs/images/03_business_context.png | Bin 0 -> 24100 bytes docs/images/03_technical_context.png | Bin 0 -> 40295 bytes 3 files changed, 25 insertions(+), 46 deletions(-) create mode 100644 docs/images/03_business_context.png create mode 100644 docs/images/03_technical_context.png diff --git a/docs/03_system_scope_and_context.adoc b/docs/03_system_scope_and_context.adoc index 87e3464..994659a 100644 --- a/docs/03_system_scope_and_context.adoc +++ b/docs/03_system_scope_and_context.adoc @@ -1,66 +1,45 @@ [[section-system-scope-and-context]] == System Scope and Context +=== Contexto Empresarial [role="arc42help"] -**** -.Contents -System scope and context - as the name suggests - delimits your system (i.e. your scope) from all its communication partners -(neighboring systems and users, i.e. the context of your system). It thereby specifies the external interfaces. -If necessary, differentiate the business context (domain specific inputs and outputs) from the technical context (channels, protocols, hardware). +La aplicación LoMap consta de un Frontend y un Backend que se comunican con un sistema de PODs y una base de datos que contiene los lugares que se van a utilizar en la aplicación. -.Motivation -The domain interfaces and technical interfaces to communication partners are among your system's most critical aspects. Make sure that you completely understand them. +Los usuarios se comunicaran con el Frontend de la aplicación el cual se comunicara con el sistema de PODs externo a la aplicación para obtener la información del Usuario y sus lugares almacenados. El Frontend tambien se comunicara con el Backend de la aplicación para obtener la información de los lugares que almacena en Usuario en el POD. -.Form -Various options: +**Diagrama de Contexto Empresarial** -* Context diagrams -* Lists of communication partners and their interfaces. -**** +image:03_business_context.png["Business Context de la Aplicación"] +**Tabla de Contexto Empresarial** -=== Business Context - -[role="arc42help"] -**** -.Contents -Specification of *all* communication partners (users, IT-systems, ...) with explanations of domain specific inputs and outputs or interfaces. -Optionally you can add domain specific formats or communication protocols. - -.Motivation -All stakeholders should understand which data are exchanged with the environment of the system. - -.Form -All kinds of diagrams that show the system as a black box and specify the domain interfaces to communication partners. - -Alternatively (or additionally) you can use a table. -The title of the table is the name of your system, the three columns contain the name of the communication partner, the inputs, and the outputs. -**** - -**** +|=== +|Elemento de comunicacion|Input|Output +| Frontend | El Frontend recibe como entradas los datos solicitados al POD así como peticiones por parte del Usuario de diferentes pantallas de la pagina Web. Tambien recibe las respuestas de las peticiones al Backend de la aplicación. | Las salidas que proporciona el Frontend son peticiones al Backend de la aplicación para la obtencion de informacion sobre un lugar así como peticiones al POD para obtener información de los mapas de un usuario. Tambien proporciona una visualización al usuario de forma gráfica. +| Backend | Recibe como entradas las peticiones por parte del Frontend y las respuestas por parte de la BBDD | El Backend tiene como salidas las respuestas a las peticiones del Frontend y las peticiones de datos a la BBDD. +| BBDD | Como entrada tiene las peticiones de datos almacenados por parte del Backend de la aplicación | Como salidas devuelve los objetos solicitados o un mensaje de error en el caso de que no exista lo que el Backend solicita. +| POD | Como entrada el POD recibe una petición de obtencion de los datos de un Usuario | Como salida devuelve los datos del Usuario si está autorizada la petición o un mensaje de error en caso contrario. +| Usuario | El usuario visualiza de forma gráfica la petición que ha realizado al Frontend de la aplicación | El usuario solicita al Frontend la visualizacion de una pagina de la aplicación. +|=== **** -=== Technical Context +=== Contexto Técnico [role="arc42help"] -**** -.Contents -Technical interfaces (channels and transmission media) linking your system to its environment. In addition a mapping of domain specific input/output to the channels, i.e. an explanation with I/O uses which channel. - -.Motivation -Many stakeholders make architectural decision based on the technical interfaces between the system and its context. Especially infrastructure or hardware designers decide these technical interfaces. - -.Form -E.g. UML deployment diagram describing channels to neighboring systems, -together with a mapping table showing the relationships between channels and input/output. -**** +**Diagrama de Contexto Técnico** -**** +image:03_technical_context.png["Technical Context de la Aplicación"] -**** +**Mapeado de Input/Output a Canales** -**** +|=== +|Canal de comunicación|Input|Output +| SOLID-WebAPP | Se utiliza una comunicación HTTPS para solicitar datos a SOLID | Se utiliza una comunicación HTTPS para la obtención de la respuesta por parte de SOLID. +| _WebApp-RestAPI_ | Se utiliza una petición HTTPS desde la WebApp hacía la RestAPI | Se utiliza una respuesta HTTPS desde la RestAPI hacía la WebApp +| _RestAPI-MongoDB_ | Se utiliza una petición HTTPS desde la RestAP hacía la base de datos MongoDB online | Se devuelve una respuesta HTTPS por parte de la base de datos MongoDB hacía la RestAPI. +| _WebAPP-Usuario_ | La WebApp recibe una peticíon HTTP por parte del Usuario | La WebApp devuelve una pagina dinámica al Usuario por medio de una respuesta HTTP. +|=== diff --git a/docs/images/03_business_context.png b/docs/images/03_business_context.png new file mode 100644 index 0000000000000000000000000000000000000000..cd5e02ea2c796b056662638ff1cd02a88a2d1681 GIT binary patch literal 24100 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 G&i)Mmd3?G6 literal 0 HcmV?d00001 diff --git a/docs/images/03_technical_context.png b/docs/images/03_technical_context.png new file mode 100644 index 0000000000000000000000000000000000000000..0de27dbb84ec9b94907899a1f8f5cbe7dce9fb5d GIT binary patch literal 40295 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%0A;UcR06X_fX4AE} zQ4ySG;t4B!{z!lwb&2xaEVoIQO!(6m@wgUehYLdN3ypb83x= zs6&R-c$QOjOwLgHQJ^rc7rkSL%-f=O)TmC9QbMVpS1jot<|Z!nhMAtW?#{BZuVR*m zcGFPhpq#Bo(%KyU)hYx>-F6J`)sH9X4K6m-(o(Y3L!{I<=FtF2tAgc*I~gZ45M%~6 zFcKi*Uqne9nv&Gc!>eYoO}Ug0Q{a)8)z{72PHbMOEh+a9`I%CJ_K3 z#&(a-$6vX{Ccsz|Qa=QovQEcmuDB&E)t)v@iDw_0UwtQRpq5rbu3sY8e;wJ!H=k1) zxm_9=2`Cf1!qsnwNbac6ra&l^w!h?5_xAIGIHrAw;q~�z;)yOej=Nbn?m%6nfyd zVYHg6!~8eUhdlkfD^=$;fceT}6HxY)R?Nmvpg$c{H9aRa9{Is=*1brIyHr_Zl%zcEtY;ZMS@0?Fb?viZ1XzfAx0+h;ZfGp^L*NZpTp+%jO?vZzOC|)4T9_ zIeSo3?}Y;}#kLNCPPgNXjRLW%Um<5xRxiA81|*7s8qP?_kR0<~1`*F|+3(asL??uB z^@1$j;{G7?1>o}#kY63C>Xstv9KX-1%_u|$JQmW&+QB`OuXy<$BM?nJJrU%* zF>%(eUT_TY0VtLyAmf4~M6aX0QR~d5A^lAxH{bujd$wbcjyj9qU&^1a-ly$j`vaZ> z03`&Ji$zF0ts|mTZ+VeA@tg9ufm&u{O{&$g=kr<%9$JRx!|@QTlWgB5P)mN8@>FIs)?xRs{@2=yU^Ry>oMNB-Fm+)g zPNq+!&=AzOR1mASk=>f(6dGm2Lzevv97j#+fLAZ9x6ymrF9mlcxdDdh{=rA`zftS* z&IiaSpuhbgZ)%sxhTZMh$$)TP0BgD>YyP8rC+lyni8Gw+9MA0paDoh^cal34g3Nwl(P<@G6r6K0I&QE6W$F5mQ;v$198aGnITq1Zuz|sn%8WFaea;Qm zCE?0EcVb)vl@|Po)VZj$Yn3^?MB?6+pprk`A3nCZ*oXQD+xM9}^fYpK#Y@=dc#?{I2 zxuf<6mGiavgeIMBn07(=-MR*VZGfyZyZ3Xnd(E%v$?=A7$q*_9EaxAAQ|rASgDjFC zd;HturmtH>NSaGcFeNn39cMq3UAon$q?;9m_o-`7&^_tHyr?>@udK0Zwk_kGo}*`F z@Do>sM8n0GhHt_~Q^H;^R%h|67kTkPoJn|IjDe%YhDdaglmP+(*Ec@|3Sntvn_Nbx z1>QGl%rb1)axC6%$^^1C@Q-!HOY8w$UO5~BNW;JxNTwwrB0I+x8z8(^xK{_N1u~v{ip`QEd}yd#sKbR z&V^}(hO_?m!^2$w=vejDcoYPDEWs*pz$%!ij_>aMdjkqN0&1%8bmKjhvo4dHNGWmy zJir(kS-d#|*t2zupnI+v;R7gsqW~E~m5R2h1P+4Idemt$tvbrKe6LRTj~Kwy zmeo61Zg`QPRm9xepY)*I7_%|V>`rRnpwwF6OrpQK#E~yjq3#A1<)U90I1nvics*p^ z2(aW)7l$g)h5*T_5slcFI0?%?mt?gSh?MX9f zSkwAtjR<;WKz7AJBPmE(Q#61$krmR}7>JUyHhVq)+#sPpCNVh(m_R-;H;`4V0<%mft^(Z%RXPq6o7dWFbJUC- zw;(INiI@eRT2`x&2Tiu%^?Rgf6|-Gr5@n{iJW*fz2*(~$!vG8(YypYp@Fi9d*F8P19 zAM6DwQV~Q>ugk7XMS@#bq!G^IbKGRXron<{Rd9{6=5?KLQKKGe5OQSmb1T|-B2-_k z7;kR8UpHm~fHO=(osC+%+QkE7z$Adt7k8;?ix1~TZAW}mSZCU%y%Hc#JRBiS`r#e4 zy19O8bFhb*lx6j|9Yx23T#M5-t5iLk*nv~`<;0cex=5}FcqB%kXUDH+%>aT({niUm zgJ&T?jD_pD79t)3Oes{&8vU*x((<8PeX%OdOs6tx{c(^N(Koh=U8p{o?!QAASe6Rw;pa^oPd3-O;Y@3 zKVawK%vc(wx`c12eARaOPQQ>-u-m<(dF7i)T1?y%{x`76kSI{;R@V76tzy$1<{_sr z@^6!%BPSOHEp_Ay6M4v-pSQk3gdqMsKnJ*|3ZfA=Wi94XT0iKTf8Y|bAQ9BJ5YidE zkL*cailNt&K(jsCA|{KQ%tKC;r%#R+CKkBc*Ey~2+Da4!js9OWqf_@?IPm(KLOc4s z)^6i=FHy-u1C-x2J~kc2`$Uh4t^6(a1~xmefYVf}wgfV6d(`KBkzWyS?0E#5N$y0v z&qu00r)3P1h*&b+3z<$E<6%aE8f42GE;Ko{+SV;lkk{cV&!w&cG69kspHiE>2nx3^ zIx0cQO(?d5Snv%*h!N9p`lEP$Y{<|7?&-$G zA7Ik1*Jy;!@;9)ozK8j_(y4V4vQn8Bz8A03V9U#ZiE%Tyg3Eyzh z>rR=~0^q+-v!==da=8=PK}ywf&gg~`JnkG2YaQ|OiPBA^u7-~Ugyk*P0J_N-Kv`~Z z1>}HcGJ#w*0x356Ft<%8x8P1GN@*_vHLDF5w1nXtp>f(iENJByu_k{$y04k1Sj85*>6u;injaiEa?;JRez7ATZUWRZJ89^kV2+zfBvdXm0y6E`5{Ft8 z{3qxa^6-uK48hC~dB2HGA6CbKD27oa8tU8QmS+L;gt7S0rsxj)0}@j~xLkeYPrh1I zQ+2azF3Zdla1d*3Ach(F+eNW);Fo8eAm_iu_A2@$XkizZsTZ@f&*AvLE**#(+8mVF@y@^T z{8>tkRJ5Y~34FsUokU@jnlz*)`GBJ9-bboQ6s`1a$1=(Yq&*Xtd3%w~ zbKuQV?LbiBl6P`|m@pP!Y2h{B{*VvCe*kf%e~Hqc!P;O7jFbP(Th~G*|0iv+)WFxQ zTs-S(Vu<1|#dltAA@OhgAj(mGXM*7pj+i_e7o?PbqeUm4G-W!R|8skc*Y%mW7U&9- zkn;w8JVEr4Zzjtoj{u0w6||*cOntQ(_7VLNkZt`(Z%ME~|AM7l5kp0C{)ac3HC419 z6TTtm5E%QToUXNM0Y%I-3{wK#*q8v;ro52CjQAZdbPAaSk4hg<9Ewt)JTxC7{M<#& z{si1?_Si036-KQ#?|FKykUA1H~b%$UhhYE`_tEfFj^5pS|_7_l+MpOoM}<$v)pJ zAjyTM9GfG|kzOc~w*)lrM`P+_ETZKAsS3)w zQkS&sC09T%xEu{B)a?4zl@E`85j?uY&}mS@RxN%$Z%{(@dNj^TzNfaeP+4DF!86SK(63PXcF zJ|bVxGpA;KIe79e6XyF11o^-QF^E*q#sng3$RcEfaWIC&FHn+Si^Hj{0O@fUBK#Eh ziC!4lno)uVy;IG!V9Q&j5wf)yliq^+7=nI*G?DZil;y~IesK&p76TR&;f?f^D!~zik8TL?V#C1Sf7mh00 zy)wJ9QrN#(h)yfeWSM&7gjN6_@bzilHz*ANr@(nOjt2w;{>wttCq{M$_Zk9kp)qcT zPlFUV%0ag2;aH7J=K0{Qpw>}}5_hBmJd9u4{-Mo7WD7*9$s?*N5TDH35>-qah1xrvzzMOJiq_Oc9 zXtj)8_)ic%uYV@YtKKz$pnNq;$O8n%-9~(~&^FeqpTsgffM?6_yBa%*#Zaz)yD0K@ z%*mJq5J&8m)xN-UIN@~*=%RTzijp+5#r0IF7yvO(Twb-?{v`IjKvFdYVM-wXQVt*e z5=Nc4>$b`Tvn~K(&rb*V=&`U7z;FTWLcRankHt-)8eycXfo+v;`j_X5r?Z_}IPSKr zo7}3w7BlcYfE4R|{8j&QUw`2Quoa+@)RzGzEUmVLl_s*VIVq!5!{eHaP+GlBlY}Qc zb>2XDmn#t`g&qcwen1~qnQDLAVB>N7FU|;&ho#092|*kV6oxd})Pw*&TY*4T%gFM8 z8ydNsqNneV}XenqfDGV4bWlUCG(f%7xZn#VZ;LkI1eZpxVR%#%k^HbeWlx|%~q z<```Ax&%Q0hh4uhHGO^(SHcPzqZ)oBku4w$g$M{uo{-VXcWNEg2(gIK;rA!{J@s@Y z2F0A2xO zE&}7oD8u=OhOZtrzrA>37C_lm2ExjMAh4Mver>fWYw2R2Il*eiBO*8CergcsUBABS zzBRrdCZG6Zx{3)z39=`o;~cZ8)(ZJxHK;)-YbQo;vLMk+pP8!E#KtA zBNxXICHbw;#pGl32M0b#)Om9OFWnFHD;_M&O4h&M;&oZ<{dSRB@xwspC-ou6C`OLV z4CoK}JhdNm78byJJq=J}_e16`YDPbORdMFafZifC8dWH2OOPn-G=_mZwhjnb>uys$oexToSq&taC6dfpguu^ODPU5{ z$gyfa9r1cwBN2E|2;#^#yi?TFk@mIIvp38h;}&E9d2(D`w51l@h#4TcvfKnsbeRbd z?qcPO?uuimhyIapo~(DSDw+!p%!^V7PTHf+N0QE+p?&gE$k9ri-H-=-0LMVO;t7oD z9?*gsL{))wd&P~n#T&Ewd7c5fX0=8b#fwxgxWy>SnW|}eVtt2|J3p-raZkpe?3E5l%UwGCuNi!zs)HK{z z36|PUpOe>L1)d|95psj+RPo1Vn@NL^8{9`0?! zQiy$lL(+dCL#3M)Xu|g_ZeRiRH`=C{KR=@1erfI~KLe{5eb5CMGs2ZL0d{sh`=J-X z*a;r+APU@r0Tnc@U+JqS2K4;9p0b?-lOia9=?~lu_ONJ>17wz~!UWyxSB*;btth;C zk-XS|2brY7DgFYpRPOwDOF~=Hn1j_ZO(mc_v0H>_S6`#g_}j*b9c3eH(z{(6%w->D z2s<3-17UITaL8ZC1<{KBK|Nbwjg?Iqpe+ME75L|G%I>xP$B#dV8ZNL z+;u@2csmK?ufWhu#C!WaS-^D^m;vc-GkdliA+PTcJ6(l!n1=-_AdX$A%HRUsq;_{- zR4{-`z-xQ6?_4tr$`1~iOQfjR$nvThJNTi3@rM57b$ablOHg>})O;5(uRcLd5{-kH ze=o*h-Or>3HfWBi?gju`jY+Pkb?Za53}>JuR@RA~wP&!{yj9br@hGZP@!^MWa(o?A zG1pek9E*OvlxDK)nzh@t;TIXsMh_KO#xE7<7f9a=N?U#Zav}c%^gBwffCII15m1Ax zE!_;3G#q#UCNh}NwhC>bhA=f*!hh}r{ZDl1 z$o-eyd2su3(S8{M2hjzX;!JSw{RN9tuEa0lbFSgX(lk7D#6EaeL8u|5>#W`!EoTmx#=dJ@_Zr90zc<|=P(-yS|0^$M?X2-Rk)*JMxB*S(9nxVgb zW}jHl1;i>0y1E-}aN`y%)s!F{A!(LdS%Vd7R^qfl2yX$ipz6Tm z>Wp5B;D}U_>s-3mb73om^|t!J>EdilSP@R5aUO>C^e5zHXnlc`FNqcT==Ve_Uys9p z-E33+>5qs9Q=j7$X;lqJ$2^Zl9tVC{ejz#%lu#l(;9_@#0m||?gSx-H&E0_b7w0VL z$1zMgu2qyXYmIgq;gu(xEt<*%M3eJhN5ZeiVQCy84(e&luZsDA9$n^{k^}f>+H_!} zkBHmt0gh*kfV^9Ym%_w;+V6-l8L4i`1)FIQ>9ZP$-Tm0^_`9?@ev^soA%N#&~bS zo-tv8*_1c{4D+jHmLQi5;WAohAT$cZRTqgd5PRiTeg9E@LcgAMEV<{i&}@8l;`)^~ zJMoCg0-(m?WTXl@qcI1IfYVX0mS{j_1@odWO-(7=)T#T&@==z{pmxmchGc0nh0}iEbuE~C1w~|H>=Ud=o*(*@~{M!Qp zm=WN&6l7Wa@~!(^&)_(`2C}`_p~oh-tWPm>XKK7yo6zFhTyH)YT;Cd0IBp$G4?5Cb zDwbwwD8E;w+1JD>TqKUp&v1i79YC_1&Nr_}%QEWf(~lI%%gcP3xSmt$!If5*{U2*4 z@Xg?K-#zkZfLwl`n^d3JJn5}>X>1MR1OIu%YjB>4_yWU|aphrNU+0clm&{S;zUym; zU8p0+*7GXx&jQl79}f71V*B13 z2tBqljtENT`z(slsYSZ>k08n)`${(v#- z(R%#b=+R76?%gdXORVOtV_qxJv7HIT0%Yf9MdwUg`gl*)l74;*T|CsD`YY#((Md5V z;M}=|Bp%_q@&skH3e7rN{NT6F4{1`pv$X@zs1(+Mi`<$(rpdB5bhhX`)$h@%q&whl zXZF1ZB*h{wMv_=YE9JRvbMW&*rSG0GqkR_X{7O@Yz+6<46=LiF$7vz-KX#GTK~af_ zB3bBSLc!d|et{((3ZX z8qEDsrmohY@v6Hpjb+czT)K>-xn3-qZb?~o1Jf>8D)w8oV&8r~md6f$N~4oiePdE% zZ*D@L09sQ`Gf9-2KDgT&*JI zOKmly#heL*p`2A?GMcQ*SuGKxJgaQcJF>(EYS9~6SLbThcXl@b+xfHIlLdz46n5e$ zW%=R-+c{!O*3}0rH^g*QffC0#ZT~8@EU5M0PZ&_YA01~wK~Ns+=Gd-HL%W0uBG4>PrH_?aSshD!$mHh_9#Z9Nx+cD6--{0_rrdUhMLrwFm5>7Ym zj1X}_hzsK1m43#AJSF(Mk??n`;Rl<5sC|9yq)k7xvA9#eJeMDy$G_Qj%n0#xN}si% z%kAe|W~v8&FADyih>p$a`?)saH^fGXnXG^ZV`W(tyTE)|Xl6n<{`damxG@9Gf}A}1Z&x%_m_t8}?W zMQ$+3b$;hPXLInLX3IN@e1x`NzecPRQnr6!?0+3|s;T&ZNFse7M>l!)Hq}00t@6X4 zv$`Tu#xw5DOa2^oRPl5E^4U{H*O8z11=dI!{L;1QpE=P=R+*xI#LKj^-vxe`dtd+D z{5uxR3VPK8+JW+he_8%BpZ8kHuF)+x*MYK!-_&;yKSmC;0BK`*mOKFEoSGMPzy!+9 z70HGdmgQfejARdNL#+{(F6MtoMq0!m=DNmu{ivBO9c)-)^m_|*B+lj~_ySGY0;?E6 zfBU-cQp9{Ln^v6CLN0(AXx9sasEPc-UL#6=?|4dlaMj!9AS1DNz`{wc-4Ev% zO8{+9)M{!!w1%nwGI=}CxxU-Zk-f#BuosS~po*~aZG`=ZO1{f2Wtm%3%&E?X$Hzb9ql(g&YimtlTFP8UYneZBhnEBO~?B%XdsnJ@WPV;KqF_L$e3a~%AG@OO`us?hyX&X^XAX@WLV}^#5bVD>;~WTilQn;KnEcG!9uqe z(D*L4bAEf^pp%;Z&6fh2rql~$9ggRJ%~uOy>?J6y;nnU#k1oVDT%Z?t*N_VqMnp&l zh@IpRj+OzKZ(s4I_u)`oPOrJAzwEV@^vd4gB-BQdwxJls)W()rqg@m3;pMt#8LR)@`^43w$VTyB%_e%dI%co@Ghw#AOAtf9P}?t+d}NH{_zOdwrJyaTCd$ zz))*X)V{+w&bb}-k`eZjeMVBIbS)aJiL(;#@NjPJl0M5$nP-!h2d>t+WJ!yywqK5i z=$WXA{AH3~wPqG`EWuBYzMZ4RIscLl-Uqo3Tqf|J* z*|xt(YaA}0u{4#-GE%UscuGsBAL0Dg9eLHhEcSJEAKsa4f6;lNB=c&d^G*Kd2gb;( z*crcyrmMr`*Mir~+G4`6IT{R6 zt~vGXHs+UMyTXE(q4pMuY7RF?H*I>+>neBo_J(#!ymQT|0p`>ZFthj${-v?|s)d(d zwObC+xP?&ffjv6u!i!iS4wa9u>ZbZjdqlteFrwP9wco&&SVlhjCXr3UsPOs;!QL2oB3V-_4uzao$65M={-);W>8WZ^$Khd}vEq zB6Hz0`VykUqUbFG$Z?ajZz;OzQ^wNN^3~N%fbG9qxTMj``~@ZsygyOvdxsxpXi!tY zy$M-gnJ~Qc?y^^J-lIY}Wz)FJiKx4MQAymKA%mh`+VD9;*5UVPztFSQ)WdT88*3jh z(b$0tS32oog}qtB+zJ=@e2+oNYSI8&2)ghOTG|3dq!}Gv`J(eIoBxb^g^kZ7x!au1Lo=7A%m3 zm7O(*NtxfG!F)fDO5fEh6Mv*LKhS(rxnP(D;Vjf#8O{_UJv<0huO7AzM@vEk$ zchXgOkDQlHD9htllienfX$DFjDr-XY)Q~dn!9?5UT6XYX%;mwd_`y4>G{G$`<1V{M zB&(uMaEu84ZuT!V!1JL`sOg6fw733-%?Tp5Qf>KNowy>K%0~mN*Oiu!xBoe^<;o>a z^c92OqG}z|5i&jGMC~zs*$1gd!~N>D6U0o@D!Z$I7k$^(;gy$CYFd*<>DrTW8@(bs zof&hX7S$5zJ1Dc^PMyn+bNNeKujXc^7>w#}t-#j`gC{|@#6PMw)h3N$3PG z($_tu_-bbyQ_c1YzMSH0M0}gp(ypKEtKzaHp$+c`{8R~ZQS1)B(iwwWLFU<7!HS7u zpY|hDnHuZ{Q@6V)qIykBdVTFv^Zy74>1$3WUVdhb+)%~l=V=f_Rj*GVkJS{VAG5Ef z-kG%it2WQw9n%0{OjMH0cSUwwNGBmZmqN>67>Ie6GLMYxcTV^9V0-7py6h3=<7?0V zxC4v!x-ahbmE_46q3k2H1?H@8vL;6B>Q4_+*+Uh)?NmMSix~<2SDe84C=M^dp zT)1TZ;13T?K2B)=sw)4fC+d+X1yxR3$#tF;%|fZ_QkMt!(|g=XV;+WDhOIV-JQ`M_ zJ-2D}H6fQPaZgt>DvIcUg@$zxwo|3e`xCEr_Su}Ll_}`l1eRMlA!~L4S7gn?1$1`` z^Jv-EJ!v??0Zxi;c6DC~F_(!VX2de5%TLeXQD?gQ>+I=~PDk+DhOy~$*j%k=Gr3;% zO+7Pc&KAaXMzJljMWvLfiX2L`Y8KYZSvHY^bMX{-dnvn@6%c(_+ej)rtM&rOB>C+tr6 z0x0L}Qsak9R$TTZkEZ1vL7nG>ICXo}godbl?#bDj%FR(GgFX4N0CT$Zc}K^q+jr{T z*6eaF{lEsdm6fNSpdF-xpVR&w1aW#!Z$3yH3VXk5pT@Xpa~0XQj&YI!H%*qpubQKT zgJ4kMA#(m|dNbmNC9>A4dD^r_tcB>PBf&nATdm6GTz0ZgA1PxA?u@A)CEahDijp3$ znc-V9mBwqAWSEq$TS;i2M+*If>?>ajx;TDr$FuJql`gRfLdcdVn>*REQO5j+dMyHT z`B`gv_;tra(b*vfIy`I^=RnB1k>p#{w&VCn*y~!HMq&GvAfnQGm2h2Lyk{c6sy9pS zvI_5%En=uS^g6BX6PUk9?5D(|T&!(*4=A?`I9ijGnVX|lsp0f}vw*+CYI>VIY@XW} z)k+9&sdlfcvyv}1`2Mdrpr=|N8KimaMvk4$z8;A}|BH@pH%a@_@6VT&bn9Mv>3-d9 zZoL90AhZ}8on$4qkGNMFTwji_A-F#IsUr@kOO}z@3Pk~r2CUAPp1x|?#A18vG>3M+ za0pD~e^~#;%Is3GAz|%2WkNm=b?eRqxgdTRn_1DrB!;(4-_0zoYpN>=Ve=kp)D&}O zg1vr19NHzOTsSm z(p_hDa>qvs8n(ghs^}09+!gy`b{x0k_e507SZ_k>1$Hn zSU`Ka*EcwkSEXUUCbeM)m|%Uc{5nSI;^gF9@xg`aC!28#$97jl6#ja~D|Y+LVa|?w zZZ`YCr`&KKW%r4G&|m~SnAXs`bm@UN)vG5=ho)>FB&+oAe-#W|;1Tc0-U>MfC8?)R zQW3n~rVJ1HlS6a2>++H)o8M^(F8JNmjr%Ll>y2BuNc{Z#dpX;{H~M$wx2OoUSDgai zC}gznajy)!*fP!b=bZ>8pW0T9=y530s1Y(A+ys(tA>~KlZZd$yL-X2SZteP6_yJ!d zIG;}N*J{#&;dFwJ6BUM&>A)Ys*OS)3v2@_i#c-m>fB*S^SLVN);Qyu912YbdoZt-T zCbNPA|B3{+x_xbbjH+X2n49Y4Fj5jsb=@=`p|X=fs00BB7pb_&pD(e{|AH0Bo~8elp)8V&F;S5AX}jFk&5?q(QpWjJUNr zkVI0gx0C|2Z7@d}{Q8Zbe}6UNo3$pGpa&I7qqbu2TD}|*-gEcMME}W^tOfeaO+8U4 z8DcS*QjImrS)O;dIQqW-MdB;RB{iWXC7k1zD`6E*Q&ZHz6;yh>RK~I^hq<#6RE^;( zLdB<6Fd!6O>C-9U&a)!Nv1b+PkU+<{o-TLKD{@HWu_l5ncftU0u>*wZ>=U&uv_x+5 zGaYgY*ZHPqVCyQ`plpP)8db7tBEkZm=HY4ea0bOzh9)uM@8POuYWJaKFsBtR^#12! z1yQy3c{`rZ|9&a8S4HF@{bXQRt2_JN@%N~;(}}q)^sOYp7{S$J2a8*4DQZMxcWM@{ zkFtCRKvQQXHxWzmE%XUC&P`F|uP9$*Fyn2sTj%EkNq1=L5&%6Ub!P+_HakLrF=N)! zxwM>!rW_t>LB}CbZ@t%suOivloY`zIm4qz1Ltu(>RuC3ZXS5Ai)=Ao-AGzAsBr=#L z3)Sw1eSN`D2Zy-QuBurTg&{#rZgrC+Qy?Z zvuaK;*LRAfb8cP|X#)&^GG}_T!4BvCng+F4jc~v5DL49I7T^Q_gMGTBt`AM&xtDHy z&$AVYq~Axk(4W2~t zZ=49zFA}GwhSPRp@<#6FYRmp<)i5}*DW;uOvmn%bo2pkx^9QR-GMZwD4my?sr~YNr zzx!l3wd;r31NIs~IS~G@W#2xVxh*6J&}yz=v_>~&iO0(;n_jHSm|B3djKGK*raPv^ z$}HEJG27c((tR$hbr!H@hiB5&YGr>O z>t&>ax1_h<8sYRyS7a+7-eU*+hDMlO{R`o_s7EdAdvG2ynaOR#*7R-G=U;78N%eaWHVlOuTS&?mJF22}wpO0@&`=La900&2CNdmqd$`|oM_|Ke%+2@-J4 zR)mF?4}kG?;OEv9oL2{aLYJniDgg+YuV`xFj`L_s|hYWrs^?}_i x{CNoHC4-;;e#n2<NHo|xG;#t!(_*1tY{C_+C4}Jgu literal 0 HcmV?d00001 From d6cb6581b536816ae798524cb8c04cc1f8a3bd62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lara=20Fern=C3=A1ndez?= <91556753+uo276026@users.noreply.github.com> Date: Mon, 13 Feb 2023 09:56:09 +0100 Subject: [PATCH 03/22] =?UTF-8?q?Documentaci=C3=B3n=5FRestricciones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/02_architecture_constraints.adoc | 51 +++++++++++++++++++-------- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/docs/02_architecture_constraints.adoc b/docs/02_architecture_constraints.adoc index d77b90e..1a79d1d 100644 --- a/docs/02_architecture_constraints.adoc +++ b/docs/02_architecture_constraints.adoc @@ -1,19 +1,42 @@ [[section-architecture-constraints]] -== Architecture Constraints += Restricciones +== Restricciones tecnicas -[role="arc42help"] -**** -.Contents -Any requirement that constrains software architects in their freedom of design and implementation decisions or decision about the development process. These constraints sometimes go beyond individual systems and are valid for whole organizations and companies. +[cols="1,1"] +|=== +|Restricción |Explicación -.Motivation -Architects should know exactly where they are free in their design decisions and where they must adhere to constraints. -Constraints must always be dealt with; they may be negotiable, though. +|Implementación +|El front.end estará formado por React y el back-end por Node.js con Express. -.Form -Simple tables of constraints with explanations. -If needed you can subdivide them into -technical constraints, organizational and political constraints and -conventions (e.g. programming or versioning guidelines, documentation or naming conventions) -**** +|Seguridad +|La información de los usuarios se almacenará en PODs siguiendo los principios SOLID. + +|Base de Datos +|Usaremos TBD. +|=== + +== Restricciones organizacionales + +[cols="1,1"] +|=== +|Restricción |Explicación + +|Equipo +|Lara Fernández Méndez, Eloy Alfredo Schmidt Rodríguez, Luis Manuel Solares García, Miguel Mier Castañón. + +|Control del Repositorio +|Todo el proyecto se encuentra en un repositorio en github con las siguientes ramas: Rama Master, rama Release, Rama Develop y una rama por cada usuario. + +== Convenciones + +[cols="1,1"] +|=== +|Restricción |Explicación + +|Documentación +|Arquitectura AsciiDoc. + +|Idioma +|Español. From 6e5848528d588c4fec70391a724af07c1287dbc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lara=20Fern=C3=A1ndez?= <91556753+uo276026@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:01:16 +0100 Subject: [PATCH 04/22] Documentacion_Restricciones --- docs/02_architecture_constraints.adoc | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/02_architecture_constraints.adoc b/docs/02_architecture_constraints.adoc index 1a79d1d..01a97ca 100644 --- a/docs/02_architecture_constraints.adoc +++ b/docs/02_architecture_constraints.adoc @@ -28,6 +28,7 @@ |Control del Repositorio |Todo el proyecto se encuentra en un repositorio en github con las siguientes ramas: Rama Master, rama Release, Rama Develop y una rama por cada usuario. +|=== == Convenciones From 51978aeb4442045612466d24a869a1e5d1141992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lara=20Fern=C3=A1ndez?= <91556753+uo276026@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:01:53 +0100 Subject: [PATCH 05/22] Update 02_architecture_constraints.adoc --- docs/02_architecture_constraints.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/02_architecture_constraints.adoc b/docs/02_architecture_constraints.adoc index 01a97ca..5bfb41f 100644 --- a/docs/02_architecture_constraints.adoc +++ b/docs/02_architecture_constraints.adoc @@ -8,7 +8,7 @@ |Restricción |Explicación |Implementación -|El front.end estará formado por React y el back-end por Node.js con Express. +|El front-end estará formado por React y el back-end por Node.js con Express. |Seguridad |La información de los usuarios se almacenará en PODs siguiendo los principios SOLID. From 9f54da8427d339afb27b35c9c72727ac3ac5a097 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Manuel=20Solares=20Garc=C3=ADa?= <113901106+UO282631@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:03:03 +0100 Subject: [PATCH 06/22] Create Documentacion --- docs/Documentacion | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 docs/Documentacion diff --git a/docs/Documentacion b/docs/Documentacion new file mode 100644 index 0000000..4bb9695 --- /dev/null +++ b/docs/Documentacion @@ -0,0 +1,28 @@ += Estrategia de solución + +* Base de datos: TBD. + +* Express js: Express es un marco de aplicación web de Node js que proporciona amplias funciones para crear aplicaciones web y móviles. Se utiliza para crear una aplicación web híbrida, de varias páginas y de una sola página. + +* React JS: Es un framework creado por Facebook ampliamente utlizado para crear componentes de la interfaz de usuario. Escogido por el gran volumen de documentación y ser el framework utilizado durante los anteriores cursos. + +* Despliegue: TBD. + +== Diseño + +== Seguridad +Garantizamos la seguridad del usuario mediante el uso de PODs. + +== Testabilidad +Se realizarán pruebas para cada parte individual de la aplicación, garantizando así el correcto funcionamiento de los diferentes modulos tanto individualmente como de forma conjunta. + +== Desarrollo +Para esta fase inicial del proyecto se ha tenido más en cuenta el Front-End, el Back-End se tendrá mayor en consideración más adelante en el curso, ya que en otras asignaturas se van a adquirir conocimientos útiles que se podrán aplicar. + +== Estructura + +== Interfaz +La interfaz gráfica será elegida entre todos los miembros del equipo, aportando cada uno algún boceto o idea, los cuales serán puestos en común y se decidirá cual se ajusta mejor a la apicación esperada y que elementos de dichos bocetos resultan más adecuados. +Para ello se tendrá en cuenta la usabilidad y las necesidades de los difentes tipos de usuarios. + + From 619d25f5fd3ab184aa6b6b8a7fa1713d056614e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Manuel=20Solares=20Garc=C3=ADa?= <113901106+UO282631@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:09:36 +0100 Subject: [PATCH 07/22] Update 04_solution_strategy.adoc --- docs/04_solution_strategy.adoc | 39 +++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/docs/04_solution_strategy.adoc b/docs/04_solution_strategy.adoc index 8f7872c..6dbcab0 100644 --- a/docs/04_solution_strategy.adoc +++ b/docs/04_solution_strategy.adoc @@ -1,24 +1,29 @@ [[section-solution-strategy]] -== Solution Strategy += Estrategia de solución +* Base de datos: TBD. -[role="arc42help"] -**** -.Contents -A short summary and explanation of the fundamental decisions and solution strategies, that shape the system's architecture. These include +* Express js: Express es un marco de aplicación web de Node js que proporciona amplias funciones para crear aplicaciones web y móviles. Se utiliza para crear una aplicación web híbrida, de varias páginas y de una sola página. -* technology decisions -* decisions about the top-level decomposition of the system, e.g. usage of an architectural pattern or design pattern -* decisions on how to achieve key quality goals -* relevant organizational decisions, e.g. selecting a development process or delegating certain tasks to third parties. +* React JS: Es un framework creado por Facebook ampliamente utlizado para crear componentes de la interfaz de usuario. Escogido por el gran volumen de documentación y ser el framework utilizado durante los anteriores cursos. -.Motivation -These decisions form the cornerstones for your architecture. They are the basis for many other detailed decisions or implementation rules. +* Despliegue: TBD. + +== Diseño + +== Seguridad +Garantizamos la seguridad del usuario mediante el uso de PODs. + +== Testabilidad +Se realizarán pruebas para cada parte individual de la aplicación, garantizando así el correcto funcionamiento de los diferentes modulos tanto individualmente como de forma conjunta. + +== Desarrollo +Para esta fase inicial del proyecto se ha tenido más en cuenta el Front-End, el Back-End se tendrá mayor en consideración más adelante en el curso, ya que en otras asignaturas se van a adquirir conocimientos útiles que se podrán aplicar. + +== Estructura + +== Interfaz +La interfaz gráfica será elegida entre todos los miembros del equipo, aportando cada uno algún boceto o idea, los cuales serán puestos en común y se decidirá cual se ajusta mejor a la apicación esperada y que elementos de dichos bocetos resultan más adecuados. +Para ello se tendrá en cuenta la usabilidad y las necesidades de los difentes tipos de usuarios. -.Form -Keep the explanation of these key decisions short. -Motivate what you have decided and why you decided that way, -based upon your problem statement, the quality goals and key constraints. -Refer to details in the following sections. -**** From 3e790d86392fb7065fa53b99ccdc089c291eaafc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Manuel=20Solares=20Garc=C3=ADa?= <113901106+UO282631@users.noreply.github.com> Date: Sun, 19 Feb 2023 02:00:38 +0100 Subject: [PATCH 08/22] =?UTF-8?q?Documentaci=C3=B3n=5F08:=20V0.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/08_concepts.adoc | 73 ++++++++----------------------------------- 1 file changed, 13 insertions(+), 60 deletions(-) diff --git a/docs/08_concepts.adoc b/docs/08_concepts.adoc index 569ac0e..d6bac5c 100644 --- a/docs/08_concepts.adoc +++ b/docs/08_concepts.adoc @@ -1,67 +1,20 @@ [[section-concepts]] -== Cross-cutting Concepts += Conceptos transversales +== Persistencia +Los datos de los usuarios serán almacenados, de manera que cada usuario conservará la información que hayan creado sobre un lugar de manera descentralizada. -[role="arc42help"] -**** -.Content -This section describes overall, principal regulations and solution ideas that are -relevant in multiple parts (= cross-cutting) of your system. -Such concepts are often related to multiple building blocks. -They can include many different topics, such as +== Usuarios y su privacidad +Las contraseñas e información sensible no sera almacenada en una base de datos para mayor seguridad. En cambio, se optará por almacenar dicha información en un pod personal de cada usuario siguiendo los principios SOLID. -* domain models -* architecture patterns or design patterns -* rules for using specific technology -* principal, often technical decisions of overall decisions -* implementation rules +== Interfaz de Usuario +Para la interfaz gráfica se usará el framework React, teniendo como base los diseños aceptados y creados por los miembros del equipo. -.Motivation -Concepts form the basis for _conceptual integrity_ (consistency, homogeneity) -of the architecture. Thus, they are an important contribution to achieve inner qualities of your system. +== Manejo de Sesión +Para el inicio de la sesión será necesario estar registrado previamente o deberá registrarse. La información almacenada por el usuario solo será accesible por este a través de su pod y siguiendo los principios SOLID. -Some of these concepts cannot be assigned to individual building blocks -(e.g. security or safety). This is the place in the template that we provided for a -cohesive specification of such concepts. +== Testeable +Para añadir una funcionalidad o característica deberá ser probada adecuadamente con anterioridad. Con esto en mente se deberán realizar tanto pruebas unitarias, para comprobar el correcto funcionamiento del código, como pruebas relacionadas con la usabilidad. -.Form -The form can be varied: - -* concept papers with any kind of structure -* cross-cutting model excerpts or scenarios using notations of the architecture views -* sample implementations, especially for technical concepts -* reference to typical usage of standard frameworks (e.g. using Hibernate for object/relational mapping) - -.Structure -A potential (but not mandatory) structure for this section could be: - -* Domain concepts -* User Experience concepts (UX) -* Safety and security concepts -* Architecture and design patterns -* "Under-the-hood" -* development concepts -* operational concepts - -Note: it might be difficult to assign individual concepts to one specific topic -on this list. - -image:08-Crosscutting-Concepts-Structure-EN.png["Possible topics for crosscutting concepts"] -**** - - -=== Domain model - -image:UmlDiagram.png["Example UML Diagram"] - - - -=== __ - -__ - -... - -=== __ - -__ +== Modelo de dominio +Concepto inicial del modelo de dominio, altamente sujeto a cambios y ampliaciones. From 9a6cceaf9bf415c27a076350c6f01564a5e074f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Manuel=20Solares=20Garc=C3=ADa?= <113901106+UO282631@users.noreply.github.com> Date: Sun, 19 Feb 2023 02:02:34 +0100 Subject: [PATCH 09/22] =?UTF-8?q?Documentaci=C3=B3n=5F10:=20V0.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/10_quality_scenarios.adoc | 70 +++++++--------------------------- 1 file changed, 13 insertions(+), 57 deletions(-) diff --git a/docs/10_quality_scenarios.adoc b/docs/10_quality_scenarios.adoc index a19dedf..beb3dc0 100644 --- a/docs/10_quality_scenarios.adoc +++ b/docs/10_quality_scenarios.adoc @@ -1,63 +1,19 @@ [[section-quality-scenarios]] -== Quality Requirements += Requisitos de calidad +== Árbol de calidad -[role="arc42help"] -**** +image:arbolDeCalidad.png["Example UML Diagram"] -.Content -This section contains all quality requirements as quality tree with scenarios. The most important ones have already been described in section 1.2. (quality goals) +== Escenarios de calidad +[options="header"] +|================================================================================== +|Id |Atributo de calidad |Escenario de calidad +|US1 |Usabilidad |La navegación por la aplicación debe de ser sencilla, permitiendo a los usuarios diferenciar claramente las diferentes opciones. +|COM1 |Comprensibilidad |La aplicación debe ser sencilla de usar para todos los usuarios independientemente de su nivel de experiencia o posibles dificultades como discapacidades visuales. +|SEG1 |Seguridad |Los datos de los usuarios estarán protegidos y no será posible el acceso por parte de terceros. +|TEST1 |Testabilidad |Se documentará la funcionalidad de las diferentes partes de la aplicación en su código con la finalidad de poder ser modificado y testeado por los diferentes miembros del equipo. +|TEST2 |Testabilidad |Antes de de añadir una funcionalidad, ésta debe ser probada, ya sea con pruebas unitarias o pruebas de usabilidad. +|================================================================================== -Here you can also capture quality requirements with lesser priority, -which will not create high risks when they are not fully achieved. -.Motivation -Since quality requirements will have a lot of influence on architectural -decisions you should know for every stakeholder what is really important to them, -concrete and measurable. -**** - -=== Quality Tree - -[role="arc42help"] -**** -.Content -The quality tree (as defined in ATAM – Architecture Tradeoff Analysis Method) with quality/evaluation scenarios as leafs. - -.Motivation -The tree structure with priorities provides an overview for a sometimes large number of quality requirements. - -.Form -The quality tree is a high-level overview of the quality goals and requirements: - -* tree-like refinement of the term "quality". Use "quality" or "usefulness" as a root -* a mind map with quality categories as main branches - -In any case the tree should include links to the scenarios of the following section. -**** - -=== Quality Scenarios - -[role="arc42help"] -**** -.Contents -Concretization of (sometimes vague or implicit) quality requirements using (quality) scenarios. - -These scenarios describe what should happen when a stimulus arrives at the system. - -For architects, two kinds of scenarios are important: - -* Usage scenarios (also called application scenarios or use case scenarios) describe the system’s runtime reaction to a certain stimulus. This also includes scenarios that describe the system’s efficiency or performance. Example: The system reacts to a user’s request within one second. -* Change scenarios describe a modification of the system or of its immediate environment. Example: Additional functionality is implemented or requirements for a quality attribute change. - -.Motivation -Scenarios make quality requirements concrete and allow to -more easily measure or decide whether they are fulfilled. - -Especially when you want to assess your architecture using methods like -ATAM you need to describe your quality goals (from section 1.2) -more precisely down to a level of scenarios that can be discussed and evaluated. - -.Form -Tabular or free form text. -**** From 71ea41db7bfc8b846570c1bac675132626af6125 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Manuel=20Solares=20Garc=C3=ADa?= <113901106+UO282631@users.noreply.github.com> Date: Sun, 19 Feb 2023 02:03:10 +0100 Subject: [PATCH 10/22] Add files via upload --- docs/images/arbolDeCalidad.png | Bin 0 -> 35924 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/arbolDeCalidad.png diff --git a/docs/images/arbolDeCalidad.png b/docs/images/arbolDeCalidad.png new file mode 100644 index 0000000000000000000000000000000000000000..dcffeb193096a810e23854b28c9a3531c7edf1da GIT binary patch literal 35924 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 Kt=!Bn`F{XtBsiJ? literal 0 HcmV?d00001 From 81947f7ceed95373e7a0d96b1d96736ad29bdb61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Manuel=20Solares=20Garc=C3=ADa?= <113901106+UO282631@users.noreply.github.com> Date: Sun, 19 Feb 2023 02:05:21 +0100 Subject: [PATCH 11/22] Update 10_quality_scenarios.adoc --- docs/10_quality_scenarios.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/10_quality_scenarios.adoc b/docs/10_quality_scenarios.adoc index beb3dc0..d146a5b 100644 --- a/docs/10_quality_scenarios.adoc +++ b/docs/10_quality_scenarios.adoc @@ -3,7 +3,7 @@ == Árbol de calidad -image:arbolDeCalidad.png["Example UML Diagram"] +image::arbolDeCalidad.png["Example UML Diagram"] == Escenarios de calidad [options="header"] From 5d8d07bd2daaa4b4c0e1f1c04c8762b0470e9a15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Manuel=20Solares=20Garc=C3=ADa?= <113901106+UO282631@users.noreply.github.com> Date: Sun, 19 Feb 2023 02:05:51 +0100 Subject: [PATCH 12/22] Add files via upload --- docs/images/Modelo de dominio.png | Bin 0 -> 29726 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/Modelo de dominio.png diff --git a/docs/images/Modelo de dominio.png b/docs/images/Modelo de dominio.png new file mode 100644 index 0000000000000000000000000000000000000000..4098fc2f65810f2fdb2c98a70913880f9cfddd06 GIT binary patch literal 29726 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 literal 0 HcmV?d00001 From 9da47208fd365ff7107bfeeb57aa68e6b7281439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lara=20Fern=C3=A1ndez?= <91556753+uo276026@users.noreply.github.com> Date: Sun, 19 Feb 2023 14:26:14 +0100 Subject: [PATCH 13/22] Update 06_runtime_view.adoc --- docs/06_runtime_view.adoc | 95 ++++++++++++++++++++------------------- 1 file changed, 50 insertions(+), 45 deletions(-) diff --git a/docs/06_runtime_view.adoc b/docs/06_runtime_view.adoc index 573d234..ce398ac 100644 --- a/docs/06_runtime_view.adoc +++ b/docs/06_runtime_view.adoc @@ -1,57 +1,62 @@ [[section-runtime-view]] -== Runtime View - - -[role="arc42help"] -**** -.Contents -The runtime view describes concrete behavior and interactions of the system’s building blocks in form of scenarios from the following areas: - -* important use cases or features: how do building blocks execute them? -* interactions at critical external interfaces: how do building blocks cooperate with users and neighboring systems? -* operation and administration: launch, start-up, stop -* error and exception scenarios - -Remark: The main criterion for the choice of possible scenarios (sequences, workflows) is their *architectural relevance*. It is *not* important to describe a large number of scenarios. You should rather document a representative selection. - -.Motivation -You should understand how (instances of) building blocks of your system perform their job and communicate at runtime. -You will mainly capture scenarios in your documentation to communicate your architecture to stakeholders that are less willing or able to read and understand the static models (building block view, deployment view). - -.Form -There are many notations for describing scenarios, e.g. - -* numbered list of steps (in natural language) -* activity diagrams or flow charts -* sequence diagrams -* BPMN or EPCs (event process chains) -* state machines -* ... - -**** +== Vista en tiempo de ejecución === +* Registro en aplicación +---- +actor Bob +participant Iomap +participant Pod +Bob -> Iomap: Bob pide registrarse +Iomap -> Pod: Redirecciona registro al proveedor del POD +Bob <-- Pod: Pide datos del registro +Bob -> Pod: Bob inserta sus datos +Iomap <-- Pod: Validación +Bob <-- Iomap: Confirmación registro +---- +=== + +* Inicio de sesión en aplicación -* __ -* __ +---- +actor Bob +participant Iomap +participant Pod +Bob -> Iomap: Bob pide iniciar sesión +Iomap -> Pod: Redirecciona al proveedor del POD +Bob <-- Pod: Pide datos del inicio de sesión +Bob -> Pod: Bob inserta sus datos +Iomap <-- Pod: Validación +Bob <-- Iomap: Confirmación inicio sesión +---- -It is possible to use a sequence diagram: +=== +* Busqueda de lugares mediante filtros (considerando que la sesión ya está iniciada) -[plantuml,"Sequence diagram",png] ---- -actor Alice actor Bob -database Pod as "Bob's Pod" -Alice -> Bob: Authentication Request -Bob --> Alice: Authentication Response -Alice --> Pod: Store route -Alice -> Bob: Another authentication Request -Alice <-- Bob: another authentication Response +participant Iomap +participant Pod +database DataBase as "DataBase" +Bob -> Iomap: Pulsa en filtro "Restaurantes" +Iomap-> DataBase: Pide la lista de restaurantes +DataBase --> Iomap: Devuelve la lista de restaurantes +Iomap-> Iomap: Muestra solo los restaurantes en el mapa ---- -=== -=== ... +=== +* Añadir nuevo lugar al mapa (considerando que la sesión ya está iniciada) -=== +---- +actor Bob +participant Iomap +participant Pod +database DataBase as "DataBase" +Bob -> Iomap: Pulsa en "Crear lugar" +Iomap-> Iomap: Bob es redireccionado a la vista de "Crear lugar" +Bob <-- Iomap: La aplicación pide los datos del lugar +Bob -> Iomap: Bob inserta los datos +Iomap --> DataBase: La aplicación añade el lugar a la base de datos +Bob <-- Iomap: Confirmación de datos añadidos correctamente +---- From 030231eac5357829fe78e366f22ec83d5d1fa3c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lara=20Fern=C3=A1ndez?= <91556753+uo276026@users.noreply.github.com> Date: Sun, 19 Feb 2023 14:48:59 +0100 Subject: [PATCH 14/22] Update 11_technical_risks.adoc --- docs/11_technical_risks.adoc | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/docs/11_technical_risks.adoc b/docs/11_technical_risks.adoc index c52fb74..8c18398 100644 --- a/docs/11_technical_risks.adoc +++ b/docs/11_technical_risks.adoc @@ -1,17 +1,21 @@ [[section-technical-risks]] -== Risks and Technical Debts +== Riesgos y deudas técnicas - -[role="arc42help"] **** -.Contents -A list of identified technical risks or technical debts, ordered by priority +[cols="1,1"] +|=== +|Riesgo |Explicación + +|Desconocimiento de REACT +|Es la primera vez que trabajamos con este framework. -.Motivation -“Risk management is project management for grown-ups” (Tim Lister, Atlantic Systems Guild.) +|Desconocimiento de Node.js +|Es la primera vez que trabajamos con ello. Lo estamos usando también en otra asignatura, lo cual nos beneficiara para entenderlo. -This should be your motto for systematic detection and evaluation of risks and technical debts in the architecture, which will be needed by management stakeholders (e.g. project managers, product owners) as part of the overall risk analysis and measurement planning. +|Uso de POD's +|No conocemos el funcionamiento de estos. -.Form -List of risks and/or technical debts, probably including suggested measures to minimize, mitigate or avoid risks or reduce technical debts. +|Equipos +|No estamos muy familiarizados con los trabajos en equipo y puede que nos sea dificil +|=== **** From d3fe9bf497a1dd1ea4cddbbd24afa4fd18df7551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lara=20Fern=C3=A1ndez?= <91556753+uo276026@users.noreply.github.com> Date: Sun, 19 Feb 2023 14:49:24 +0100 Subject: [PATCH 15/22] Update 11_technical_risks.adoc --- docs/11_technical_risks.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/11_technical_risks.adoc b/docs/11_technical_risks.adoc index 8c18398..e2391b1 100644 --- a/docs/11_technical_risks.adoc +++ b/docs/11_technical_risks.adoc @@ -16,6 +16,6 @@ |No conocemos el funcionamiento de estos. |Equipos -|No estamos muy familiarizados con los trabajos en equipo y puede que nos sea dificil +|No estamos muy familiarizados con los trabajos en equipo y puede que nos sea dificil coordinarnos. |=== **** From e21ab9fe5b546b189c294151d55245aa0da0df14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lara=20Fern=C3=A1ndez?= <91556753+uo276026@users.noreply.github.com> Date: Sun, 19 Feb 2023 14:50:57 +0100 Subject: [PATCH 16/22] Update 11_technical_risks.adoc --- docs/11_technical_risks.adoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/11_technical_risks.adoc b/docs/11_technical_risks.adoc index e2391b1..48dca25 100644 --- a/docs/11_technical_risks.adoc +++ b/docs/11_technical_risks.adoc @@ -17,5 +17,8 @@ |Equipos |No estamos muy familiarizados con los trabajos en equipo y puede que nos sea dificil coordinarnos. + +|Github +|Todos lo hemos usado ya y sabemos más o menos el funcionamiento, pero hay caracteristicas que son nuevas para nosotros y estamos aprendiendo a utilizar. |=== **** From 6b2af218190a8ba260a6d7b1b20a6d5b109f5467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lara=20Fern=C3=A1ndez?= <91556753+uo276026@users.noreply.github.com> Date: Sun, 19 Feb 2023 15:05:58 +0100 Subject: [PATCH 17/22] Update 12_glossary.adoc --- docs/12_glossary.adoc | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/docs/12_glossary.adoc b/docs/12_glossary.adoc index 01e71be..3eed232 100644 --- a/docs/12_glossary.adoc +++ b/docs/12_glossary.adoc @@ -1,31 +1,28 @@ [[section-glossary]] == Glossary +[options="header"] +|=== +| Termino | Definición +| REACT +| Biblioteca de JavaScript para construir interfaces de usuario +| Principios SOLID +| Single Responsibility, Open-Close Principle, Liskov Substitution, Interface Segregation Principle, Dependency Inversion Principle -[role="arc42help"] -**** -.Contents -The most important domain and technical terms that your stakeholders use when discussing the system. - -You can also see the glossary as source for translations if you work in multi-language teams. - -.Motivation -You should clearly define your terms, so that all stakeholders +| AsciiDoc +| Lenguaje de marcado de texto sin formato para escribir contenido técnico. -* have an identical understanding of these terms -* do not use synonyms and homonyms +| GitHub +| Portal creado para alojar el código de las aplicaciones de cualquier desarrollador -.Form -A table with columns and . +| Node.js +| Entorno de tiempo de ejecución de JavaScript -Potentially more columns in case you need translations. +| Express +| Es el framework web más popular de Node -**** +| POD +| Contenedor, en el que se presenta un conjunto de datos al usuario. -[options="header"] -|=== -| Term | Definition -| | -| | |=== From d9cef8e01837ac6cb1557894723454b70b507d10 Mon Sep 17 00:00:00 2001 From: UO271588 Date: Sun, 19 Feb 2023 18:52:31 +0100 Subject: [PATCH 18/22] Docuementacion_07: V0.1 --- docs/07_deployment_view.adoc | 98 +++++++---------------------- docs/images/07_deployment_view.png | Bin 0 -> 41508 bytes 2 files changed, 22 insertions(+), 76 deletions(-) create mode 100644 docs/images/07_deployment_view.png diff --git a/docs/07_deployment_view.adoc b/docs/07_deployment_view.adoc index 1088a09..08190ae 100644 --- a/docs/07_deployment_view.adoc +++ b/docs/07_deployment_view.adoc @@ -1,86 +1,32 @@ [[section-deployment-view]] - - -== Deployment View - -[role="arc42help"] -**** -.Content -The deployment view describes: - - 1. the technical infrastructure used to execute your system, with infrastructure elements like geographical locations, environments, computers, processors, channels and net topologies as well as other infrastructure elements and - -2. the mapping of (software) building blocks to that infrastructure elements. - -Often systems are executed in different environments, e.g. development environment, test environment, production environment. In such cases you should document all relevant environments. - -Especially document the deployment view when your software is executed as distributed system with more then one computer, processor, server or container or when you design and construct your own hardware processors and chips. - -From a software perspective it is sufficient to capture those elements of the infrastructure that are needed to show the deployment of your building blocks. Hardware architects can go beyond that and describe the infrastructure to any level of detail they need to capture. - -.Motivation -Software does not run without hardware. -This underlying infrastructure can and will influence your system and/or some -cross-cutting concepts. Therefore, you need to know the infrastructure. - -.Form - -Maybe the highest level deployment diagram is already contained in section 3.2. as -technical context with your own infrastructure as ONE black box. In this section you will -zoom into this black box using additional deployment diagrams: - -* UML offers deployment diagrams to express that view. Use it, probably with nested diagrams, -when your infrastructure is more complex. -* When your (hardware) stakeholders prefer other kinds of diagrams rather than the deployment diagram, let them use any kind that is able to show nodes and channels of the infrastructure. -**** - -=== Infrastructure Level 1 +== Vista de implementación +=== Infraestructura Nivel 1 [role="arc42help"] -**** -Describe (usually in a combination of diagrams, tables, and text): - -* the distribution of your system to multiple locations, environments, computers, processors, .. as well as the physical connections between them -* important justification or motivation for this deployment structure -* Quality and/or performance features of the infrastructure -* the mapping of software artifacts to elements of the infrastructure - -For multiple environments or alternative deployments please copy that section of arc42 for all relevant environments. -**** - -_****_ - -Motivation:: - -__ - -Quality and/or Performance Features:: - -__ - -Mapping of Building Blocks to Infrastructure:: -__ - - -=== Infrastructure Level 2 - -[role="arc42help"] -**** -Here you can include the internal structure of (some) infrastructure elements from level 1. - -Please copy the structure from level 1 for each selected element. -**** +image:07_deployment_view.png["Deployment view de la aplicación"] -==== __ +La aplicación se encuentra alojada en un servidor web que interactua con los diferentes clientes a traves del puerto 8081. Ademas este servidor se nutre de la información almacenada dentro de una base de datos MongoDB alojada en un servidor en la nube. Tambien obtiene la información de los usuarios a traves de los PODs de SOLID que se encuentran en nuestro caso dentro del provedor de SOLID Inrupt. -__ +=== Infraestructura Nivel 2 +==== Web App +La Web APP es la que se comunica con los distintos clientes de usuario a traves del puerto 3000. Esta proporciona vistas HTML 5 con JavaScript con las que el usuario podra interactuar desde su navegador. Ademas des de la propia WebAPP se conectará con lo PODs de los usuarios para permitir el acceso y permitir la visualización de los mapas. -==== __ +==== REST API +La REST API nutre de información a la Web App por medio de los distintos endpoints que proporciona. La API se encuentra alojada en el puerto 5000. Ademas la información que proporciona la obtiene de la BBDD MongoDB alojada en la nube. -__ +==== PODs SOLID +Los PODs almacenan la información de los usuarios y se encuentran dentro de los servidores de Inrupt en la nube, que sirve PODs de SOLID. -... +==== MongoDB +La base de datos se encuentra alojada en los propios servidores que proporciona MongoDB en la nube exactamente se encuentra en (Poner la máquina de AWS que almacena la BBDD) -==== __ +=== Aspectos de calidad y rendimiento +Se espera que los componentes de la LoMap proporcionen los siguientes aspectos de calidad y de rendimiento en cuanto a los tiempos de respuesta y a la disponibilidad de los distintos elementos -__ +|=== +| Dispositivo | Tiempo de respuesta | Disponibilidad +| Web App | Poco tiempo de respuesta | Alta +| REST API | Tiempo medio de respuesta | Alta +| MongoDB | Especificado por el proveedor | Especificado por el proveedor +| PODs Solid | Especificado por Inrupt | Especificado por Inrupt +|=== diff --git a/docs/images/07_deployment_view.png b/docs/images/07_deployment_view.png new file mode 100644 index 0000000000000000000000000000000000000000..ac0b39c2ff1ed641cc1e686ef91feeee0174749c GIT binary patch literal 41508 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 RK@s|rhI(fEa&(Vg_&*P~hnoNZ literal 0 HcmV?d00001 From 291d676757f0fd365efaf355605588b654b5edfb Mon Sep 17 00:00:00 2001 From: michumier Date: Sun, 19 Feb 2023 19:48:52 +0100 Subject: [PATCH 19/22] =?UTF-8?q?Documentaci=C3=B3n:=20puntos=205=20y=209?= =?UTF-8?q?=20(versi=C3=ADn=20V0.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/05_building_block_view.adoc | 198 +++---------------------------- docs/09_design_decisions.adoc | 31 ++--- 2 files changed, 26 insertions(+), 203 deletions(-) diff --git a/docs/05_building_block_view.adoc b/docs/05_building_block_view.adoc index df24089..a53852c 100644 --- a/docs/05_building_block_view.adoc +++ b/docs/05_building_block_view.adoc @@ -5,202 +5,36 @@ [role="arc42help"] **** -.Content -The building block view shows the static decomposition of the system into building blocks (modules, components, subsystems, classes, -interfaces, packages, libraries, frameworks, layers, partitions, tiers, functions, macros, operations, -datas structures, ...) as well as their dependencies (relationships, associations, ...) +El código se descompone de manera estructurada por niveles, en los que se enseñan las dependencias internas de cada elemento. +El sistema se divide en Whitebox y Blackbox -This view is mandatory for every architecture documentation. -In analogy to a house this is the _floor plan_. -.Motivation -Maintain an overview of your source code by making its structure understandable through -abstraction. -This allows you to communicate with your stakeholder on an abstract level without disclosing implementation details. - -.Form -The building block view is a hierarchical collection of black boxes and white boxes -(see figure below) and their descriptions. - -image:05_building_blocks-EN.png["Hierarchy of building blocks"] - -*Level 1* is the white box description of the overall system together with black -box descriptions of all contained building blocks. - -*Level 2* zooms into some building blocks of level 1. -Thus it contains the white box description of selected building blocks of level 1, together with black box descriptions of their internal building blocks. - -*Level 3* zooms into selected building blocks of level 2, and so on. -**** - -=== Whitebox Overall System - -[role="arc42help"] **** -Here you describe the decomposition of the overall system using the following white box template. It contains - - * an overview diagram - * a motivation for the decomposition - * black box descriptions of the contained building blocks. For these we offer you alternatives: - - ** use _one_ table for a short and pragmatic overview of all contained building blocks and their interfaces - ** use a list of black box descriptions of the building blocks according to the black box template (see below). - Depending on your choice of tool this list could be sub-chapters (in text files), sub-pages (in a Wiki) or nested elements (in a modeling tool). - * (optional:) important interfaces, that are not explained in the black box templates of a building block, but are very important for understanding the white box. -Since there are so many ways to specify interfaces why do not provide a specific template for them. - In the worst case you have to specify and describe syntax, semantics, protocols, error handling, - restrictions, versions, qualities, necessary compatibilities and many things more. -In the best case you will get away with examples or simple signatures. - -**** - -_****_ - -Motivation:: - -__ - - -Contained Building Blocks:: -__ - -Important Interfaces:: -__ +=== Whitebox Overall System [role="arc42help"] -**** -Insert your explanations of black boxes from level 1: - -If you use tabular form you will only describe your black boxes with name and -responsibility according to the following schema: - -[cols="1,2" options="header"] +.Añadir el dibujo del whitebox +[options="header",cols="1,2"] |=== -| **Name** | **Responsibility** -| __ | __ -| __ | __ +|Actores|Descripción +| Cliente / Usuario | Es el que interactúa directamente con la aplicación y su interfaz de usuario. Cada uno tiene un POD en el cual se almacenan sus datos y al cual se puede acceder. +| Administrador | Tiene acceso al completo de la aplicación y puede administrarla para que funcione correctamente. |=== -If you use a list of black box descriptions then you fill in a separate black box template for every important building block . -Its headline is the name of the black box. -**** - - -==== - -[role="arc42help"] -**** -Here you describe -according the the following black box template: - -* Purpose/Responsibility -* Interface(s), when they are not extracted as separate paragraphs. This interfaces may include qualities and performance characteristics. -* (Optional) Quality-/Performance characteristics of the black box, e.g.availability, run time behavior, .... -* (Optional) directory/file location -* (Optional) Fulfilled requirements (if you need traceability to requirements). -* (Optional) Open issues/problems/risks - -**** - -__ - -__ - -_<(Optional) Quality/Performance Characteristics>_ - -_<(Optional) Directory/File Location>_ - -_<(Optional) Fulfilled Requirements>_ - -_<(optional) Open Issues/Problems/Risks>_ - - - - -==== - -__ - -==== - -__ - - -==== - -... - -==== - - - -=== Level 2 - -[role="arc42help"] -**** -Here you can specify the inner structure of (some) building blocks from level 1 as white boxes. - -You have to decide which building blocks of your system are important enough to justify such a detailed description. -Please prefer relevance over completeness. Specify important, surprising, risky, complex or volatile building blocks. -Leave out normal, simple, boring or standardized parts of your system -**** - -==== White Box __ - -[role="arc42help"] -**** -...describes the internal structure of _building block 1_. -**** - -__ - -==== White Box __ - - -__ - -... - -==== White Box __ - - -__ - - - -=== Level 3 +=== Blackbox Overall System [role="arc42help"] -**** -Here you can specify the inner structure of (some) building blocks from level 2 as white boxes. -When you need more detailed levels of your architecture please copy this -part of arc42 for additional levels. -**** - - -==== White Box <_building block x.1_> - -[role="arc42help"] -**** -Specifies the internal structure of _building block x.1_. -**** - - -__ - - -==== White Box <_building block x.2_> - -__ - - - -==== White Box <_building block y.1_> +[options="header",cols="1,2"] +|=== +|Nombre|Descripción +| SOLID | Cada usuario tiene su POD y permite a la aplicación acceder a sus datos. +| Base de Datos | Provee a la aplicación de la información necesaria, ya sean los mapas o los puntos de interés. +| Interfaz de usuario | La interfaz con la que interactúa el usuario. +|=== -__ diff --git a/docs/09_design_decisions.adoc b/docs/09_design_decisions.adoc index 5536888..2123e08 100644 --- a/docs/09_design_decisions.adoc +++ b/docs/09_design_decisions.adoc @@ -3,24 +3,13 @@ [role="arc42help"] -**** -.Contents -Important, expensive, large scale or risky architecture decisions including rationals. -With "decisions" we mean selecting one alternative based on given criteria. - -Please use your judgement to decide whether an architectural decision should be documented -here in this central section or whether you better document it locally -(e.g. within the white box template of one building block). - -Avoid redundancy. Refer to section 4, where you already captured the most important decisions of your architecture. - -.Motivation -Stakeholders of your system should be able to comprehend and retrace your decisions. - -.Form -Various options: - -* List or table, ordered by importance and consequences or: -* more detailed in form of separate sections per decision -* ADR (architecture decision record) for every important decision -**** +[options="header",cols="1,2,2"] +|=== +|Nombre|Problema|Decisión +| POD | La aplicación necesita acceder a información del usuario de una manera descentralizada. | Cada usuario debe tener su propio POD con información del mismo y al iniciar la aplicación le dará permiso a la misma para usar su información guardada. +| DB | Se piensa en cómo guardar información general de la aplicación y se piensa en usar una base de datos. | POR DECIDIR ESTE APARTADO +| Frontend | Se necesita decidir el lenguaje a usar en frontend | Se usará React, ya que su posibilidad con los componentes es realmente buena. +| Backend | Se necesita decidir el lenguaje a usar en backend | Se usarán Node.js y Express.js. +| Documentación | Se necesita decidir el lenguaje a usar en la documentación | Se usará Asciidoc, se pensó en usar Markdown, pero por evitar posibles problemas de compatibilidad se decide usar Asciidoc. +| Reuniones | El grupo tiene que decidir como repartir el trabajo o solucionar problemas | Previo a las clases de laboratorio, cada miembro propondrá temas a tratar en cada reunión mediante Issues en el repositorio en Github. Una vez reunidos, si durante la semana fuera necesario, se reune otra vez el grupo y quedará constancia de ello. +|=== \ No newline at end of file From 8c7b0d659b62c0195524efd5262d9715c1e12a18 Mon Sep 17 00:00:00 2001 From: Miguel Mier <116447847+uo277301@users.noreply.github.com> Date: Sun, 19 Feb 2023 20:38:50 +0100 Subject: [PATCH 20/22] Update 03_system_scope_and_context.adoc --- docs/03_system_scope_and_context.adoc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/03_system_scope_and_context.adoc b/docs/03_system_scope_and_context.adoc index 994659a..f707252 100644 --- a/docs/03_system_scope_and_context.adoc +++ b/docs/03_system_scope_and_context.adoc @@ -7,7 +7,7 @@ La aplicación LoMap consta de un Frontend y un Backend que se comunican con un sistema de PODs y una base de datos que contiene los lugares que se van a utilizar en la aplicación. -Los usuarios se comunicaran con el Frontend de la aplicación el cual se comunicara con el sistema de PODs externo a la aplicación para obtener la información del Usuario y sus lugares almacenados. El Frontend tambien se comunicara con el Backend de la aplicación para obtener la información de los lugares que almacena en Usuario en el POD. +Los usuarios se comunicarán con el Frontend de la aplicación el cual se comunicará con el sistema de PODs externo a la aplicación para obtener la información del Usuario y sus lugares almacenados. El Frontend también se comunicaré con el Backend de la aplicación para obtener la información de los lugares que almacena en Usuario en el POD. **Diagrama de Contexto Empresarial** @@ -16,12 +16,12 @@ image:03_business_context.png["Business Context de la Aplicación"] **Tabla de Contexto Empresarial** |=== -|Elemento de comunicacion|Input|Output -| Frontend | El Frontend recibe como entradas los datos solicitados al POD así como peticiones por parte del Usuario de diferentes pantallas de la pagina Web. Tambien recibe las respuestas de las peticiones al Backend de la aplicación. | Las salidas que proporciona el Frontend son peticiones al Backend de la aplicación para la obtencion de informacion sobre un lugar así como peticiones al POD para obtener información de los mapas de un usuario. Tambien proporciona una visualización al usuario de forma gráfica. +|Elemento de comunicación|Input|Output +| Frontend | El Frontend recibe como entradas los datos solicitados al POD así como peticiones por parte del Usuario de diferentes pantallas de la pagina Web. También recibe las respuestas de las peticiones al Backend de la aplicación. | Las salidas que proporciona el Frontend son peticiones al Backend de la aplicación para la obtención de información sobre un lugar así como peticiones al POD para obtener información de los mapas de un usuario. También proporciona una visualización al usuario de forma gráfica. | Backend | Recibe como entradas las peticiones por parte del Frontend y las respuestas por parte de la BBDD | El Backend tiene como salidas las respuestas a las peticiones del Frontend y las peticiones de datos a la BBDD. | BBDD | Como entrada tiene las peticiones de datos almacenados por parte del Backend de la aplicación | Como salidas devuelve los objetos solicitados o un mensaje de error en el caso de que no exista lo que el Backend solicita. -| POD | Como entrada el POD recibe una petición de obtencion de los datos de un Usuario | Como salida devuelve los datos del Usuario si está autorizada la petición o un mensaje de error en caso contrario. -| Usuario | El usuario visualiza de forma gráfica la petición que ha realizado al Frontend de la aplicación | El usuario solicita al Frontend la visualizacion de una pagina de la aplicación. +| POD | Como entrada el POD recibe una petición de obtención de los datos de un Usuario | Como salida devuelve los datos del Usuario si está autorizada la petición o un mensaje de error en caso contrario. +| Usuario | El usuario visualiza de forma gráfica la petición que ha realizado al Frontend de la aplicación | El usuario solicita al Frontend la visualización de una pagina de la aplicación. |=== **** @@ -39,7 +39,7 @@ image:03_technical_context.png["Technical Context de la Aplicación"] |=== |Canal de comunicación|Input|Output | SOLID-WebAPP | Se utiliza una comunicación HTTPS para solicitar datos a SOLID | Se utiliza una comunicación HTTPS para la obtención de la respuesta por parte de SOLID. -| _WebApp-RestAPI_ | Se utiliza una petición HTTPS desde la WebApp hacía la RestAPI | Se utiliza una respuesta HTTPS desde la RestAPI hacía la WebApp +| _WebApp-RestAPI_ | Se utiliza una petición HTTPS desde la WebApp hacía la RestAPI | Se utiliza una respuesta HTTPS desde la RestAPI hacía la WebApp. | _RestAPI-MongoDB_ | Se utiliza una petición HTTPS desde la RestAP hacía la base de datos MongoDB online | Se devuelve una respuesta HTTPS por parte de la base de datos MongoDB hacía la RestAPI. | _WebAPP-Usuario_ | La WebApp recibe una peticíon HTTP por parte del Usuario | La WebApp devuelve una pagina dinámica al Usuario por medio de una respuesta HTTP. |=== From 95317118da217c74db026f6fbd68f7158cd5fb6a Mon Sep 17 00:00:00 2001 From: Miguel Mier <116447847+uo277301@users.noreply.github.com> Date: Sun, 19 Feb 2023 20:41:46 +0100 Subject: [PATCH 21/22] Update 07_deployment_view.adoc --- docs/07_deployment_view.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/07_deployment_view.adoc b/docs/07_deployment_view.adoc index 08190ae..d040375 100644 --- a/docs/07_deployment_view.adoc +++ b/docs/07_deployment_view.adoc @@ -5,14 +5,14 @@ [role="arc42help"] image:07_deployment_view.png["Deployment view de la aplicación"] -La aplicación se encuentra alojada en un servidor web que interactua con los diferentes clientes a traves del puerto 8081. Ademas este servidor se nutre de la información almacenada dentro de una base de datos MongoDB alojada en un servidor en la nube. Tambien obtiene la información de los usuarios a traves de los PODs de SOLID que se encuentran en nuestro caso dentro del provedor de SOLID Inrupt. +La aplicación se encuentra alojada en un servidor web que interactúa con los diferentes clientes a traves del puerto 8081. Ademés, este servidor se nutre de la información almacenada dentro de una base de datos MongoDB alojada en un servidor en la nube. También obtiene la información de los usuarios a traves de los PODs de SOLID que se encuentran en nuestro caso dentro del provedor de SOLID Inrupt. === Infraestructura Nivel 2 ==== Web App -La Web APP es la que se comunica con los distintos clientes de usuario a traves del puerto 3000. Esta proporciona vistas HTML 5 con JavaScript con las que el usuario podra interactuar desde su navegador. Ademas des de la propia WebAPP se conectará con lo PODs de los usuarios para permitir el acceso y permitir la visualización de los mapas. +La Web APP es la que se comunica con los distintos clientes de usuario a traves del puerto 3000. Esta proporciona vistas HTML 5 con JavaScript con las que el usuario podrá interactuar desde su navegador. Además desde la propia WebAPP se conectará con lo PODs de los usuarios para permitir el acceso y permitir la visualización de los mapas. ==== REST API -La REST API nutre de información a la Web App por medio de los distintos endpoints que proporciona. La API se encuentra alojada en el puerto 5000. Ademas la información que proporciona la obtiene de la BBDD MongoDB alojada en la nube. +La REST API nutre de información a la Web App por medio de los distintos endpoints que proporciona. La API se encuentra alojada en el puerto 5000. Además, la información que proporciona la obtiene de la BBDD MongoDB alojada en la nube. ==== PODs SOLID Los PODs almacenan la información de los usuarios y se encuentran dentro de los servidores de Inrupt en la nube, que sirve PODs de SOLID. From 3a851af483bdadbe8f5d33164f9918116a8aa3aa Mon Sep 17 00:00:00 2001 From: UO271588 Date: Sun, 19 Feb 2023 21:23:58 +0100 Subject: [PATCH 22/22] =?UTF-8?q?Documentacion=5FV0.1:=20Revisi=C3=B3n=20d?= =?UTF-8?q?e=20problemas=20y=20deploy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/01_introduction_and_goals.adoc | 12 ++---------- docs/02_architecture_constraints.adoc | 19 ++++++++++--------- docs/03_system_scope_and_context.adoc | 12 +++--------- docs/04_solution_strategy.adoc | 14 +++++++------- docs/05_building_block_view.adoc | 21 ++++----------------- docs/07_deployment_view.adoc | 2 +- docs/08_concepts.adoc | 14 +++++++------- docs/09_design_decisions.adoc | 2 -- docs/10_quality_scenarios.adoc | 6 +++--- docs/11_technical_risks.adoc | 4 +--- docs/12_glossary.adoc | 1 + 11 files changed, 39 insertions(+), 68 deletions(-) diff --git a/docs/01_introduction_and_goals.adoc b/docs/01_introduction_and_goals.adoc index 8961c95..054e8f6 100644 --- a/docs/01_introduction_and_goals.adoc +++ b/docs/01_introduction_and_goals.adoc @@ -1,8 +1,6 @@ [[section-introduction-and-goals]] == Introducción y metas -[role="arc42help"] - LoMap es una aplicación desarrollada por HappySw, en la que sus usuarios tendrán acceso a un mapa personalizado con los sitios de su interés dentro de la ciudad de Bruselas. La funcionalidad principal se basa en un mapa, en el cual el propio usuario podrá seleccionar y guardar sus locales o lugares favoritos para tenerlos siempre a mano. Estos lugares pueden ir desde tiendas, bares o los monumentos más icónicos de la capital belga. @@ -14,8 +12,6 @@ La aplicación respeta la privacidad de los clientes mediante los principios SOL === Descripción de los requisitos -[role="arc42help"] -**** Los principales requisitos funcionales de la aplicación serán: * Los usuarios podrán marcar con chinchetas (temporal) los lugares de interés. @@ -24,13 +20,11 @@ Los principales requisitos funcionales de la aplicación serán: * Los usuarios podrán agregar amigos para poder ver los lugares y comentarios que hicieron sobre los mismos. * El mapa tendrá filtros, ya sea para filtrar los lugares por restaurantes o monumentos, o para ver los lugares favoritos de sus amigos. -**** === Objetivos de calidad -[role="arc42help"] - [options="header",cols="1,2,2"] + |=== |Prioridad|Meta|Motivación | 1 | Usabilidad | La aplicación debe ser fácilmente usable por cualquier usuario, con mucha o poca experiencia. @@ -39,12 +33,10 @@ Los principales requisitos funcionales de la aplicación serán: | 4 | Eficiencia | Al abrir la aplicación o seleccionar un elemento debe ser eficiente y sus tiempos de carga bajos. |=== - === Stakeholders -[role="arc42help"] - [options="header",cols="1,2,2"] + |=== |Rol/Nombre|Contacto|Expectativas | Cliente | Interaccionan de manera directa con la aplicación, tienen un usuario y amigos y pueden visualizar los puntos de interés | El objetivo principal es que sea capaz de interactuar con la aplicación de forma intuitiva y de una manera cómoda para el usuario aún sin ser un usuario avanzado. diff --git a/docs/02_architecture_constraints.adoc b/docs/02_architecture_constraints.adoc index 5bfb41f..fa38bb1 100644 --- a/docs/02_architecture_constraints.adoc +++ b/docs/02_architecture_constraints.adoc @@ -1,9 +1,9 @@ [[section-architecture-constraints]] -= Restricciones +== Restricciones -== Restricciones tecnicas +=== Restricciones tecnicas -[cols="1,1"] +[options="header", cols="1,1"] |=== |Restricción |Explicación @@ -15,11 +15,11 @@ |Base de Datos |Usaremos TBD. -|=== +|=== -== Restricciones organizacionales +=== Restricciones organizacionales -[cols="1,1"] +[options="header", cols="1,1"] |=== |Restricción |Explicación @@ -28,11 +28,11 @@ |Control del Repositorio |Todo el proyecto se encuentra en un repositorio en github con las siguientes ramas: Rama Master, rama Release, Rama Develop y una rama por cada usuario. -|=== +|=== -== Convenciones +=== Convenciones -[cols="1,1"] +[options="header", cols="1,1"] |=== |Restricción |Explicación @@ -41,3 +41,4 @@ |Idioma |Español. +|=== diff --git a/docs/03_system_scope_and_context.adoc b/docs/03_system_scope_and_context.adoc index f707252..ef6ccbe 100644 --- a/docs/03_system_scope_and_context.adoc +++ b/docs/03_system_scope_and_context.adoc @@ -3,8 +3,6 @@ === Contexto Empresarial -[role="arc42help"] - La aplicación LoMap consta de un Frontend y un Backend que se comunican con un sistema de PODs y una base de datos que contiene los lugares que se van a utilizar en la aplicación. Los usuarios se comunicarán con el Frontend de la aplicación el cual se comunicará con el sistema de PODs externo a la aplicación para obtener la información del Usuario y sus lugares almacenados. El Frontend también se comunicaré con el Backend de la aplicación para obtener la información de los lugares que almacena en Usuario en el POD. @@ -14,9 +12,9 @@ Los usuarios se comunicarán con el Frontend de la aplicación el cual se comuni image:03_business_context.png["Business Context de la Aplicación"] **Tabla de Contexto Empresarial** - +[options="header", cols="1,1,1"] |=== -|Elemento de comunicación|Input|Output +| Elemento de comunicación | Input| Output | Frontend | El Frontend recibe como entradas los datos solicitados al POD así como peticiones por parte del Usuario de diferentes pantallas de la pagina Web. También recibe las respuestas de las peticiones al Backend de la aplicación. | Las salidas que proporciona el Frontend son peticiones al Backend de la aplicación para la obtención de información sobre un lugar así como peticiones al POD para obtener información de los mapas de un usuario. También proporciona una visualización al usuario de forma gráfica. | Backend | Recibe como entradas las peticiones por parte del Frontend y las respuestas por parte de la BBDD | El Backend tiene como salidas las respuestas a las peticiones del Frontend y las peticiones de datos a la BBDD. | BBDD | Como entrada tiene las peticiones de datos almacenados por parte del Backend de la aplicación | Como salidas devuelve los objetos solicitados o un mensaje de error en el caso de que no exista lo que el Backend solicita. @@ -24,18 +22,14 @@ image:03_business_context.png["Business Context de la Aplicación"] | Usuario | El usuario visualiza de forma gráfica la petición que ha realizado al Frontend de la aplicación | El usuario solicita al Frontend la visualización de una pagina de la aplicación. |=== -**** - === Contexto Técnico -[role="arc42help"] - **Diagrama de Contexto Técnico** image:03_technical_context.png["Technical Context de la Aplicación"] **Mapeado de Input/Output a Canales** - +[options="header", cols="1,1,1"] |=== |Canal de comunicación|Input|Output | SOLID-WebAPP | Se utiliza una comunicación HTTPS para solicitar datos a SOLID | Se utiliza una comunicación HTTPS para la obtención de la respuesta por parte de SOLID. diff --git a/docs/04_solution_strategy.adoc b/docs/04_solution_strategy.adoc index 6dbcab0..10b7ca9 100644 --- a/docs/04_solution_strategy.adoc +++ b/docs/04_solution_strategy.adoc @@ -1,5 +1,5 @@ [[section-solution-strategy]] -= Estrategia de solución +== Estrategia de solución * Base de datos: TBD. @@ -9,20 +9,20 @@ * Despliegue: TBD. -== Diseño +=== Diseño -== Seguridad +=== Seguridad Garantizamos la seguridad del usuario mediante el uso de PODs. -== Testabilidad +=== Testabilidad Se realizarán pruebas para cada parte individual de la aplicación, garantizando así el correcto funcionamiento de los diferentes modulos tanto individualmente como de forma conjunta. -== Desarrollo +=== Desarrollo Para esta fase inicial del proyecto se ha tenido más en cuenta el Front-End, el Back-End se tendrá mayor en consideración más adelante en el curso, ya que en otras asignaturas se van a adquirir conocimientos útiles que se podrán aplicar. -== Estructura +=== Estructura -== Interfaz +=== Interfaz La interfaz gráfica será elegida entre todos los miembros del equipo, aportando cada uno algún boceto o idea, los cuales serán puestos en común y se decidirá cual se ajusta mejor a la apicación esperada y que elementos de dichos bocetos resultan más adecuados. Para ello se tendrá en cuenta la usabilidad y las necesidades de los difentes tipos de usuarios. diff --git a/docs/05_building_block_view.adoc b/docs/05_building_block_view.adoc index a53852c..e155c71 100644 --- a/docs/05_building_block_view.adoc +++ b/docs/05_building_block_view.adoc @@ -3,38 +3,25 @@ == Building Block View -[role="arc42help"] -**** El código se descompone de manera estructurada por niveles, en los que se enseñan las dependencias internas de cada elemento. -El sistema se divide en Whitebox y Blackbox - - - -**** +El sistema se divide en Whitebox y Blackbox. === Whitebox Overall System -[role="arc42help"] .Añadir el dibujo del whitebox [options="header",cols="1,2"] |=== -|Actores|Descripción +|Actores | Descripción | Cliente / Usuario | Es el que interactúa directamente con la aplicación y su interfaz de usuario. Cada uno tiene un POD en el cual se almacenan sus datos y al cual se puede acceder. | Administrador | Tiene acceso al completo de la aplicación y puede administrarla para que funcione correctamente. |=== - - === Blackbox Overall System - -[role="arc42help"] - [options="header",cols="1,2"] |=== -|Nombre|Descripción +| Nombre | Descripción | SOLID | Cada usuario tiene su POD y permite a la aplicación acceder a sus datos. | Base de Datos | Provee a la aplicación de la información necesaria, ya sean los mapas o los puntos de interés. | Interfaz de usuario | La interfaz con la que interactúa el usuario. -|=== - +|=== \ No newline at end of file diff --git a/docs/07_deployment_view.adoc b/docs/07_deployment_view.adoc index d040375..2ddd417 100644 --- a/docs/07_deployment_view.adoc +++ b/docs/07_deployment_view.adoc @@ -2,7 +2,6 @@ == Vista de implementación === Infraestructura Nivel 1 -[role="arc42help"] image:07_deployment_view.png["Deployment view de la aplicación"] La aplicación se encuentra alojada en un servidor web que interactúa con los diferentes clientes a traves del puerto 8081. Ademés, este servidor se nutre de la información almacenada dentro de una base de datos MongoDB alojada en un servidor en la nube. También obtiene la información de los usuarios a traves de los PODs de SOLID que se encuentran en nuestro caso dentro del provedor de SOLID Inrupt. @@ -23,6 +22,7 @@ La base de datos se encuentra alojada en los propios servidores que proporciona === Aspectos de calidad y rendimiento Se espera que los componentes de la LoMap proporcionen los siguientes aspectos de calidad y de rendimiento en cuanto a los tiempos de respuesta y a la disponibilidad de los distintos elementos +[options="header", cols="1,1,1"] |=== | Dispositivo | Tiempo de respuesta | Disponibilidad | Web App | Poco tiempo de respuesta | Alta diff --git a/docs/08_concepts.adoc b/docs/08_concepts.adoc index d6bac5c..fd3a786 100644 --- a/docs/08_concepts.adoc +++ b/docs/08_concepts.adoc @@ -1,20 +1,20 @@ [[section-concepts]] -= Conceptos transversales +== Conceptos transversales -== Persistencia +=== Persistencia Los datos de los usuarios serán almacenados, de manera que cada usuario conservará la información que hayan creado sobre un lugar de manera descentralizada. -== Usuarios y su privacidad +=== Usuarios y su privacidad Las contraseñas e información sensible no sera almacenada en una base de datos para mayor seguridad. En cambio, se optará por almacenar dicha información en un pod personal de cada usuario siguiendo los principios SOLID. -== Interfaz de Usuario +=== Interfaz de Usuario Para la interfaz gráfica se usará el framework React, teniendo como base los diseños aceptados y creados por los miembros del equipo. -== Manejo de Sesión +=== Manejo de Sesión Para el inicio de la sesión será necesario estar registrado previamente o deberá registrarse. La información almacenada por el usuario solo será accesible por este a través de su pod y siguiendo los principios SOLID. -== Testeable +=== Testeable Para añadir una funcionalidad o característica deberá ser probada adecuadamente con anterioridad. Con esto en mente se deberán realizar tanto pruebas unitarias, para comprobar el correcto funcionamiento del código, como pruebas relacionadas con la usabilidad. -== Modelo de dominio +=== Modelo de dominio Concepto inicial del modelo de dominio, altamente sujeto a cambios y ampliaciones. diff --git a/docs/09_design_decisions.adoc b/docs/09_design_decisions.adoc index 2123e08..de28178 100644 --- a/docs/09_design_decisions.adoc +++ b/docs/09_design_decisions.adoc @@ -1,8 +1,6 @@ [[section-design-decisions]] == Design Decisions - -[role="arc42help"] [options="header",cols="1,2,2"] |=== |Nombre|Problema|Decisión diff --git a/docs/10_quality_scenarios.adoc b/docs/10_quality_scenarios.adoc index d146a5b..6995bd6 100644 --- a/docs/10_quality_scenarios.adoc +++ b/docs/10_quality_scenarios.adoc @@ -1,11 +1,11 @@ [[section-quality-scenarios]] -= Requisitos de calidad +== Requisitos de calidad -== Árbol de calidad +=== Árbol de calidad image::arbolDeCalidad.png["Example UML Diagram"] -== Escenarios de calidad +=== Escenarios de calidad [options="header"] |================================================================================== |Id |Atributo de calidad |Escenario de calidad diff --git a/docs/11_technical_risks.adoc b/docs/11_technical_risks.adoc index 48dca25..efa7220 100644 --- a/docs/11_technical_risks.adoc +++ b/docs/11_technical_risks.adoc @@ -1,7 +1,6 @@ [[section-technical-risks]] == Riesgos y deudas técnicas -**** [cols="1,1"] |=== |Riesgo |Explicación @@ -20,5 +19,4 @@ |Github |Todos lo hemos usado ya y sabemos más o menos el funcionamiento, pero hay caracteristicas que son nuevas para nosotros y estamos aprendiendo a utilizar. -|=== -**** +|=== diff --git a/docs/12_glossary.adoc b/docs/12_glossary.adoc index 3eed232..8abff20 100644 --- a/docs/12_glossary.adoc +++ b/docs/12_glossary.adoc @@ -2,6 +2,7 @@ == Glossary [options="header"] + |=== | Termino | Definición | REACT