From 4cc629e649d7a40ce77ea557293e4559e4276528 Mon Sep 17 00:00:00 2001 From: Lara Date: Mon, 18 Mar 2024 11:40:20 +0100 Subject: [PATCH 1/5] =?UTF-8?q?Cambios=20en=20la=20documentaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/images/05_nivel_2.png | Bin 15908 -> 16458 bytes .../images/05_sistema-general-caja-blanca.png | Bin 12381 -> 10235 bytes docs/src/01_introduction_and_goals.adoc | 12 +++---- docs/src/02_architecture_constraints.adoc | 31 +++++++++++------- docs/src/05_building_block_view.adoc | 21 +++++++++--- docs/src/07_deployment_view.adoc | 4 +-- docs/src/11_technical_risks.adoc | 16 +++++++-- 7 files changed, 57 insertions(+), 27 deletions(-) diff --git a/docs/images/05_nivel_2.png b/docs/images/05_nivel_2.png index 2f6812c8c8eac020f58c13899505e537dc8ec06d..1aee79732263e599a64caff71990f62784c17773 100644 GIT binary patch literal 16458 zcmeHu2T+q;w{8%nNVkD>#f}1^L?BdAu%YxK&42417jz&HMga(f!GMJc{K60x0Dgclxaw$}hvat%PJ=JoZB#W?A&{aNwsrUp@SWA^ zlCdiU!r4Io&(Ms_x($ISk6pf?s^@7wm&jTssGo=_9{y&1SOv!#%B{AI^_U5cgQ~K9 z8*jrdKJNRExF4T7aNse+*ASKyDPqSSN(GIIGXzQ!nvaOQu8(3BJtNZE@_LM&NA3Oo zrv1sR(oQw&agU+W?S z&JE?}(Z2uR^##3>%f^)TQQS|U-Dk;BMviZ4PiOoaYej;w^8D+)#cf}Xy>pT~XmAv+ z#-zui!WYcZNRUw-zkf8%YsK^plc3yHO{E`>ZrTWQ#|kOL)HDNQzK%`EOwD|HT&h}F z<&6uuSL#FAvknGGu?U2-p7l8Ox-g}oA=2mGt(K9GU5ocbSsB$&B4j-j+V0tAuZ0^u z{_8!TuA0cqv`Fz?h;dC7OW;+KU=ipLiusEA;eMhqeHZk$%3g+GRh-H-YbBK_*eH%031OV=aEXH!F3HBqJhH$D%ULjlI}7}r=8_| zL$2thVC0KWJ3`UD#*Pry$dIV|PV4PG#Y@W}i#$aqSOuh0A|Umm2+<=lE5=bDW z#XFDo$9xo$_f3~ye=<|$5dAW=VoY^L4H#8-KHO@3lsTTQr{%F2Hpz$hUJK9eAQCjxV-(A#4Swc=YT>^Hp=IV9F+GBTDzP6ZZX+g!-QDdjQZ zW>^AmU>e$`)gtM)z=j zp4Kz88BTuo(-I=x*#($Ujt|O@nYm&0OZTSiDYkBxb|AkJAdyS&h*y3aP=3`9wQOXe z+NF+Oi-)$qE80|uEMWTQ1W7*S<;UDSJcbMcbQ11;zMPR)Q8PH<&}!hm5J!_La9En^ zUdEoUUTZw61Rq>=T~VINW3W^_jA#isv5h6Dkm0*1Lgf@URO;#<7f_L75zt}_=4jLT z<3(DW^-R4WA{YM>9T@&I@N9_+?)}OC52i{FjcSlIOWmhbT~`@ds4W-Fkp=RQ_3>ZP zQKvz@x$C-&XN#81#?p?9scFaSKM)*cZn?+YL>`UbTd#h2DVxY(mSdBc_^iG{7%P(k z^K|=o0C6k!S3El)gAgpAV#1zAyyTa+d`6fO+{Y#q9QEljH?)Je7UH1<7Xu08<(pqo z^3rCTIzCIYtx01hG0@sE@$ zT0EK<+M{&CqhQqE(Rfp?l_)8fCk&mWOt`Hs+6rBv6LCX}CtA4vPfdMh%vsH}tGHgkg|gohUEujOY88+yx} zC-iJ=GAk$qblSt?rSF2|L$mUZXr76&uPjbwP8wG^>8SwYs|pFyQCxi+Ll%`*Hj)XF zwwdP>RFiFS?SJTCm2_0;Ry)_Rxs;;X4eb43m_UzplHL8uNAL!0`u^mOFis@SX{fgp zl`rJ#kSy|yHxHy0Tc6BHZ*CG(ME<~tyFfJ(6TQIwWXNz`?ltOpoCQU;zDtYGckc1U z)RtWQ(!%|I+oYp?oTdKq8_|V<#yM2}cS?FZjXyqLmCT-qQ8w3nDWz)W+_aal&@5tz ztR}}&<{P-?_@(c@fC=1G{G#AF`j#?0aE$Mn+sg8ep7Ov~!r|YUT*~Y0{Iu|nx>8w@ zT(hPL4zm;M0p~=Or_i4M*aHU;Q#5+v>fE|glH$` zv5=V7-eFDxHI})AHDi%+`95sh0pg;@#uZY}%CN+pXt90VJ2OW7CX}LgJYjM5C9dBm z)6J-&fFAKw4=Hah#9-&g8?aI5Ms4x$xLzw4cgqc%`qn?vCUqi${V(>>2&$%IE{eCr z1zFVLN6(6I4y)em7L}~gJlk@Q`B6E8Z7mfYD1|`OQt!!p58rLl#}n_c-~NV>{1PwA zRI?+lYtC32F$HyB=BakbkwrB2voXFl&#>RMj<$bepT3f}67Sz(8f7(9*;ybmGZ$g! z(BIxE=_+^;B}OnT>YvFq+;ifjwO{w*1?mytErc4TJTCq1&QmacdE2S?-O-mg1iVGF z-PF`=N0dYznID!vdMx1is#CX-$#-1z9psFY8oa*VXGVO?-uT>rHS?nUc~~f?ZhQ=_%*%8jF>3gW;!bZzhpUPbAC{hD%l)kSI4BXD z37TbN^{S|K&!w75{Tot}1V-nt%_d)EBkI-PncZ7C^xo{oN~R86%-^?(9xmN1g8ITv z+?QQ4$sAmWRuAtjeB4e#Ox0OR&9gDzuKUt<4aQi9v-s5hrJZx~8ece*d$;$Fz=Ngc zj>djnHp@25&knB`3hWwHcl&fsL`O{{@@#=xSY#25m}{L^R{5zD@l7~v&Yo%D@HX|2 zam-V56$whO8^Shc)s2o9j~N+7^>@z>aqw8v7Ut4WFJz;uz1Yo{sp?Ho|imw~3L;Vevd){rqS zG&@94&}kgTFM8O$9OWh%6B`zU8{Vu4Dx4Uw;JCyh5I{IJc)>$pvLRKwtltn!RoPL9j3NXq;IQjv8kW6MvC#*Ss>`Is);IUL=m(uWMjvb!%ybvzN&L@$iYODB&8|p6qrNyX) zWsc?nb(s@lW8*loGbxYZPda+tWr0N3y5%GuK)l-(9OX^m5Gbns%>02Ue|DD-{y+$S zChOmV(|KBS=%)9Odnm|#wv~kpZXv+ouizdr=x^7a5}AFv3FF^T#Ra%px@MR0XIc~WxHs;pil2) z`9uIJAL<@w!JX_!xxeJ6TE+1@{g!962AsHmO!o9g4gn2`3RO3DfsD{-zBlsnVNK_m z;b|_vlXCtvfU2Sq)(WSqX`9q#ZRoFbaV@IEaSBJueb}y0uTJ|d{jXTCCrat`^w{bu zrN1`6qN1X=14hbKkK%vB#3^VS&DP_r)y!RjO}{&N8lL9=d!b*u5}}^-a-W207893n zZif;T;YO-n$>}%u(R3It>y~Jbb}uhZ#d<(FlQ5Am0ezKUZ~V)bwas|Tz+1kY5y1Xd)88Jt_wBJpj(9=U=j$@U*>E-g-Ou|t z_NRiJdEggZ5pdQFqkt&4$2j@r68=oI;<6D8D+nUSdWSmdw^EC1GSuYH>hBft{KDY2 z(8P=G^qo9o*O4GcxN1Rpa5hP2v$#Bok{cb)M2E^eXCEOhS?rPX5768~&6OnE((Rd9Gbz~#1= zW!yPr5~UAQb0;${3?R%fKX`dI>P%>@^~57J&eINVgj2NEq1Ze}0BIH}OPEI0jWt}e zlJ(%qeUa*K4*reaao@okr@{4ozdtwZrKb-8WEC90)CsakmUTzM-AqUXT|(OV^)EqO zgV~d*LJc2mYN=;*edh8oqjnwQd@JOB3&X1~BxD@Y{ZT0GG1zD+!Y#91p{Yt8m1k7x zo<|4R7Jh4Y+&bj&FH1+<`xUDlVvLY({y}}2aDCIlTY(jX9Q3T-cL00yW=--_s=V4d-Qf9y+3y}TiHfO%upQh-TX*+3Hw$UtY^80?JTQaP0b*F3kjIB@n3qz^7AeHkeKDoXNxVx(_+nWJ11j1KSDDI|66ymIOeQBm3(Oe~PY*)dzN%zR*lx zp6;-7+9chBm%O{KVe31l8T9v~ac0Zyvu%Q%&# zt3bYnoHF2r@tux(t)?N zKID~z&de_#pW>=#f-@Fj4@hFooC_x^_x>^T!Er&82t3O{S^aC8uyi2flG8i&Qc5e8ug zh8htyk7uukuGI#pZ(TvQ(t2YAbxG;<9#}`QpyB;U3_~gm<488X1^p z-<*>#uk+>Gb>G2&mwhR5uA#1Gw7_e2bU+GTCjwok-ut*Cb(qpoT7;6HdASC^<$`fI z`45v~fT!)-S+Blcuo(hxs7CX|3FKCeABx%EHbnk0)I26}Crb*!7qL8jYkBvMq(}9) zo^Z)+C>jQJ6`T?WHg3d4H@f1g3^ng`gC-wR^*Mf=!E}~(TGgVsHcji6^*6PPZ{Q8P z_ig(M7sC`d$@9L>j^B>mH~#C8%DQAWAmN^ig9lvq)7-IgTJhk2h&VVArBjC z$MU%Ax0RXDsMpO48+%ASO(^kai>5_d^}4(Xm$9O*$rNl zih>CAwL_bHb$89zp=QPaA3^K#jd^!I2*BTUOwWdwYbK6+MrrPYZi2L$!y~4S%U(M0 zTie(PPI^^PG<0lp8Dp23=>ArBS`DYt=q>BiCF*vabY}EU_}oe0*ufm!4MAK=Sz8(G zxzg7AFfw!M*sLhbnT6sywrm7)x-D6GY<(Nb0MreO3?#km5&;gokm%idg5=WZ9t$c8 z^-SSkB>mSO@+*43^PY%0H=D2}OkUED_ORZU4$2wUrt==7-~TLHM|YGCWtuPSIR|}F ztfGzob(CeFu^n|J!{>!qX)*9`03*JauT92d^DButo9lSxA-Mq+@D?}M>u>m_F>w&J zlKsE++dWLo$m((2NcB)`bf*`+>Y3i1tX*qI_R8TC(w1>nTx0^eV6c1uM3}~#3EpiV z?P$f4XJTS%mnBNb-$t-sWoX*(ge@xp3=1qPO!c=PFUKdT!Izhpb7buMvh>jg*?Ywe zveIId27T47ra!+SfRAsno%=u`>4<(UihjOrn$%R@ShTC(3`0LmTJesk&4_yRBk;V{?0N_`*V3k=UAsKvW81}Tqx{r)ioj&1< zS8LZqAl^KGS$0}b#*Y+)O^H50m|zykvmW!U#b~N2Q%90tNqz2?Gj)KuNtRF-Y+hna zG~-V9Pz68t&bi?(jvRTJ*wadidG}NQkX`3-@7?v7Badq&*!q#ZhmWopCd-bWbbCL1 zaa2`I;*7;zpQX?7?P0Z&UIdR(=&A2dY-s75%di;q4GTB4{I`1h`zbDwD{|@C4Ilh$ z%yKh?QEvxbzDn4A!{uR@&PbdUNna`1{pshnshnpKz&R381mBYBWmrzy3zXTZn;ZEa zLXF-qS{Ti6Ze`%AUUL`xi04|L>Z_lod5HziIP~#uvXcHBB=cJ z#4`%UYzY~&8k;Ie&w`&$2)p%a6F{}FNEgx$juAt3@U-TvkWR!r$luSJEqq?YK^OOs zq@Rfa!8Hw=&W-u%y1Bd4@orZKgY9(|fn#PHX)cszs&6Z|!1Tv4PZiC$g}Z+}u=~2K zs+nuMj2&fZnh*^m7P>OTf&5k)M6o2r$KWp6jQRR=L#@4E{1hnX#OS>qO+sM<=b0G) zwN{Iq@rE!oK;!M#7|()qi(qCIz(wwY4ypk&jmwCrrCXj*X8GN`-*X)NFk%G;o zOyvPNNEArP|C~Ih%yC4%1cW|xG8p52{ky6Az#T%{na+1Wlz$)X`Srok9CSg=;C1~@ zCF*P%v1;);Y)2O#*#B;NZ4sRMa>RH?Ze=tSre-p80mHAH5wrfTnfBCU(9 zsL;9hYe9}?sc@!*?=1PXLtzO(H=>ItMtv9C30-PjCAuGts=Z72Pg@3igN>XM446HD zNV&kPRDFPDubRFF-U%ybx7)R-p9XNh_2kU=nmO*C<*dUNx`|>M=sH!tQFsg^c2Xoh zD>O>jit@&9c8JNu1Q?2R-d8rssuU&;{yo&^^Xb08t_+$5T_Y2>wFuWUU2&sKv-NiI zq_u^Nl0kf{q6-cZiZ$hH*SMHwOIJ)-%)s#Q^n6}SUS7WBJEd0!+O#XHr!d2onRXgs z976ICesEZSlS4AUcaO6*j6E-DGM@=L_{!hoDz^mmA-O&8D2ZssYhqz$VT+PRe|>wW zwfE!EWJD&RfqwMxGpi~n=*@J7Ci`n#M~YgcW$WGTjB@@(eBon>Curd`Jo8l*q5p!NVT+@IO#iAF4pc! z+OwfwMiF;rcndmhTS4x0)33bge_@lBwiDUr3FT8Ys} zM&(Dq(9rt+sM+WqE^U)*FNb$U3n^cAi{`i5B%eY;j|zJ}i*p+p87DhM4JrY_k6v!~-sY0B32*(D@iDJVK?2Y$cufvmX=YHtq zy#~wP?a9dIQeN-sxEupA;wuYYe{d9^6%4osO3gAvkG`hK`UlfKZEumD_5sc@H`is5 zRCooU%Xux%f2D8x1Y!A8oCs~T`JzliSw&RNfszxOM2}istLA9^8%k^GiBFZ*D`anj z7$@%b(UtW5#%FQEe7%CIA3OU7URd}UqZZ@G&N@`BtzI6Lzh$~HZZ~3nZsgumjAl_y zzF8%Bn@q<=H6{NN%n?3AjDFv2Ep2ns3!EXoR4%w#sMc+kgMpIs%M$ez0 zLNls=J}STnPm^~uxufaH$)J3BFsyGoJ==*t4>WTR<~?sAB=tmT0QfjI8wgYH%CdU- zv(mdG^dxGO%|829tcv^BngHcrA2BfAouu~u#*^h#83uY*zjEi+3!(9lE<@(X^czs7 zdUZEK>8H4P!EJs|-f`uz(o>hg3C7A<7Rlfm`CErjZvjrp(FM8<#&gdkZskdx z{kS_Co(Gn&3}VwyqW~sOtjK$NL?J97`Ouu2{Wf}1(FhMqw9KK8u@*&{T|AZqqU#hj}@xAmVY{&*6R%XR)dAODYM>;e+1 z^M%Og1QR9E8ru4DoqVy6p5FsbXjS!29lH7bC(21~t5+vF6CsN;V44M(z&KtyqW)4D zO1tbBiwNX6$X{0+#sWv^otX+);*N2*2C$ikSf%|`F-s>+k*;U`L<-sJ&(7+cy6Df1 zAx#}m%4~jnJz08Dfz)zbMp=c%P)nnUd!L-6iupMlx|>Wf&^~uL(+4S471%xFAm-UwJ!%O*8l7yVsPTWGPQWDjRj)yCoXiAan`^Nx(p zrsch)r$x#tOhXie`#jUQJr>#x*4|hFa`QHdHzId^1BBvHz zRtT%*H&@n7YwuB>*}!_Z*d{elW#UsbN1PMYDy5vMjK*7!U&%969ACyhLV*S_eX}%W z5PLYfzVgO8#jo$UcH`wkgY|8EW}Zv#%iC-u+{e9_zkWAwu^d`m#tVC_%UqawCfBk3 zr=!2ERk};y?(64txfbQim{Mqdn0nQj#u60Zm*jiQX<7emZ5%$l)Vbe2#BY{OfGxQr zBr;m`*3=!L#0D%6TR{vKZHAqDEJKlds#ri2a8zzp>_erNkz`{MX}U!;E+S24h&1Bh zx*@(ITchd8?&vRpF?R#rS7{EZ6a5SzYtwQnbkzBQ1KQ@f}m1kWmklz^Z;*Lg8pRJYZV`vqqmT7!w z{j>s+R`Quf`Xnh1g4uzeNc?%69gamR=(rC;^fZ-=g)9~+!?!3M}1pvQ&Z675ifQ1Y&+1P z-YBH>wk1_ey-COz0b1|Q8V)bp(`L)FVqUfq*Nn)eV%7nqf&9AS*PjjYqlqA=%Rs+a;?dt zX1>al@)@t_X4j%fA)9SKGu41aa-^M53iYaySkKXV?}50mndbyaV#;xqe%V>%X5qMx zU**_+)LzG)*$v#vD-K23G5k9=msG27wyv1*tR{;ny3c_;2YgPsfGDm?lUO}su(3m9 zgc6qRAQDN=HcIZ>XzA}C*}Oxw{piQL>}F$erym^+(k2eFmFG*A3wdryD3m|-CA#}~ zriL?Vl;0V@CH{Wkh&vpVEXPBR4QqI+O5*~pJLc>0oHYj{n2mPKG(|TX7xX$G5mhh% z2;nVFX?h8L>r3xk?`cCD6ZGi)ns0NGM5woaH)Y(n2Whn-Jz6jUJPTIj5LYWgtyj<5 zoS}_owx2`3`i!(WVLBR3hXtk^Pm~L$m5Ubb1E&2CQ}nWx=Hihtd9X63VB|*^8q$rt zEQgX=SAI70@C|qeClM^5-TizC2{_}4gFm4NmVB9(BAAnDietedPs@M(ym$1@T*hCC z{x=5N1^o?Pf}=iYUB+&Ho~@e?w${Q%xv16G-|0=lHL}mRz~E zd&#v^(MEg+`2us4hOk%TyM>G)(o`O!`YtH{FPt0Y*P*U}L_hiiF8Mu_HzU_C^Y@T- zc}=JD7}U)v#h4#+cT|(qS8{AnmcFk6tvqR zZ77Q$kR$2HT1LX0s&VE$Up3Z!@^%#2aI9O@R*!h}#yX;AZb^vqT0iUVBj1Lo38OYu zGIeDD#7L5I6q6|S{onIQVlnuSW=V`R=CSx>m@m|4s%^lf{H zb?9S>J!O(1FE1ZK=qD1u`nsonKL;uSTD5PkB%hHo!{XsWj{9*0e~={y>zyECgC)ByX_lutM5#rmXk7jTiP*tVWys%-IRZff3q6WJf@Xge)rAb#2Ht8Q2(<7JB~iwS1ADgS4Zj?;Yp?+uL(0xQPLl|-=CLUU1%kgNsgp0ZwyIhC349b zIGl4pmVgtbb%5V|)g8Ou*db_CBB-zN#7E0mIG|%l^uj4;?Kk;Fe&2#qOS4H9SwTve z3sGZu-N}ZDpfLBiN@1Ubd(kUiadoL;8u9&E_Nn%-?bGbj?XhDs7aKqP_0DR_9<*XR z!s(;vIT!Qsiu_7V$z*=r8)aJc8s^pdtVgmAuhMeG&EA#h6&d{;zacDM z#0yImZ2wxNPfI8W%zuy{mH#;ZdH$>X#Qane`GDmFy(X5Ov-&i7{lY1;3cW;cLbm#b zQ75CVI*UM-BGpIPu%Q`|!MRcILUKX)xy{|Y3JQOnwf zW^T_Zn=7@*-Wak%bz~PqJ7_AESRI|sjW%7{OOi$ixothm{qx!R6QkZUd3LR*FnZP1 z)u6QI{mNXUfUWB!@DdntH`NPoHFNnCPduGD$$ztnS=du0O5oh}>ZQ+D-LKzWlJ_>N z=1@5U%K3RUe3Z$*jWuWja zdydNz)Y~LLT@7b@gRAyl2!U@fJKFSK&?`>nEN}1mM+dCSE0v%Hy}OFa=?y!${xE8)>N71YJ_mg$y~eYxuq(@4I0nQWO@^|xVJZ3cTSHyD z{ycce@jUU83yACV>hPt#=McD*Qk*3lOkdI4q?#*0{XEVVIZ_+G_+q{<_U1uo=Fc7} zy?^Qr_y==(-=`dwN+D6;*h!K63Yc*7FPs>3t~O3S-KtS8yls`xH8gb&Nz4(fjvC#U z(#;JekcLSs+1bqrxuq|q$`1>|{GJd5Wj?IWn2aJEYpFGa@Q{9=p_LTDK{?mm z8<}~wSS^$F;wY-5pIT+)zjliISuSy+i*oi|gazgEi{8`Cf>xOnjRG`=!Ip_dfUG~( z-NhSQ+^J+zz5b(>02<15@>I}T5mmmVNK5tq(U&UhSllW+DVJaM;|j_7)*RhtGor$x z1;6Jpyx#6664sYFuAcz&$d8kA%>aMH%qCbaNmoak^QIV!B6ZdJz56OFrX zoSpOi++Rb=Q&a4v_WLb$Yb+Zd;K;c4%5rdRJNjun4$_B2w1P7K>!98l*Vv=4Z=N9*98UEXVM>qF^;@_yRZC0Ner(ENdiNS-FG5=b{2*i|$ zu&L3Dm4V~RGd@9VzREMb>d6ENmVFetO2eTC){Vib#4jzyw#gK=e-}kvC<{vI)JDeC#{64;!cuPMgQD-t-ELw}+PDr#9 z-lExr3eq!mhZyJ%^#;}hqIO(6WH6Y)BT-7PjB#f8z1%si7$(Y$A#;!u6&Jkys8KK@ z!I#g8gm}g(fT~kc``XO&x}S^rM-#GLx{QipL>1H4PunHnqjvDwBzO3|wt7%olf~i6 z(1;pYTV5*Fr2uAun&Lv^ZucB7Ksf@u>EC7mn#s&N8`L)?XFA^Z3kk+IFIx)cU>-2_ zaS|=&7K0pbKkHc18$1zPlnw$kbI_HgdYR`0OvR6^&O0N z0R45F`dK6B5RT1d;r*Z`(?q#jg%3GJNm$FJb?4-(IfqA5J#UoW3kBaFom!1>iXPF} zToqprDD$Y{IN?2bva`T~LSCy^pLV|z1M0#?d8XxnLdF{$Wl+yLw*LSW@pAFOMlDIH zBXZUr@L{H{{e%O-y`%u%6-QO$wu{w`Lfomo69QvW7VX2ip!@w>&##g-=(m-$R6GsS z+d>A*pQhv;d&Z*bkDZ&0N9LRRE?k6VuGw}LYOfmJK^;B0vyPZ}VI|tcQHx)~l~Pq+ z-2dFfz!M`S)rTLUajjJbmXpaQJX`fL;+{$7hMEb^+Q}}T#$dNFv_31^%`VtLo)zuO#Vhs6Ht*)1>r^DJ+K2ZY zcTHfm-7I`;ALh&AG$gBBh$$;^dojR(D&xYmAHqHXu}TwY%KH3mTp4JhaohhG8rv+b zAXd!u4wt)P-`(x$1)L*24-d>7yqyECHo?wf1#hU^zSHIlfzyC3wuw25$GWDHwC?&n z`X~im4l}dVx+(jJ^SB3Cw;H1@S8~#K&e37y&ZP4mmSOVG74yctw(~z|DRc&Hz5{*V zs=O9^pB%n=ZORBRk>-p60aR^bZKhZVf@hAh{_-N8*H}KK4B51EtKKB6u#aAE;&QQK zyk=8fA8322eBzqQ)!?Yt{RxK<&x|BhuAE{8!D6H~mCUmr3K<09I$-~H3X}5=#`^mz zk28ng-eTF$^lCk&IQ%Pvo!_mTmBg_R#sy9Rf;!7a05CMDuji>3eKG1%&)C=<92MS| zPv4#Rb%ky1+u@8Vd~<@(`ala}L2r#}y169#fdy3uM**11NxnUV+F*crx`)bx2A%xN z$u2`)Oj+ZnKQMhJdM8bsrkd!pLGA|xb#pGJaL%8Z~WF+c4qp`T_8Jr>=dJ? zFGz5A5?t&(=LND-g}2XrRWn(qNTyIwo=`ah$`i}(v9D`Y@JtWJl`I)=R6F_^%Q`J_ zXrY2y?~^T?Cvpu5vb(!>BGW#V=sJp+Rilca5wSbwxT$$5h3cx6ua;c~B@J%Kl^g;| z&5ah?2P!(Ek)<30T0D6x49>@PfH!URx&Wvv^m}Z7d}J$cLAU{C{iKR}#Q1+V2xJ!p z5HF%2T8jS+O=s`yZH^MK*&aXuRM5YL+?45@GLWKWY&rzf{MaGbe?}NpUHt`c+edfE zu`45{|$EzpT(04N%OG0BN(Z4<|JGhW_-Xzl+OAvE{m z+v77O%D!xa?LF08VWIq~y0&F{n>1Te^_=i=>`7q|LT2bUD80rG%s{L7Mn4hk+3 zm4LEiRyML7O5W2oUmukHMEmyc}yBAqG2Q2~A)}idp0c7n)FJR3%W`HGxG491{ab5=dq~oeM-N>g!+#0FAYu_s@db&{@jd`O19e;&hr8mVsFi z%peLnX1`|WInhU*u@~PMG!1YE4VPcP7N5viXz-;lGhpaFXK?Uq>|lWWne$rCY8|u4 zOAC23I(1Q3nOMDIUNVzknL}GkrWLtD1_k~$R2JBd402QfrteSZVwK#g+XiR@qknFP zrkgiWiIq1rUrArwAQ$+TxDq-)L#gU*#Y$f>}NHYspGxBVPDKFk}Nz3V*Gb7eSe^?awu~%6w}@CSVBu1kxw*Wj9nRE<(l!7CF( zb;E-OX$M!9ehQ}g-~=JiA48BhCtCnT^tMn&iE%;Ty4xVb@10`w-`gNsRAJ&q&c~c# zTpD?hGC!FAy-r#HO1a-W((1a%%+A8Jq$<@?!0VViX2^YeiBgZfdoi)I zOqTZ)``niyD|v5Ao1^~d6nV*|>YY5k?&U!;mi992>5RNzvX0Tj6l7g!0W!3CsI zAeHBe-QqDm&ml;P2#j$aa8K7%z2Er-a55Fu`Rx(?0dGK6>TPmfewR<;ya1T*5*NND z7ej>n+Ju9wBKx`vnuzE8Ps;t6nYQ{^YaY<|$FSe)UQ|5hu}KhlDH4uXyAW_jh>f`@ z&^NnqoPA0WF1CX6a#YMbhG_&PxA2%_=)`FAIUPb~TRBF^#Qw;JXT*t;hYK6PVryLezfkyYcyvws&C5G2dLs83_rcX zJ96uq(0|FUz-8>@N}BP73yraK&Lp_Q8yQ2A-pj+I9o$9vAAT!++m#Lf_g1Vv7r(3? RpkI-{eDV5){PVZ&{|DT6B)tFt literal 15908 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 HeDps6h7qr` diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index 3a4ae93..cd8db0b 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -80,9 +80,9 @@ A table with quality goals and concrete scenarios, ordered by priorities [cols="e,2e" options="header"] |=== |Nombre|Descripción -|*Usabilidad*| _La aplicación tiene que poder usarse por el mayor tipo de usuarios_ +|*Usabilidad*| _La aplicación tiene que poder usarse por el mayor tipo de usuarios y ser intuitiva; tener una curva de aprendizaje suave y progresiva_ |*Rendimiento*| _El tiempo de respuesta de la aplicación debe ser rápido_ -|*Testeable*| _La aplicación debe pasar las pruebas generadas automaticamente para cada versión_ +|*Testeable*| _La aplicación debe facilitar la realizacion de pruebas de manera efectiva_ |*Disponibilidad*| _La aplicación debe estar disponible y caerse lo menos posible_ |=== === Stakeholders @@ -110,10 +110,10 @@ Table with role names, person names, and their expectations with respect to the [cols="e,2e,2e" options="header"] |=== |Rol/Nombre|Expectativa|Descripción -| *Cristian Augusto* | _Aplicar correctamente los conocimientos y competencias adquiridos en la asignatura Arquitectura del Software_ | _Profesor de la asignatura_ +| *Profesor* | _Aplicar correctamente los conocimientos y competencias adquiridos en la asignatura Arquitectura del Software_ | _Profesor de la asignatura_ | *HappySw* | _Una aplicación buena para atraer al mayor número de usuarios_ | _Equipo de desarrollo_ | *Wikidata* | _Usar su aplicacion con precaución, sin sobrecargar sus servicios_ | _Empresa que nos facilita la API para obtener información_ -| *Usuarios Registrados* | _Una aplicación que proporcione los servicios esperados_ | _Los usuarios de la aplicación_ -| *Usuarios No Registrados* | _Una buena aplicación_ | _Los usuarios de la aplicación_ -| *RTVE* | _Una buena versión de su juego "Saber y Ganar"_ | _Dueño del producto_ +| *Usuarios Registrados* | _Una aplicación que les permita jugar a un juego de preguntas y respuestas_ | _Los usuarios que ya se han registrado en la aplicación y pueden acceder a sus servicios_ +| *Usuarios No Registrados* | _Poder registrarse lo más rápido posible para empezar a jugar al juego de preguntas y respuestas_ | _Los usuarios que aun no se han registrado en la aplicación y no tienen acceso a sus servicios_ +| *RTVE* | _Una buena versión de su juego "Saber y Ganar" para mejorar la audiencia del programa_ | _Dueño del producto_ |=== diff --git a/docs/src/02_architecture_constraints.adoc b/docs/src/02_architecture_constraints.adoc index 7514a70..cd0e9c1 100644 --- a/docs/src/02_architecture_constraints.adoc +++ b/docs/src/02_architecture_constraints.adoc @@ -36,16 +36,15 @@ Por ello esta aplicación está desarrollada siguiendo una serie de limitaciones |Restricción |Explicación |*GIT* -|_En la asignatura se requiere el uso del sistema de control de versiones GIT, además de emplear GitHub como repositorio. Además nos permite -una continua integración mediante la paralelización del trabajo usando el sistema de ramas. También GitHub permite organizar las distintas tareas de cada -miembro del equipo mediante el uso de las Issues._ +|_En la asignatura se requiere el uso del sistema de control de versiones GIT, además de emplear GitHub como repositorio. Asimismo, nos permite +una continua integración de forma remota mediante la paralelización del trabajo usando el sistema de ramas._ |*Docker* -|_Esta tecnología de contenerización es utilizada para desplegar la aplicación web tanto en el entorno de desarrollo como en el de producción +|_Esta tecnología de contenerización será requerida ya que la usaremos para desplegar la aplicación web tanto en el entorno de desarrollo como en el de producción y realizar las pruebas pertinentes._ |*Wikidata* -|_Fuente de información utilizada para generar aleatoriamente tanto las preguntas como las respuestas correctas e incorrectas del juego._ +|_En la asignatura se requiere que esta sea la fuente de información principal para generar aleatoriamente tanto las preguntas como las respuestas correctas e incorrectas del juego._ |=== === Limitaciones organizativas @@ -66,6 +65,16 @@ con alguna de estas._ |*Reuniones* |_Para mantener un buen ritmo de trabajo a través de una correcta organización se realizan reuniones semanales en las clases prácticas de la asignatura. Además, mantenemos contacto a través de nuestro grupo de WhatsApp y en casos necesarios realizamos reuniones extraordinarias utilizando nuestro servidor de Discord._ + +|*Issues* +|_Para el seguimiento y la gestión de las tareas, problemas, mejoras, autoinformes, etc. de la aplicación tendremos que usar las issues ofrecidas por github; esto es una obligación ya + que reflejara el trabajo realizado por cada miembro del equipo al poder asignarse cada issue._ + +|*Actas* +|_Al igual que las issues, las actas servirán para la organización de las tareas asi como para la toma de decisiones, y tendrán + que reflejar el trabajo repartido a cada miembro. Se deberán realizar obligatoriamente cada vez que se realice una reunión y deberán constar los miembros del + equipo que han participado._ + |=== === Convenciones @@ -75,19 +84,19 @@ a través de nuestro grupo de WhatsApp y en casos necesarios realizamos reunione |Restricción |Explicación |*Diseño del software* -|_Para lograr un buen diseño es indispensable que el código de la aplicación sea flexible, mantenible y comprensible._ +|_Para lograr un buen diseño es indispensable que el código de la aplicación sea flexible, mantenible y comprensible. Además se espera un código limpio ('clean code'), +es decir, que sea fácil de entender, mantener y modificar, y que garantize la claridad, simplicidad y legibilidad._ |*Documentación* |_Para crearla usaremos la plantilla Arc42 con la finalidad de que sea sencilla y práctica._ |*Accesibilidad* -|_Intentaremos que nuestra aplicación puede ser utilizada por cualquier tipo de usuario, sin importar quién sea. Seguiremos el estándard WCAG de la W3C, -usando el color, tamaño de texto... adecuados para ello._ +|_Intentaremos que nuestra aplicación puede ser utilizada por cualquier tipo de usuario, sin importar quién sea._ |*Estructura* -|_Debe seguir una estructura fija y bajo los mismos estandares. Los diferentes modulos estarán separados en carpetas -principalmente: 'users' para la api rest y el registro de usuarios, 'webapp' para el desarrollo de la aplicación, 'docs' -para la documentación._ +|_Debe seguir una estructura fija y bajo los mismos estandares. Los diferentes modulos estarán separados en carpetas: 'userservice' para la gestión de +usuarios (registro y autentificación), 'questionservice' para la comunicación con wikidata y 'webapp' para el desarrollo de la aplicación. Todos estos +servicios estarán comunicados por 'gatewayservice'._ |*Convenciones del lenguaje de programación* |_Es fundamental adherirse a las convenciones de los diferentes lenguajes de programación utilizados para garantizar que la aplicación tenga un código legible, diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index a3bbb5b..2c3dccb 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -89,8 +89,6 @@ Bloques de construcción contenidos:: |*Wikidata* |_Servicio externo desde donde obtenemos los datos para generar las preguntas._ -|*Firebase* -|_Plataforma para el manejo de sesiones de los usuarios, asi como informacion sobre sus estadisticas._ |=== === Nivel 2: WIQ @@ -102,11 +100,24 @@ Bloques de construcción contenidos:: |=== |Nombre |Responsabilidad -|*Webapp* +|*webapp* |_La interfaz con la que interactua el usuario._ -|*REST* -|_Manejo de datos de Wikidata._ +|*gatewayservice* +|_Servicio de puerta de enlace que actúa como intermediario entre los clientes y otros servicios, +reenviando las solicitudes a los servicios correspondientes y devolviendo las respuestas al cliente._ + +|*authservice* +|_Servicio de autenticación de usuarios._ + +|*userservice* +|_Servicio para registro de usuarios._ + +|*questionservice* +|_Servicio para el manejo de datos de Wikidata._ + +|*Wikidata* +|_Servicio externo desde donde obtenemos los datos para generar las preguntas._ |=== diff --git a/docs/src/07_deployment_view.adoc b/docs/src/07_deployment_view.adoc index 82b0167..a032bd1 100644 --- a/docs/src/07_deployment_view.adoc +++ b/docs/src/07_deployment_view.adoc @@ -81,11 +81,11 @@ Mapeo de bloques de construcción a infraestructura:: |*WebApp* |Microservicio responsable de las vistas de la aplicación y sus interacciones con el usuario. -|*Rest* +|*QuestionService* |Microservicio responsable de generar preguntas y respuestas utilizando la información de Wikidata, almacenándola posteriormente en una base de datos MySQL. -|*Users* +|*UserService* |Microservicio encargado de gestionar los diferentes usuarios y sus partidas realizadas haciendo uso de la API Firebase. |*Navegador Web* diff --git a/docs/src/11_technical_risks.adoc b/docs/src/11_technical_risks.adoc index a04dc64..def2c95 100644 --- a/docs/src/11_technical_risks.adoc +++ b/docs/src/11_technical_risks.adoc @@ -24,6 +24,7 @@ See https://docs.arc42.org/section-11/[Risks and Technical Debt] in the arc42 do **** === Riesgos Técnicos +==== Riesgos internos [cols="e,2e" options="header"] |=== @@ -37,10 +38,18 @@ de trabajo de los demás compañeros._ |_Las demás asignaturas en la que están matriculados los miembros del equipo puede exigir una carga importante de trabajo por lo que provocar que el equipo no dedique el suficiente tiempo al desarrollo de este proyecto._ -|*Errores* -|_Durante las pruebas de la aplicación pueden surgir errores que nos obliguen a realizar importantes cambios en esta. Esto puede provocar que el equipo invierta más horas de +|*Errores de diseño* +|_Los errores que surjan debido al diseño, implementacion o gestion interna del proyecto; nos obligarán a realizar cambios e invertir más horas de las planeadas para solucionar este tipo de problemas._ +|=== + +==== Riesgos externos + +[cols="e,2e" options="header"] +|=== +|Riesgo |Explicación + |*Caída de Servicios* |_Nuestra aplicacion web puede verse comprometida a errores si alguno de los servicios utilizados, como por ejemplo Docker, parará de funcionar en algún momento. Ya que los servicios no son creados por nosotros no podemos saber si estarán disponibles en todo momento por lo tanto @@ -54,5 +63,6 @@ esto podría bloquear la entrega de alguna de las funcionalidades del proyecto._ |=== +=== Deudas Técnicas - +TODO \ No newline at end of file From 62ba914984b69d009b94f66406731164a457de72 Mon Sep 17 00:00:00 2001 From: Lara Date: Mon, 18 Mar 2024 11:49:51 +0100 Subject: [PATCH 2/5] Cambio para poder quitar la mayuscula de questionService --- {questionservice => questions}/Dockerfile | 0 {questionservice => questions}/package-lock.json | 0 {questionservice => questions}/package.json | 0 {questionservice => questions}/server.js | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {questionservice => questions}/Dockerfile (100%) rename {questionservice => questions}/package-lock.json (100%) rename {questionservice => questions}/package.json (100%) rename {questionservice => questions}/server.js (100%) diff --git a/questionservice/Dockerfile b/questions/Dockerfile similarity index 100% rename from questionservice/Dockerfile rename to questions/Dockerfile diff --git a/questionservice/package-lock.json b/questions/package-lock.json similarity index 100% rename from questionservice/package-lock.json rename to questions/package-lock.json diff --git a/questionservice/package.json b/questions/package.json similarity index 100% rename from questionservice/package.json rename to questions/package.json diff --git a/questionservice/server.js b/questions/server.js similarity index 100% rename from questionservice/server.js rename to questions/server.js From 6fda7032f397ac53660bb02b6cb1193b6de8bb99 Mon Sep 17 00:00:00 2001 From: Lara Date: Mon, 18 Mar 2024 13:39:03 +0100 Subject: [PATCH 3/5] Cambio docker-compose.yml --- docker-compose.yml | 63 ++++++++++++++++++- {questions => questionservice}/Dockerfile | 0 .../package-lock.json | 0 {questions => questionservice}/package.json | 0 {questions => questionservice}/server.js | 0 webapp/src/components/Pages/Juego.js | 2 +- 6 files changed, 63 insertions(+), 2 deletions(-) rename {questions => questionservice}/Dockerfile (100%) rename {questions => questionservice}/package-lock.json (100%) rename {questions => questionservice}/package.json (100%) rename {questions => questionservice}/server.js (100%) diff --git a/docker-compose.yml b/docker-compose.yml index 1c81a3e..cd3913c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,18 +1,79 @@ version: '3' services: + mongodb: + container_name: mongodb-${teamname:-defaultASW} + image: mongo + profiles: ["dev", "prod"] + volumes: + - mongodb_data:/data/db + ports: + - "27017:27017" + networks: + - mynetwork + questionservice: container_name: questionservice-${teamname:-defaultASW} image: ghcr.io/arquisoft/wiq_es05a/questionservice:latest profiles: ["dev", "prod"] build: ./questionservice ports: - - "2500:2500" + - "8003:8003" + + authservice: + container_name: authservice-${teamname:-defaultASW} + image: ghcr.io/arquisoft/wiq_0/authservice:latest + profiles: ["dev", "prod"] + build: ./userservice/authservice + depends_on: + - mongodb + ports: + - "8002:8002" + networks: + - mynetwork + environment: + MONGODB_URI: mongodb://mongodb:27017/userdb + + userservice: + container_name: userservice-${teamname:-defaultASW} + image: ghcr.io/arquisoft/wiq_0/userservice:latest + profiles: ["dev", "prod"] + build: ./userservice/userservice + depends_on: + - mongodb + ports: + - "8001:8001" + networks: + - mynetwork + environment: + MONGODB_URI: mongodb://mongodb:27017/userdb + + gatewayservice: + container_name: gatewayservice-${teamname:-defaultASW} + image: ghcr.io/arquisoft/wiq_0/gatewayservice:latest + profiles: ["dev", "prod"] + build: ./gatewayservice + depends_on: + - mongodb + - userservice + - authservice + - questionservice + ports: + - "8000:8000" + networks: + - mynetwork + environment: + AUTH_SERVICE_URL: http://authservice:8002 + USER_SERVICE_URL: http://userservice:8001 + QUESTION_SERVICE_URL: http://questionservice:8001 + webapp: container_name: webapp-${teamname:-defaultASW} image: ghcr.io/arquisoft/wiq_es05a/webapp:latest profiles: ["dev", "prod"] build: ./webapp + depends_on: + - gatewayservice ports: - "3000:3000" diff --git a/questions/Dockerfile b/questionservice/Dockerfile similarity index 100% rename from questions/Dockerfile rename to questionservice/Dockerfile diff --git a/questions/package-lock.json b/questionservice/package-lock.json similarity index 100% rename from questions/package-lock.json rename to questionservice/package-lock.json diff --git a/questions/package.json b/questionservice/package.json similarity index 100% rename from questions/package.json rename to questionservice/package.json diff --git a/questions/server.js b/questionservice/server.js similarity index 100% rename from questions/server.js rename to questionservice/server.js diff --git a/webapp/src/components/Pages/Juego.js b/webapp/src/components/Pages/Juego.js index 99949fb..0557d24 100644 --- a/webapp/src/components/Pages/Juego.js +++ b/webapp/src/components/Pages/Juego.js @@ -24,7 +24,7 @@ const Juego = ({isLogged}) => { //Esta operación es llamada cuando pregunta esté vacia. useEffect( () => { const crear = async () => { - const response = await axios.get('http://localhost:8000/pregunta'); + const response = await axios.get('http://localhost:8003/pregunta'); setPregunta(response.data.question) setResCorr(response.data.answerGood) setResFalse(response.data.answers) From 4cbc9de79efc1549d0222bb71d1265802d943453 Mon Sep 17 00:00:00 2001 From: Lara Date: Mon, 18 Mar 2024 13:48:13 +0100 Subject: [PATCH 4/5] Linea de CORS en docker-compose.yml --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index cd3913c..e33dafd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,6 +18,8 @@ services: build: ./questionservice ports: - "8003:8003" + environment: + - ACCESS_CONTROL_ALLOW_ORIGIN=http://localhost:3000 authservice: container_name: authservice-${teamname:-defaultASW} From 1f897102fc849c925a0e5b344b74523a4ecd1f55 Mon Sep 17 00:00:00 2001 From: Lara Date: Mon, 18 Mar 2024 14:14:59 +0100 Subject: [PATCH 5/5] Cambio --- docker-compose.yml | 5 ++++- questionservice/server.js | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index e33dafd..08e84f3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,7 +19,10 @@ services: ports: - "8003:8003" environment: - - ACCESS_CONTROL_ALLOW_ORIGIN=http://localhost:3000 + - ACCESS_CONTROL_ALLOW_ORIGIN=http://webapp:3000 + - ACCESS_CONTROL_ALLOW_ORIGIN=http://localhost:3000/game + networks: + - mynetwork authservice: container_name: authservice-${teamname:-defaultASW} diff --git a/questionservice/server.js b/questionservice/server.js index 4b7d2ed..fbfacb3 100644 --- a/questionservice/server.js +++ b/questionservice/server.js @@ -54,7 +54,7 @@ app.get('/pregunta', async (req, res) => { res.json({ question, answerGood, answers }); }); -// Iniciamos el servidor en el puerto 3000 +// Iniciamos el servidor en el puerto 8003 const server = app.listen(8003, () => console.log('El servidor está escuchando en el puerto 8003')); module.exports = server \ No newline at end of file