From 22818ed8ea3a8fb726c8484e851f82f97709188a Mon Sep 17 00:00:00 2001 From: Marcos Barril Villaverde Date: Sun, 18 Feb 2024 18:51:28 +0100 Subject: [PATCH 01/10] Added part of section 5 of the documentation --- docs/src/05_building_block_view.adoc | 230 ++++----------------------- 1 file changed, 35 insertions(+), 195 deletions(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index df5c29c8..5b8b41d5 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -1,212 +1,52 @@ ifndef::imagesdir[:imagesdir: ../images] -[[section-building-block-view]] +== Building block view +=== Level 1: Overall System's whitebox -== Building Block View +==== Motivation -[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, data structures, ...) as well as their dependencies (relationships, associations, ...) +*_WiQ_* application is the general structure of a system in which users will have the possibility to play a video game implementation of the popular RTVE programme, "Saber y Ganar". -This view is mandatory for every architecture documentation. -In analogy to a house this is the _floor plan_. +==== Contained Building Blocks -.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. - - -.Further Information - -See https://docs.arc42.org/section-5/[Building Block View] in the arc42 documentation. - -**** - -=== 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:: -__ - -[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"] +[options="header"] +[cols="1,2"] |=== -| **Name** | **Responsibility** -| __ | __ -| __ | __ +|Name |Description +|User +|Client of the application which will interact with it. +|WIQ App +|System developed to be used by the users. The games will be based on the information obtanined from WikiData +|WikiData +|Service external to the application from which the application questions will be obtained. Wikidata is a collaboratively edited multilingual knowledge graph hosted by the Wikimedia Foundation. |=== - - -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 __ - +==== Motivation -__ - -... - -==== White Box __ - - -__ - - - -=== Level 3 - -[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_> - -__ +*_WiQ_* application is the general structure of a system in which users will have the possibility to play a video game implementation of the popular RTVE programme, "Saber y Ganar". +==== Contained Building Blocks +[options="header"] +[cols="1,2"] +[options="header"] +|=== +|Name |Description +|Web App +|Layer in which the user will interact directly and which will connect with the different services. +|Questions Service +|Microservice to generate the questions used by the application from WikiData +|Game Service +|Microservice that implements the quiz game +|Question Historic Service +|Microservice that stores the generated questions for later consultation +|User Statistics Service +|Microservice that stores the statistics of the games played by the user. +|Authentification Service +|Authentication microservice that allows the user to register and log in. +|=== -==== White Box <_building block y.1_> -__ From 418b44592b5c0cd4454f767d88046f1b69684a12 Mon Sep 17 00:00:00 2001 From: Marcos Barril Villaverde Date: Sun, 18 Feb 2024 19:01:56 +0100 Subject: [PATCH 02/10] Minor changes to section 5, and a couple of fixes at section 2 --- docs/images/51.png | Bin 0 -> 5225 bytes docs/images/52.png | Bin 0 -> 29778 bytes docs/src/02_architecture_constraints.adoc | 4 ++-- docs/src/05_building_block_view.adoc | 6 +++++- 4 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 docs/images/51.png create mode 100644 docs/images/52.png diff --git a/docs/images/51.png b/docs/images/51.png new file mode 100644 index 0000000000000000000000000000000000000000..eb2fdd2956a3a168a645d9924894ed87af207f7c GIT binary patch literal 5225 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 literal 0 HcmV?d00001 diff --git a/docs/images/52.png b/docs/images/52.png new file mode 100644 index 0000000000000000000000000000000000000000..3526a504875541a869884311a40d437160d3c980 GIT binary patch literal 29778 zcmZs@by(D0_dPs{pdw*_A}K0LmxO?b(k0T3lyt)YN{R?b3DOb*(%mgXt8`0)ba(f= z2YsI3^S!S3FYg<(TH0_kFapJ=hc`Q-ij zTH;pKu73lo^cCKj=90?rLci(3a@{5;1JXYJ{p#OzR#!F5_dWA&1mHb+{zkd-WxO*t zZ?(v$h00n754Bp(Kkk7y*#k1Q`Lwz>S=)Nz^Z3OuC>IJoGAH17@JrHE^<%iyKd}nh zxbk+C#VAZ%#a(TrO40^bi`q{?RdD}Z;8pq*pP%+cSKK2X4+qH$&cupeFOC^WDAaj) z*9EtoMlO_SkSIjk^YZNk{n$(o);4nY&R<=O?^&W{q9j!qdTEOs=JS}xc;+T=rsJlf z_O^XAjjDA<-ImIKVY@dH`B`)Ge{59n&1w$vHLY(a)&Dd|+Ud0~Le6y}q5xxKb*?Aa;-N%9lO)q*dMmmT>O`i%AUe z-!cSoOvqdLOtnPK`PK;}LYq~kq#acf{7k_5wkvQg1r+#Fk!9E)0n^|;Ww6XcQT~X=Cd-}(U z^HD`f1t;g`V1+J|04;1Mf=CJrh5i?@^$v*%|7eMdDxv?^^TWUY{T-eCmCyA=bJ2Qd zX`sGd(1j1epgKs|tUQw2);L-63#)R>_qUs$$a%S+KK(kT4WG@$`TZrkwzig9)pn`> zv+JhFjNQucK(+?YAiJifrb{gP0<6jg<=i$ilAbuX;iFAT${q?Cik+j&V^y&^==)#M zikV-iIz48Z#y@C=-zFv|p2x&S&ULu`{q;K}m4x%*PV1LP2I}ghn&{A+(Z4Zo{5w+x zxf^AH^7iw4O_iluq@#Hq9~W1TN~6Lqse(#8ByK3Psl7cw;d4kxNGP3>gQMeYWAH

9e6a#^H_jW+A{BDs+U-ET(d;9WA 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�*Zt7Oj<=~RFi9e$2Q zu0(=hHmm%oVce_qSTs+vi}NsIlyenyJ0_E`BYvj@$O->Ac>A+}~VWzpk!>O(^V1MD-lUb1VAAK;(yq}Ubs3r5|zk+O8R zQV>q{v;Hd6`$Vg&tKHqS4u^$>fm506c~G&OpC9mJv=NG(R%PoL8Hp|-lsH$fMi=~& zG^C)F=SiXXEMcB45vNjPeSr)Lhl$KUde!4_FDGs(hJ>g}N36CKj-kK`k_KN0xb4ZI zuU&Wij~$Y5sX;wa+nC~Mh!u4rcripJ9aZFwf1!8_?IixG#y{tKv%B!=Z>ynoDDT|@ ztj8;CWaZ=nK;TMV@b4c7{P5TRyx)JWAFQI|w^{j$KtPEF<{q(@`~?C6@-wm6@cp-s z#TP)x-^#O(r#=I$-?FT$_yQ*v7yJmKk;4XEF45~1r%(o#F*~+vX=x#^FtM;}E=)zi z2VY2R$X%>t6OZ!^Ht7Iqa!=OPH}_x$n*g->oKCJn&)ptoNe8+7A_QzX1(Cb!d->YP1?Bfz%# z3b^j7(vXU|d)N7O+VhR`DU{I*YzB)6tMQK>1|@;E%gW07$zn5^iKp(2fI&oJQsd!A zPRPLvo})ot)j@aU<>X*m@Tt4b8MqkI=k-!^D3s|ttjIprqdowVrPwf~(1pP`+OiO) zB3v8%~LESodHYqCuckxLnu1}57>m$mas!N37lv|Da2EkTfJ+q`j(H{&Y~=O6Q8v87E6NIU03beptT%vt%B#+E8d?ChJqe zb`0+dAKXf;E+};Ufm!$PIr20Z)ByEURTFd_0+5f5h2 zI|j3<6z^v`v{NnhY(10LhQMLIK0}A*`4afeEXtV`UE+&Y?58=Y;sI*EGI{1z2U+75 zLhZO}E8STAfB)-B7Bd4S+NkjIR~|1s@;d*;ZHph5PuJEQt=O_`QXi!&Vwz3J-rNFMZPCB?<8?Dyd)6N2n#mmfDb_c7#__wNr5Ihl;cQ@6bIZ*M3N6wGeuqCWXmb2t`bU` zn)rw^G{7n%5fJ`-v3}n9_PlD?Ute_w<*Vn%m-WjGP;{|pY z3htNpDvyRovotg`(%HzG^wrhX&CJX|l!^>lnR&c_o6dTymB~TONF~hreeqP6-i$gF z4NZmF+zgYm3tXPv5o`*Kgg9~`#ZixVAExEMd1x18L%@o*I9=&P!x6uNuP)@ca5pqG zw5O*Bz68a^#ZRBArNnRUE`IU1?$2Pm4m_C)iPRt9mzQyK#{=bvgn|eMsSS?R2Dw*` z#bsskKL>ZpIVFr6OaNjO4o3V+hY0^^s3%;FPacOBX*(d})(0fiHiCpUqVkJ5XO>p7%g@7mh#kg1iKRETouO^?sU z#?{F4&TBRowpcP6k&}F#o*8U4Sz<6$F&H|u;P1bm#kA)8K1TnazkX=O!Z~8Ou|=ai zN@ef&T?adQsDjh-Qyup}^g;f{C#Z!39%#G}==|7{4wExRpp>ZM;xfut5SDEDw*Ztl bK*v>jHjl{PmTAqyC(7;}+S^%b7C!$4UT?fc literal 0 HcmV?d00001 diff --git a/docs/src/02_architecture_constraints.adoc b/docs/src/02_architecture_constraints.adoc index 3a103634..03deaad8 100644 --- a/docs/src/02_architecture_constraints.adoc +++ b/docs/src/02_architecture_constraints.adoc @@ -7,7 +7,7 @@ |========================================================================================================================================================================================================= | Constraint | Explanation | Docker | The application will operate within a Docker environment. -| GitHub | We'll leverage GitHub as our remote repository for project development, task delegation among team members, and version control. GitHub streamlines communication and project organization. +| GitHub | We'll leverage GitHub as our remote repository for project development, task delegation among team members, and version control. |========================================================================================================================================================================================================= @@ -19,7 +19,7 @@ | Size of the team | The team comprises six individuals. | Meetings | Weekly meetings are scheduled to discuss task organization during each laboratory class session. In the event of requiring an extraordinary meeting, various tools such as WhatsApp or Discord are employed to coordinate effectively. | Testing | Various scenarios will be explored to ensure the app's functionality is tested. We'll employ a range of techniques to maximize test coverage, striving for comprehensive assessment. -| Experience | Team members possess limited experience with the diverse technologies being employed. +| Experience | Team members possess limited and diversed experience with the diverse technologies being employed. |========================================================================================================================================================================================================================================================== diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index 5b8b41d5..9e60d9f2 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -4,9 +4,11 @@ ifndef::imagesdir[:imagesdir: ../images] === Level 1: Overall System's whitebox +image::51.png["Level-1-block-view"] + ==== Motivation -*_WiQ_* application is the general structure of a system in which users will have the possibility to play a video game implementation of the popular RTVE programme, "Saber y Ganar". +This level shows how the application will work internally in generaly. The client, WebApp, access to the different services provided by the microservices which make up the program. ==== Contained Building Blocks @@ -24,6 +26,8 @@ ifndef::imagesdir[:imagesdir: ../images] === Level 2 +image::52.png["Level-2-block-view"] + ==== Motivation *_WiQ_* application is the general structure of a system in which users will have the possibility to play a video game implementation of the popular RTVE programme, "Saber y Ganar". From 3e52a6458dab71efce0775eddce23915d44989cd Mon Sep 17 00:00:00 2001 From: Marcos Barril Villaverde Date: Thu, 22 Feb 2024 16:50:38 +0100 Subject: [PATCH 03/10] Fixes on UML diagrams --- docs/images/51.png | Bin 5225 -> 0 bytes docs/images/52.png | Bin 29778 -> 0 bytes docs/src/05_building_block_view.adoc | 21 +++++++++++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) delete mode 100644 docs/images/51.png delete mode 100644 docs/images/52.png diff --git a/docs/images/51.png b/docs/images/51.png deleted file mode 100644 index eb2fdd2956a3a168a645d9924894ed87af207f7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5225 zcmZu#cRZZkwk8rKN+von1i>JP8jKcgLi8Xc+Kk?Ugi)d;dK;ezMvo}Lh+ZRl8J&pU z@^d)?O=0PX|GLmGvqS5fQbsL5=TQ5&;K1KA_n{TWT;^Vbvo`qLU#hA<)tE2H8if9kTaYjaH;~g zgvdJEw3ElUD!5-jJ7*_}IWbiSgF^#C6e^|8EZ&UN5xeXQ7InkBBZQq+B#u0;u%|sG zPyDQI``z_7+0Xdz$1an~OI(#g7{zl;H#0=j_>z*a3f8>3mDc@5;$zwydopLadtxEW z$?rwu?cHHacV>vwU5;2xwzR_Z9z0ObVmt9~MWZ0Qi}bxTGO=LP?TGg z19gO}XyQ6IB)TYO+mMKec0)t;o}rJ$R;I6>ku3+_Lrq!Y`rRHUu@tk<%KbbkPU^1D z#>QgB@X1BJY;_*D6N#<|K(Bj`uz8j1J=fKeFwp3q%!hb)U17M_rI{e1pFn^Ud;??^ z2n!wZcy6WA|tk9slB~jC4#1_yIXx0E8#dA%OZ~9P%Q2Kvz(;^ospW#!pK_fJ1!O_S47=yY7{v`A?9W^OCe;}ge^Xq z)L8KO9}M1QVPRQ^ghG@vmWrXe*$U=o)0qk~GBO?>9{(9eAP~5MjST0>(yq?VLKO%w znC4%8KHBmb&C@9UAJ`@UJQn0T~G1xwWu*DRZFdng6? zz|5)=va^GJjOKR&vkPHEG4s*scik{7;=J74D)O$hd?jWL&(4mv);(^0)U#VHXG%xH z88f6kP(v9qqN1WI;Z$vwZ}f9X6GnLz6tXl>k+?@?I$3h2@)%X7z5%u)l(-|FcENIU z$Vxj;Gnk%?Ce4p6O88BxBYnkZOuyIw9o+~fPB}F-9KCtZ$0bWELt6j*88*h@Y!nl> zSRqDd0+X8YFzvQJP`%!yaLS?_-DPddTdwC)y)?=xBs4fVNmw0B*Zj56^rGq0r;C#{ zj{F5Sb}S#Nc>l-y?3rQJjGS!FJQF!RyG#9DN90o;6*NXJtsw`y=$u%WEsWe9-Rfs` zw^U+ZXJsw41pS_=abEJg0fCG(y&xQJOycgb#$Mpn)kyVW-DwJP!H)6u-B_;}rPDOVacY4^i*qc>gt!~>b|x}IcG5RE+oq0FM`^zXKi zGRqcWylJJ4Mn^cc;Gt(92A%_jov$QvrOMw_WJ~Z1BpntrbEVcx4HV4 zX?b~hiF~^6+<%Pngf{JU-*^Wfn=X3zzNDmtYnDW0Z7B00Iw3VRYA`$Sl)^T)Ht2Vt zzDS#3iC#|obd|k+cTA|{aJC}HN)#PmbQ8=?GZi}9f_Uy@m1PnrGwd~#ttc|wNb@-% ze`B=r5!|E^?W&{{41*ii1c*c+S9g_CDQ+{(=Gx=ims*duW(AE)3aKH7DI%7_k4oqE zmhfGx-ElX<4Aihy@5$<(&PTIczS_{xK>o1VS7lmFM~7w(4TyvFcIc=M4Gq0*Ru4h2 zRb8V$J=}=s6E^=ikRemmv#rgKcKOXd`0b_dyQD@QmPOeSsta$E$5GlPf9;mxQ9ZM> zXG59r(@IbC$4A{)(c5#T&HlcwaZ1HANRcQi@d&a$Evtqpc6qpQ#slGV+oqoAb%K(D zVUa<8dHIM%!hI}yYi7JqpG4H8CdbGuR^{7H%kN~Q8fGlEdDr---;ey1TG!blx9{@J z$BQv_UjtvvfAj*O$7@0!7~T>PJJ|i!q1M&Je@1{sNQRQFM*RbK4`@V{^$CZ>tp`xY zX*|=sA{<@lbY?-*VT1cOri~dlkHKzVCM-YsTu+~#p8idPRQVxXz}cTHMCYCEI$fz2 z%WH@4xBJx91Q=UG4)orv0$r1>=Ulh(~>av8VH) zY8Pc^ny;boCWqDq{5vJVq>GD-%RwVKx8pP);2@oVBUU|sagx(9y~-?lJRMV29^`F( zIX)>>iQ%D#!&&k@xH`+ml?qb&md_D{lg|hat@{^njW+#w_9Et#j7a*2p?s=Rel`iZpzVq3d3#4skx5zEKxqXa)vf{A|_!SvJc>11H?FJgCte)L9nyq@5O9=I1tNm9lj^o8fUkbFXt*rq($A2sG)38af z$=2V&AkA;+DxBPEG9f~Ar&8eaESmg;9#;p8D7vIZJ$bE@t?=OugJ;@Y>S(n!=Tif* z)|70&^&;2V+9F!_A#lm@_xBgJY`!g}-^y#CL%KOzckP{JOJG2j`6V`4Pnd*6wN9pN zl7LZrV8k_!z>9O=>Cf!UY#-~KCv{w5M(*`i%~+cLj>u;%fxjg1hrgu_6$HlX#h9kw z>vH&1%!LlPcd};gqH} z=cCPOaUPx(APs=E6f`tX7e1YYQ8I1Eeb{d!;dJ?#8lvP!vNYc;6OfD3i5 zvy3uP&j-ee9-6z#&JykN6Wp5vdBx{KOj58vBZ&sAX5%7 zxL+!?Xp%(>{hHhe{23zj5^Xk7el&EIoF-hj?>@!AL-jaT9<8VWpFN%7G9i>Z?>Jc_psSS4BlQwh}2&_H0=?%kSDT72N$21GOlgVnR2 z8o5?`dB!8Peg6z&Kb&QrugRb#Uv3!sWox$14S;>>N?PYq!?QSkHIe4v)$gBk3Dj>= z$U@YcCY*SBTEXpv?Mn4Tv5|A{Yo1CCsu;GvB)QdNAtG<5j34NUskWYBJ~Zu2g$~&G z4rj@?wYACn{T#6vEWh?}(+9w)@C{Q5PgGP?y!;XN=v~#&`J)>y6xB#Z+I z^lo`JAUjBJj~=+BKn09TBIRP^;tu!r5{}m2L9H_j$G8ashK0cmAErXHn@`tql}1#8 zPujp~>4%I7)sEA$%~S;IuE^xs*zop8?o3zlS;V82&hB(!!dSzgZVR6PQin{EPfkx4 zOa8V!E0CYoududnOSZ~~eg$x$wAt%t?W7h>;Cl;*kNt>&!WjiM^$*SuhD9D%7lKPX z$Z3g4gP)72D=zv{6kOcgY6bkQL7ywy<@;t^QF_(U$Q8RRZa8|vi9!~w#bzKTmbgOr z8q@-U-g3Sl6YIfTFy-Ot>DlCWs24m7m?SA7A;H7LBP2v^&+6EAgf5|Tp-7(gKq8SQ zCd{k+$1#;NT609tefNjpJD%T1a)9hq*$vW4b^uPx`M3iK|GQjFOVH1rVjIYp*wI(hUe70ybU+*5?jqb2!y$7VG5a1Kg3o70q_&zI(z~+;_`+zF|}6CX$%$=^xHD%*SIOR{xfx-*(aZhBlS9KJO-&v zx}oT^YlT9g^z{DnG|>{)$Hc^_Fw)#1^ab=esQ`XVp=qC@9m?KA5N2{=A~vbW8Rxndz;f$VkV=xi1J&mbRVGpMz3%a)ttnVOPnB3}$c%@d-^XJ~;um^l=S1TC=9;3q zjJHi73=H}H=UZ1#!*TyM>fHdl7kdw;B25WXRKq$F&0LfGhBh9R_5DU^AdUxAO8c&<-PgU-vqFFm^gQAd2~nM)RBskSERY7_+kO3r|m z^(cngJPdY}M#|3uGUi+8jW99sI2O3n9!usBUtnIRRTefF?Lyx-AQ8Sb^%LqsvlGG1 zL-F5D?eN!*{Ui3P$@!80T~7?JUH)Nza$Az$_rHTUbVho*bFVi^lpAZigAW#@i2J!FgG`skB+Ie&tsy3wOouo07?TJPQP0Q?xLDUMrNEX7Uo8`YckP1r0Qp*;L%b*o;_vsvSR(euW z((BjzKfmb4-?*zYdskXoT2hjsX&DO|2=r7_qPLmDew`7V|I}yOOG{PH*K|y)JbxGj z1qJCd2IPCtfzClVF}yk841NFpeIT@70|@hf_$f&H;%M_8t}I-@sQ4|fqN3%|;Ly+n zMwgtklbsBmk(O3mvn2GSw#OL{5~HT3CabKcLmaE5A7MK#&Abtv;|0n)zHNk@`3Gq@ z=yKRgmoHUUOZWi&Ky(2&#PgvK?!eVo;%?l%L)q;qEh?%%E06=FQ;v)QGeJ86h5kYF2VMsJRJ%b;vK+a~f6&7!3A(d%iI;J~DEbK(MT|=}i^4AF1{~+3)GO zFG~L>CT5*4p&^6mcRRwGnwlEDHb}D>(EiIk34pPuCnrY5hDE?mcY7Aapo{Zlp(n_g78(Em diff --git a/docs/images/52.png b/docs/images/52.png deleted file mode 100644 index 3526a504875541a869884311a40d437160d3c980..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29778 zcmZs@by(D0_dPs{pdw*_A}K0LmxO?b(k0T3lyt)YN{R?b3DOb*(%mgXt8`0)ba(f= z2YsI3^S!S3FYg<(TH0_kFapJ=hc`Q-ij zTH;pKu73lo^cCKj=90?rLci(3a@{5;1JXYJ{p#OzR#!F5_dWA&1mHb+{zkd-WxO*t zZ?(v$h00n754Bp(Kkk7y*#k1Q`Lwz>S=)Nz^Z3OuC>IJoGAH17@JrHE^<%iyKd}nh zxbk+C#VAZ%#a(TrO40^bi`q{?RdD}Z;8pq*pP%+cSKK2X4+qH$&cupeFOC^WDAaj) z*9EtoMlO_SkSIjk^YZNk{n$(o);4nY&R<=O?^&W{q9j!qdTEOs=JS}xc;+T=rsJlf z_O^XAjjDA<-ImIKVY@dH`B`)Ge{59n&1w$vHLY(a)&Dd|+Ud0~Le6y}q5xxKb*?Aa;-N%9lO)q*dMmmT>O`i%AUe z-!cSoOvqdLOtnPK`PK;}LYq~kq#acf{7k_5wkvQg1r+#Fk!9E)0n^|;Ww6XcQT~X=Cd-}(U z^HD`f1t;g`V1+J|04;1Mf=CJrh5i?@^$v*%|7eMdDxv?^^TWUY{T-eCmCyA=bJ2Qd zX`sGd(1j1epgKs|tUQw2);L-63#)R>_qUs$$a%S+KK(kT4WG@$`TZrkwzig9)pn`> zv+JhFjNQucK(+?YAiJifrb{gP0<6jg<=i$ilAbuX;iFAT${q?Cik+j&V^y&^==)#M zikV-iIz48Z#y@C=-zFv|p2x&S&ULu`{q;K}m4x%*PV1LP2I}ghn&{A+(Z4Zo{5w+x zxf^AH^7iw4O_iluq@#Hq9~W1TN~6Lqse(#8ByK3Psl7cw;d4kxNGP3>gQMeYWAH

9e6a#^H_jW+A{BDs+U-ET(d;9WA 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�*Zt7Oj<=~RFi9e$2Q zu0(=hHmm%oVce_qSTs+vi}NsIlyenyJ0_E`BYvj@$O->Ac>A+}~VWzpk!>O(^V1MD-lUb1VAAK;(yq}Ubs3r5|zk+O8R zQV>q{v;Hd6`$Vg&tKHqS4u^$>fm506c~G&OpC9mJv=NG(R%PoL8Hp|-lsH$fMi=~& zG^C)F=SiXXEMcB45vNjPeSr)Lhl$KUde!4_FDGs(hJ>g}N36CKj-kK`k_KN0xb4ZI zuU&Wij~$Y5sX;wa+nC~Mh!u4rcripJ9aZFwf1!8_?IixG#y{tKv%B!=Z>ynoDDT|@ ztj8;CWaZ=nK;TMV@b4c7{P5TRyx)JWAFQI|w^{j$KtPEF<{q(@`~?C6@-wm6@cp-s z#TP)x-^#O(r#=I$-?FT$_yQ*v7yJmKk;4XEF45~1r%(o#F*~+vX=x#^FtM;}E=)zi z2VY2R$X%>t6OZ!^Ht7Iqa!=OPH}_x$n*g->oKCJn&)ptoNe8+7A_QzX1(Cb!d->YP1?Bfz%# z3b^j7(vXU|d)N7O+VhR`DU{I*YzB)6tMQK>1|@;E%gW07$zn5^iKp(2fI&oJQsd!A zPRPLvo})ot)j@aU<>X*m@Tt4b8MqkI=k-!^D3s|ttjIprqdowVrPwf~(1pP`+OiO) zB3v8%~LESodHYqCuckxLnu1}57>m$mas!N37lv|Da2EkTfJ+q`j(H{&Y~=O6Q8v87E6NIU03beptT%vt%B#+E8d?ChJqe zb`0+dAKXf;E+};Ufm!$PIr20Z)ByEURTFd_0+5f5h2 zI|j3<6z^v`v{NnhY(10LhQMLIK0}A*`4afeEXtV`UE+&Y?58=Y;sI*EGI{1z2U+75 zLhZO}E8STAfB)-B7Bd4S+NkjIR~|1s@;d*;ZHph5PuJEQt=O_`QXi!&Vwz3J-rNFMZPCB?<8?Dyd)6N2n#mmfDb_c7#__wNr5Ihl;cQ@6bIZ*M3N6wGeuqCWXmb2t`bU` zn)rw^G{7n%5fJ`-v3}n9_PlD?Ute_w<*Vn%m-WjGP;{|pY z3htNpDvyRovotg`(%HzG^wrhX&CJX|l!^>lnR&c_o6dTymB~TONF~hreeqP6-i$gF z4NZmF+zgYm3tXPv5o`*Kgg9~`#ZixVAExEMd1x18L%@o*I9=&P!x6uNuP)@ca5pqG zw5O*Bz68a^#ZRBArNnRUE`IU1?$2Pm4m_C)iPRt9mzQyK#{=bvgn|eMsSS?R2Dw*` z#bsskKL>ZpIVFr6OaNjO4o3V+hY0^^s3%;FPacOBX*(d})(0fiHiCpUqVkJ5XO>p7%g@7mh#kg1iKRETouO^?sU z#?{F4&TBRowpcP6k&}F#o*8U4Sz<6$F&H|u;P1bm#kA)8K1TnazkX=O!Z~8Ou|=ai zN@ef&T?adQsDjh-Qyup}^g;f{C#Z!39%#G}==|7{4wExRpp>ZM;xfut5SDEDw*Ztl bK*v>jHjl{PmTAqyC(7;}+S^%b7C!$4UT?fc diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index 9e60d9f2..a16d8660 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -4,7 +4,11 @@ ifndef::imagesdir[:imagesdir: ../images] === Level 1: Overall System's whitebox -image::51.png["Level-1-block-view"] +[plantuml,"Level 1: Overall System's whitebox",png] +---- +:user: -> [WIQ App] : Interacts with +[WIQ App] <.> [WikiData] : Gets Data +---- ==== Motivation @@ -26,7 +30,20 @@ This level shows how the application will work internally in generaly. The clien === Level 2 -image::52.png["Level-2-block-view"] +[plantuml,"Level 2:general structure of a system",png] +---- +:usuario: +package "WIQ App" { +:usuario: -> [WebApp] : interacts +[WebApp] <---> [Questions Service] : Get data +[WebApp] <---> [Game Service] : Plays +[WebApp] <--> [Question Historic Service] : Store/load data +[WebApp] <--> [User Statistics Service] : Store/load data +[WebApp] <-> [Authentification Service] : logs in / Register +} + +[Questions Service] <..> [WikiData] : Get data +---- ==== Motivation From 1446bfc3965eaa014ec3ba3e775b71a450b1e9b7 Mon Sep 17 00:00:00 2001 From: Marcos Barril Villaverde Date: Thu, 22 Feb 2024 17:10:39 +0100 Subject: [PATCH 04/10] Minor changes to section 5 --- docs/src/05_building_block_view.adoc | 80 ++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index a16d8660..3e432e4a 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -1,7 +1,48 @@ ifndef::imagesdir[:imagesdir: ../images] +[[section-building-block-view]] +[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, data structures, ...) as well as their dependencies (relationships, associations, ...) +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. +.Further Information +See https://docs.arc42.org/section-5/[Building Block View] in the arc42 documentation. +**** + == Building block view + +[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. +**** + === Level 1: Overall System's whitebox [plantuml,"Level 1: Overall System's whitebox",png] @@ -12,10 +53,24 @@ ifndef::imagesdir[:imagesdir: ../images] ==== Motivation + This level shows how the application will work internally in generaly. The client, WebApp, access to the different services provided by the microservices which make up the program. ==== Contained Building Blocks +[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"] +| **Name** | **Responsibility** +| __ | __ +| __ | __ +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. +**** + [options="header"] [cols="1,2"] |=== @@ -28,8 +83,33 @@ This level shows how the application will work internally in generaly. The clien |Service external to the application from which the application questions will be obtained. Wikidata is a collaboratively edited multilingual knowledge graph hosted by the Wikimedia Foundation. |=== +[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 +**** + +[role="arc42help"] +**** +...describes the internal structure of _building block 1_. +**** + === Level 2 +[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 +**** + [plantuml,"Level 2:general structure of a system",png] ---- :usuario: From a773e8f7d118833bdbfc4b1a07b229bfab3f52ff Mon Sep 17 00:00:00 2001 From: Marcos Barril Villaverde Date: Thu, 22 Feb 2024 17:12:39 +0100 Subject: [PATCH 05/10] Small fix to section 2 --- docs/src/02_architecture_constraints.adoc | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/src/02_architecture_constraints.adoc b/docs/src/02_architecture_constraints.adoc index fdf41026..37db8bdd 100644 --- a/docs/src/02_architecture_constraints.adoc +++ b/docs/src/02_architecture_constraints.adoc @@ -34,6 +34,7 @@ See https://docs.arc42.org/section-2/[Architecture Constraints] in the arc42 doc |*Usage of _REACT_* |The _REACT JS_ framework will be used to develop the front-end of the project. |*Docker* | The application will operate within a Docker environment. |*Version Control* |In order of the project to be graded adequately, it must use _GitHub_ as its version control software. The contributions of each team member and agreements reached must be easily traceable. +|*Wikidata* | To generate questions, WikiData would be used as a knowledge base. Wikidata is a free and open knowledge base that can be read and edited by both humans and machines. Wikidata acts as central storage for the structured data of its sister Wikimedia projects, including Wikipedia, Wikivoyage, Wiktionary, Wikisource and others. |*Continuous integration and delivery* |The development must progress through frequent integration of small changes into the main branch. New features must be automatically deployed with ease. (In our case, using _Docker_) |=== From 33dbb7a4df03f207a87a8bf8203dfef03562804f Mon Sep 17 00:00:00 2001 From: Marcos Barril Villaverde Date: Thu, 22 Feb 2024 17:13:52 +0100 Subject: [PATCH 06/10] Small fix to section 2 --- docs/src/02_architecture_constraints.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/02_architecture_constraints.adoc b/docs/src/02_architecture_constraints.adoc index 37db8bdd..3e7ebafa 100644 --- a/docs/src/02_architecture_constraints.adoc +++ b/docs/src/02_architecture_constraints.adoc @@ -33,7 +33,7 @@ See https://docs.arc42.org/section-2/[Architecture Constraints] in the arc42 doc |*OS/Browser Independence* |The project must be available to the maximum amount of users feasible. That includes support for mainstream OSs (_Windows_, _Linux_, _MacOS_) and browsers. (_Chrome_, _Safari_, _Firefox_, _Edge_) |*Usage of _REACT_* |The _REACT JS_ framework will be used to develop the front-end of the project. |*Docker* | The application will operate within a Docker environment. -|*Version Control* |In order of the project to be graded adequately, it must use _GitHub_ as its version control software. The contributions of each team member and agreements reached must be easily traceable. +|*Version Control* |In order of the project to be graded adequately, it must use _GitHub_ as its version control system. The contributions of each team member and agreements reached must be easily traceable. |*Wikidata* | To generate questions, WikiData would be used as a knowledge base. Wikidata is a free and open knowledge base that can be read and edited by both humans and machines. Wikidata acts as central storage for the structured data of its sister Wikimedia projects, including Wikipedia, Wikivoyage, Wiktionary, Wikisource and others. |*Continuous integration and delivery* |The development must progress through frequent integration of small changes into the main branch. New features must be automatically deployed with ease. (In our case, using _Docker_) |=== From 2877b1b8cda35f046338fb3d80cd216ca1ba3f62 Mon Sep 17 00:00:00 2001 From: Marcos Barril Villaverde Date: Thu, 22 Feb 2024 18:00:23 +0100 Subject: [PATCH 07/10] This is a test --- docs/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index ab1646f2..148a4d21 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -220,9 +220,9 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "dependencies": { "function-bind": "^1.1.2" }, From 22ba576677511229c6770a10dbf473c9c775926d Mon Sep 17 00:00:00 2001 From: Marcos Barril Villaverde Date: Thu, 22 Feb 2024 18:57:01 +0100 Subject: [PATCH 08/10] Minor fix --- docs/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 148a4d21..e6b27e8b 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -220,9 +220,9 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dependencies": { "function-bind": "^1.1.2" }, From 4f17085aa17160869f739aa7329b1e7df3fbf3d9 Mon Sep 17 00:00:00 2001 From: Marcos Barril Villaverde Date: Thu, 22 Feb 2024 19:01:32 +0100 Subject: [PATCH 09/10] Minor fixes --- docs/src/05_building_block_view.adoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index 3e432e4a..adb00644 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -64,9 +64,11 @@ 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"] +|=== | **Name** | **Responsibility** | __ | __ | __ | __ +|=== 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. **** @@ -133,7 +135,6 @@ package "WIQ App" { [options="header"] [cols="1,2"] -[options="header"] |=== |Name |Description |Web App From 088f93d11d66535c00c2830e1da8fe9c4f0b1117 Mon Sep 17 00:00:00 2001 From: MarcosBarrilVillaverde <114151873+MarcosBarrilVillaverde@users.noreply.github.com> Date: Thu, 22 Feb 2024 19:11:10 +0100 Subject: [PATCH 10/10] Update package-lock.json --- docs/package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index e6b27e8b..ab1646f2 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -222,7 +222,7 @@ "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dependencies": { "function-bind": "^1.1.2" },