From 96d43a10a40da141a06935b098550999ab2decdd Mon Sep 17 00:00:00 2001 From: ElginL Date: Fri, 21 Oct 2022 10:43:08 +0800 Subject: [PATCH 1/3] Update UserGuide.md --- docs/DeveloperGuide.md | 35 ++++++++++++++++------- docs/diagrams/DeleteSequenceDiagram.puml | 8 +++--- docs/images/DeleteSequenceDiagram.png | Bin 33030 -> 30534 bytes 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 9bcdfddf368..d29fd5a5094 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -288,6 +288,19 @@ The following activity diagram summarizes what happens when a user executes the * Cons: User would have to manually select each client and filter the transactions. _{more aspects and alternatives to be added}_ + +### Delete Client/Transaction/Remark feature + +#### Current Implementation + +The deletion mechanism for `clients`, `transactions`, and `remarks` is facilitated by a `DeleteCommandParser` and `DeleteCommand`. + +The following class diagram shows the parent-child relation of `DeleteClientCommand`, `DeleteTransactionCommand`, `DeleteRemarkCommand` relative to the `DeleteCommand`. These concrete classes consists of the logic to delete an item stated by the name of their command. + +![DeleteCommandClassDiagram](images/DeleteCommandClassDiagram.png) + +The `DeleteCommandParser` will take in the user input, parse it, and return the correct concrete command type that is either `DeleteClientCommand`, `DeleteTransactionCommand`, or `DeleteRemarkCommand` which will be executed to achieve the deletion functionality. This process is depicted by the following sequence diagram (for user input `delete 1 m/client`): + -------------------------------------------------------------------------------------------------------------------- ## **Documentation, logging, testing, configuration, dev-ops** @@ -325,17 +338,17 @@ _{more aspects and alternatives to be added}_ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*` -| Priority | As a …​ | I want to …​ | So that I can…​ | -|----------|--------------------------|-----------------------------------------------------|--------------------------------------------------------------------| -| `* * *` | business owner | choose which client and company to delete | save only relevant clients and company to remove clutter | -| `* * *` | forgetful business owner | see usage instructions | refer to instructions when I forget how to use the application | -| `* * *` | new business owner | simply search for contacts | retrieve only the essential details I need | -| `* * *` | new business owner | view a client's details and company | easily know who to contact for that client | -| `* * *` | busy business owner | quickly retrieve the data of the client | save time without having to go through multiple layers | -| `* * *` | new business owner | create a new client input | keep track of all the new clients I work with | -| `* * *` | new business owner | add a company to a client | know who to contact in that client | -| `* *` | careless business owner | edit the details of company | correct the mistakes that I did | -| `* *` | efficient business owner | sort the search result by price | quickly know which client I have made the most transaction with | +| Priority | As a …​ | I want to …​ | So that I can…​ | +|----------|--------------------------|-------------------------------------------|-----------------------------------------------------------------| +| `* * *` | business owner | choose which client and company to delete | save only relevant clients and company to remove clutter | +| `* * *` | forgetful business owner | see usage instructions | refer to instructions when I forget how to use the application | +| `* * *` | new business owner | simply search for contacts | retrieve only the essential details I need | +| `* * *` | new business owner | view a client's details and company | easily know who to contact for that client | +| `* * *` | busy business owner | quickly retrieve the data of the client | save time without having to go through multiple layers | +| `* * *` | new business owner | create a new client input | keep track of all the new clients I work with | +| `* * *` | new business owner | add a company to a client | know who to contact in that client | +| `* *` | careless business owner | edit the details of company | correct the mistakes that I did | +| `* *` | efficient business owner | sort the search result by price | quickly know which client I have made the most transaction with | *{More to be added}* diff --git a/docs/diagrams/DeleteSequenceDiagram.puml b/docs/diagrams/DeleteSequenceDiagram.puml index 343b23616d7..5f58aa88426 100644 --- a/docs/diagrams/DeleteSequenceDiagram.puml +++ b/docs/diagrams/DeleteSequenceDiagram.puml @@ -5,7 +5,7 @@ box Logic LOGIC_COLOR_T1 participant ":LogicManager" as LogicManager LOGIC_COLOR participant ":JeeqTrackerParser" as JeeqTrackerParser LOGIC_COLOR participant ":DeleteCommandParser" as DeleteCommandParser LOGIC_COLOR -participant "d:DeleteCommand" as DeleteCommand LOGIC_COLOR +participant "d:DeleteClientCommand" as DeleteCommand LOGIC_COLOR participant ":CommandResult" as CommandResult LOGIC_COLOR end box @@ -13,10 +13,10 @@ box Model MODEL_COLOR_T1 participant ":Model" as Model MODEL_COLOR end box -[-> LogicManager : execute("delete 1") +[-> LogicManager : execute("delete 1 m/client") activate LogicManager -LogicManager -> JeeqTrackerParser : parseCommand("delete 1") +LogicManager -> JeeqTrackerParser : parseCommand("delete 1 m/client") activate JeeqTrackerParser create DeleteCommandParser @@ -26,7 +26,7 @@ activate DeleteCommandParser DeleteCommandParser --> JeeqTrackerParser deactivate DeleteCommandParser -JeeqTrackerParser -> DeleteCommandParser : parse("1") +JeeqTrackerParser -> DeleteCommandParser : parse("1 m/client") activate DeleteCommandParser create DeleteCommand diff --git a/docs/images/DeleteSequenceDiagram.png b/docs/images/DeleteSequenceDiagram.png index fa327b39618308d02b8e0627791af7979ef63947..8b891948651effefa3ba3e0bc72b1f4edbeec937 100644 GIT binary patch literal 30534 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 K@J`;u=l=lGwW8_( literal 33030 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 From 51af107e7ee822a045d5ee6f05c8c71f6652f309 Mon Sep 17 00:00:00 2001 From: ElginL Date: Fri, 21 Oct 2022 11:03:29 +0800 Subject: [PATCH 2/3] Update DeveloperGuide.java --- docs/DeveloperGuide.md | 1 + docs/diagrams/DeleteCommandClassDiagram.puml | 17 +++++++++++++++++ docs/images/DeleteCommandClassDiagram.png | Bin 0 -> 11562 bytes 3 files changed, 18 insertions(+) create mode 100644 docs/diagrams/DeleteCommandClassDiagram.puml create mode 100644 docs/images/DeleteCommandClassDiagram.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index d29fd5a5094..63246e79a74 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -300,6 +300,7 @@ The following class diagram shows the parent-child relation of `DeleteClientComm ![DeleteCommandClassDiagram](images/DeleteCommandClassDiagram.png) The `DeleteCommandParser` will take in the user input, parse it, and return the correct concrete command type that is either `DeleteClientCommand`, `DeleteTransactionCommand`, or `DeleteRemarkCommand` which will be executed to achieve the deletion functionality. This process is depicted by the following sequence diagram (for user input `delete 1 m/client`): +![DeleteCommandClassDiagram]() -------------------------------------------------------------------------------------------------------------------- diff --git a/docs/diagrams/DeleteCommandClassDiagram.puml b/docs/diagrams/DeleteCommandClassDiagram.puml new file mode 100644 index 00000000000..b251d75dbf9 --- /dev/null +++ b/docs/diagrams/DeleteCommandClassDiagram.puml @@ -0,0 +1,17 @@ +@startuml +!include style.puml +skinparam arrowThickness 1.1 +skinparam arrowColor LOGIC_COLOR_T4 +skinparam classBackgroundColor LOGIC_COLOR + +class "{abstract}\nCommand" as Command +class "{abstract}\nDeleteCommand" as DeleteCommand +class DeleteClientCommand +class DeleteTransactionCommand +class DeleteRemarkCommand + +DeleteCommand -up-|> Command +DeleteCommand <|-- DeleteClientCommand +DeleteCommand <|-- DeleteTransactionCommand +DeleteCommand <|-- DeleteRemarkCommand +@enduml diff --git a/docs/images/DeleteCommandClassDiagram.png b/docs/images/DeleteCommandClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..785ec3b602bdcfb08fd2f6b3d3511f96d5869a15 GIT binary patch literal 11562 zcmeHtWmH_-vu7hA1Si4WEd-a~odgXQBtUR?rwJ|r0txOCG)Uv_?he7--Q9f-$^GAZ z=e_mTnptZ;&KH_Ky-)4hrN64$-#^HRp&}6=fj}Ts32|Y05C|3w{C|uH3;bm;*y92| z=piC15IrkvCvyWs2uRGp(!f>+VxUi^>qKS@fmri0Gh3VMSVHVA%$fA8EHGJkhyW_K zCW`?_k-Iz=rzKs)buvi_y>yIs3ffEbpM~euqR?T*N&9q# z({|sfOg{)tOZ=#^S2Az1jBqRJ&J^=^T`oSEy=Ii-JQp?nS%TMm0Sh?cB;%uE)_MH8_4b$;ac<$~ATRe7%tY+^x`LiwnVGICxANjsl2-&C$;${Wv$tPq5owid zd6)EfGG8p2bmmdK|BzRm)^dt;0P@h!dcu^=2f-8UctPDs0MCiL$F{B^!x<`s+0sg@ z7Sd^>*^%ONeR6V^RVv>VY1UYLj0`pC5kg;w^ON#7C53F5zC*baU-A=E7 zl$wf0*o4DKS3Wa$D*>x5NT%I%S*1QNmsTQ7J(&H8QH-C2*&`eji;jrL@+1{ybNX@w zt|{`7GzKSlq9d6E1O>K}`jQ1x!*zcOVgXptMiNFHEI-P8`g{ zEaYFWlac=%T{-eUN|5;$*3h?f_$`baFFv?;EyLDd@OBGE`#r!5);9v}a^B??xLbCq zBe2#uvyo5-^aXBAOw?H3CLGAq6GkB=3&vr7ijao7x6hnP!j88-Q)WubX)S%1-O1Kn zRJ6W-orXM)EB~UizS>UG*j)Hs#`1DS9D9h3KZS+7t6o}ZN=m!zwZlSURJ0)=g{UZE zS$;V>=sVF*k}%^c+#o4rc$8RJ8IX7le^Nu&u>8#N+DBH_DZLK;OsLYt1fPClR@SED z&&ABiIwH=3d<^82ZoC~dF0VYKBR1!oN#8mp2NH`Ud_e+L=r z2r75E7?(7=@8M;2h7>jpI!fMi9<0U4YHs5v3}N^$8yN9$B1L?7BDJt|*yUH+SrY#g zovY!<*GmN!^oQIc#F^Bs%*vi6^!J6%9lpwWn@o6vW<|@-b@m8pfmy z?u#1{AeQqlo0_GPS?O4N|FmT4>b=L_^pC3(NxCGeoYYi@=TGC&;%4@Of;-q*Kv<7< z1}JBMv8};_bs)hhkR!Wv< zQWDwwo7OXXb3*L4JlF4&A*W4W5d2ydR83uWi|2W+&3Sd@ZK;5q_S=Q1Xm!)a1AUZ= z5C3KVAJk{LOyn<;%gW4;j-D6|9HY;t0=|C=0z?QN^=xZnyE=+8?B6?YI8*wHH}HSt zk)8!XLINNuAb31lwyvICg+*?y_0QbgToG#Plx|;;UN) zIs3H-KxQ6CW+tjsB`&O2qA~S_1_~hm?fWX!lSMzdILm(ok)yt3FpX%z>0JsUG~3xB z=6KELTt>}Q;E*FgU1BWfWLH|6-5nSD;YYaq-1N3>b)DV%Y4AKO@1^rgJmM;diGhYj zOsC!VGg8*&uJgSOLINU)xUTNPLUP7C5a=Ujb_Px z($7^+p0BUHAl8l)2cq2MB#}J5Uu&sRh<#t|uG7hNbU4!H;!eIcMBCjRxtlQR%b8Yn ziRoMo!EvU>F0A4(ISBL^?QADV$4U|Ws(cE}sjQB9eJQ*2K>01_N4- zOXO{rVTe^$=6O4qf|zfTUk@=c!$|1~a}i(FfmqldnN&F{nwg^%JGNR14?>Wo6g}O~ z@VsSs@m@GMvxr|e;syF9#@b50HkNiTWoN|TyuGs3?PM{JIq!pqDkzrV4{6}`(N!~Z25PN(6W~_>Z-7Yquu}lQ|5Pyz%Gi7HD{6rfgaVWL~e{yrYnL? z_%1aZ@R+ZX@297dF{UtMcMI{90`*%P=8-zEW#{?b>k^U3zM5=yWIX#5gBXO(&1Iy6 z1bD8nx?5ver;u@@%gd_7$U9# zStJFN19%W3H?SI^C*JD*^7h1KRT_9&N(#cj1VRN0V&TQ`tIG8Kg@wBoiD$qs?QkFp zBzP20n6L=D^_m@}T6MRFFepp=2mX~OAVi@@N^P^%`1;Mlu%H$o|9K7`aZWz>GXQxO z!NI_hL0kp)pOXf{fLhRg|Hi%)8vg?kgvbZH__pmqt6@^e4+ca51N?~btZLJ@j{hl$ z>^Zmzgc#=8OVWc(1^eg655^XINL7b*Wx@hZ$9y2r5}+C|o%xhJR$p#ommmL?3JCoA zQ8Y;C0%fmaW0)h*osNq^p4LF@OIc9KuUNQUPXwfm6BtH&bs_-*A)o+T9uCg$lU1k6 zx&xcCJ#LB)u%(Cqkah%UrLY0tTHpZK6a@ew3=%*-S-;-`Xo3xZZ$3`}Ju*BVlOK5b z1OB5{VPFwFd;UME|5;YoDLYOG}I!T@~Yw2}aO004*Wj zlbEe<*&7W1yhGR)jED2%i1QEeIkL}fMT3EbpFpQTF55&XrW}uyPQK5@!}t37l33{9 zG|=0gKYuSkQiwO8+Q?@AnqOBRu>-nd>y(|4Isgj#7X^}UpYnq*FJW1e%H0j7{{=W1 zuTci8{GWg`fAh$<`~{ENaU-!_N4})5Pc)n(bHrsk@-9kQrbjS>cEd=2bjIBBdAP}l zv&U>aU!_lnD2E~glVv>5N$hHObc7&%L-Ek34};6JceMw<-bW1k)zbVF8#h zF9VDh)c*u@2gJ6TH@n~7afLI5WHLAZcl4R=*i)98y0YYlEN+6sTtHSFwk%OE-pUwF zd9o2RI{vxmm#r6;jAX6&Gns_g4ca?YLQ~vV44G{U?zLVVQc`|_J@m*HRlCQ|Pr!wL zoh$SeFK=$WhLip~+vT(Kb&)v13-w~GhK;1%@bJ&{v$MNYOG{|_lHyC*3LZ;DRC*(Y zIom1vJWuzfW~SBCL=9{N;mUegv@Ygle&H$on}Cb~ z>7&WZOE2qwtH_}IkDyZ^%sm(% zk`?&uNS};&k{&7L=J2j!CKc-0*~PaCMkHk`f*?RN`9sK9eQbI=oZG}PGImlR&I>*} zuMeQ~#mj5_=0J$xMa12bA1B}EgqURsN1y^D24GGC&)f)RhIo9x^fHH~dI5wiKC$q0 zq98v`sL^LxB9(!`nbxLgE3|rUe$$vA4h{^1h&PC;D@Igu*7tVz2KS^du2VdMmro#_ z3CP;rPIB5;$2rkBxO+X_CP^$m9k9+u6+~7ghAE`QA}JK)bNF~?Kf7EE1ge|3Wytb6 zFM_>Wm*`)W3!JMQ5V>&?vt}1f8jK-%S^{qT=xK1Q;V)R_%|zc4p1%n3@`OnPLgu4& zKGkh+w}_yze~^&u#Ua(QK4*Mbv{?Kv&iA5swNv>AXXVVzxEi+Z?f>R-zF!Sp`(aaL z|7ez#kz>US2jupb`Lvob)P0kr{D)lO{lwbwuecGun7NQ*dOFomWX-mYb@Le|ho!g5 z%E}j~7gr~6Mgp51iG0dmK$}>PGHR$qbTSnSLgk1xae?s|IN(CD4_%82YhAl}cS$%0KX zL#k`xvpNtpXSu43Um!)hAQ400W*$oBSaCn8&vrEEOS;PGgP#fsCMJ^DTxm>+&#!W# z9Mp4P%vLkeOVP{zh$J05VPiq+m6Y%1L4arnx#;27<~8hkEDP7xxv~UdRzsX~UV!F+ zv9@yyGlw(-vsTu52p{ATm>W~eC3#i_hj<8 z>xin%VQ!32=(9OmeDErQCk&9x0jnHQ&t!bU%R4*UOLeoe*qNEv*YOH00>^e`PsdormWXiwCEVipXp8;XhEAb$R&>FvqOPB=ijPO- zKu|4C^$#MK>+ZLRZlR{$+m-$1ugCXqLj5b9Gua^dSYOLj!aqXuo|Km4GLpIAaK0+1 z>5cwa@JT@$j&eABbky{d#%h`?PZ9I-@!AW*cm)MLSs6i*V-`cH^Omm$uU;|9Bbpox zXGHB%1s~fI#+3hsi~lfeDIhc@H5W@|GC58ww^ZL46w=Cw%-fX=#~bMn>~Q&fM63=acnP3yXqrCEP3V6Sm1b zx3AcgQ$>Z`{>8s$f5Y!hEaNV^8W?Q==7PD4G+4~Z{&Btkt5p0iuO_XU(+p_ec#c=J zXfc|#Kb8Yx0l;kvI+G@(trPd#Tye*4C`KBOT5W}Iq57X(4)?t1?uIZm4LjN)d^ebn z&8pu1f!F~B>Z9(m7o(fr^LfTX@a58eZE1M8Otre^e=r5%uOy3`wV0Ee3uTL$&*ts^ z@9Z`V`OijwJtdvB-O0~Z)~r5uXjD5oo0#h@K*v$a4e9{{Sl#~T`xISuoAwfqy9onD zc72@Q>#C|(`s{}09!Kp5-Se&|nQOi1VRF*pdy_WDgFgvMmUYdfrI9}=$HdFxg7#ow z;8dFp?Ggm%q~GKM*Jm4f-RfaP*}L#`vm#{kqZpMF{GG zNsn$n!o5%jO;1l+$mCt=v`Tt?WOu#lfP$b%uJ}rkM^WUq0nDgUbYSH%)87f3A^@oV zCI3-dFtsGxmCC~4x1bJ9y$)B%(p$bpS$pH%*ZShmgH#`Dm;GkXoUaUiIo}xk7dGOd zG&diW>m}cD1JHXK4i=%TrP({vs%ptClRXRbopHV0s^i5RWr$EiBJ8Pzj{5}}rdJ0o zHE|N#nxr5ONE!(Es?9s~`o(z*#VhcQ@3hGpLqxuXQF8B2e|!sbozBwea=1BBn3tGX zuv4g&7{}8k`vL|LsQ3mkb|yBYV-I;qU3i2Z)ZO|y52$I)3?knV30V>g^2a$pND2^u zb^MnS5wLTZa>_hU)CI4zw09?EFI7NgKp|xOZG5~yr*-~p?pUu*}*!qH=yon zJ!C+rQEWb)rJd!5^G#EZU2T2k-1*Y4MA|E2kTEu}HIj%3Zj#&i%)_79xfZ%nV;9z#*S`4gH#wSESI}8 z$~;cTTm+<4RJ(lEi&#&L={k5%cisf|tga?h@7Ij&j=X*>+t@W#n+H}}i}i%aEhMG* zt3N)xw(Lq08VG$5eGe=4-W{NjAgFLPkdU8Hay?T`>f9vxsxln82!eJ2u zI-K48r?NAJZ-15$7dJMc)u`$mI5D)8e%-hdT<&py@*^^m=&A;k!bzsBjgbO_a~8-w zAIoOD>ibH~pD4H&hiSTa#izYQ^ZJ=gapf3V1A^Lek(9!>3wQ;nYg{B`%1kNieq^L~ zWw`={u)=n}F0iLZ^fNO^6-X+I83hG9bq)GfH!{dR0NbU~k9Bj2qz8B~u{CgW0 zOhJn~HZhmlQf5VsJvg{(g*DrAP#V62QQ*+HNgnP4q2v-HP&aS#*~{&=p|@DoLNdls z)8lSCHdb1#5=W<8E9D89HrX=KYwPVLzeYSRbLz8jPR=*4FeTy2Ulyuw8U3onIeds= zJ|ECg^<{`-k`9%;2)A@Q|D*#s6(yix)^gumZbzGk17Uyh{35;tac;QIiM5=}E_FGm z&s$%=?|(Abv(ot;I)>SEF+tEeFmJz4h9Q``}A~;;3e6H z(8Gy0Cgr%*yt?sday%@P3mtQ)u_6Nl!A5^?3e0S}gxbh(j{wP%4jCv6sFGT`uTJ*9 ze}C%!aI^aTh0w#2pRIf4mw(FZi)5~qq2XbPi%P#U!`r-13qyl;*QZu!#5qe2a2UXpflOGP zX@Glyh*aP@jnLB3W38t(D5&Rwf{jWkcaOW#X~X|z^b@^RiF?=QqJD{=W%WL!2|j(| z4S@91`18+Vrl$M-+=ay|;~vM|g`4qIS*qd%hw$INPIqi1;|3Fye~&buDoK{6TO~^c zjwe)Q{nKqIm9((oy8bE2CF84nb@eYTec-0s!;^urkxUPEeeq$t0XJn8yhW>B5Ij&z z!iz{q+yyYZ3qg#BJsvL5>MY-3BC3F85=~W$v=;yoK;X(;9I|JE_{dnufa8DwPYMyd z#+H}>ylWKZsJ8h54hH#oPHMSX$h`Z_biCER=3YbNgY{D|(20n&spbcef7M1(NMWtz znLoB40f7{U7$pap_T5|6J@?~Pi^oJYru^_pX}rk=gn@{Nw+Q6-VbtUNO6a`PMooy& zeMYY2PVSWnJfezm0>9G{>4SJC`F$k4*8ZGY_W?o^&<`5)8#8s;$xlvS>u!8#KzRvw zhKx7~Ha0ISRE@G9ktS7P+~KzD%dDjXEEgyxHlbx@?&rH4HOTI_M|)x+Nox+?WS*X= z2}z^{vcW){8B=b&xZb&Wr(%E?i-Z_E#p7CKxIJ1ZQKRX0mh8B*5BBu@8s_C?Hz0Vk z7fL?opg1agHTT%5W~aBTbeJdz2LjjC3aN7a$*+O4Gsof)@E6aoiO9Iq3+^|I_7nLe z0@sv`8!*CT+R#=@hXSo+hZzgfd7I8@>3Ad-F-moC6NOJ%f|yhvjeH5<jXvPuQWUR&}h@JXeVK##S<9+8x5qwTo3Y$(k;EIRJyqnr%cu z-{4>fvCj8$U01^jeNiNS2=MJ)+PrKe#3MkA9opQ5SWJd`01o-E(7)*+oIA<{LA<_(>xp=GGZ)dR+h2rS`?`-n)DB@y?9D7)2lf!HkmfT7t6WxUHX84 znYVByPA6w1_B# ziwuKBWBCZOpchQqc!lnvQto*4rY>6p8QfGR;pQf0dmKh+B?UOA)wH6gfmaYbyp$2d zzIsy<54(JSTuosjzqhqgjt^KJI5KtTUTd>b6Z1^7>JS8wM!;a18ywWuYPcN)3?ew_ z&T->cL~PnmAQ#n;2{rD=85Kztz47$i^32JB^4Q(;0RB0etwqY~QMArUjo>B@Y0dd5+N8-h!)L>iCK(xLx0Wf?03ox#@4PcSG4x)?B;-Ws{7@VTs&(1 zPfLIsV#Bz_em;jJNHxIT_!m!;uN|T;^2192P7yHd6Pu|_Zi*3e05=7`5%aTa_1!n{ zvZ~qg{+L^`8PM$l>IcCPy2>P5CUG zA^;~KjG|^LKomfr9_C*CihI6DnCd{L?VFyLw**8Cr?se;q|U}O=t7Y$M+exiU|=m(J%lb5PK)b*ZDxtIA?fl zZN9GBy6xN9skBNd4Q^s$n5QQ`Nlfp_UM2O#+y(xebHn-c{r0xuJX{tsycG2&8WYb| z7bxDGME*(d+hl=PEOKo)ge8kU*9UHhiDL8p_nvsK;~Tii%m) z0hl3%SqO5Z`}6>Y0s)?pLSJ98t=$4&kl$&k1zunQQgl6hZyXgaA z$}c+l7oe|))67T!Txq%5pxALpA;P0{eegSMe#*nWFe|X<-sqE+Gf3U(+1HYtGx3D8a*=T?g+?U>+3RtrYuFO#9Z+? zrH;UiXCP^;ts1U>`D_?hcuZ@cY?hI8Sa}mu3svG%lXyMQW(xA>MHvZ@j*}0KpJ~zR z`t~M>Uf_2qv)z!%I9dmycNX2tBYVzsK^SK#g5TzEkP$v$W!Q6q9Qs zu-`L?K4*2nlN!2&zL02})$wJ$*L~N7VtD&8@Nrpe>X9^U__yj-6usMaUr+qL%Urz2 zWh^2q@iJ7Hc7FIBmjMFbV7c6`3xVPf`jyRR;?I&+OXo(gGqXokpcQYJaG$`gZ!fP( zht{q(d|-gX<4iH~n?wN5_pm%3A`({lvdPH=ig15X*@!RgcQR#nCfU5y>j<8YQqR>ldK zi}e)$Yci{AbqdQ1lW|cZeFjc_XR#kn6lZyRVQkv$wp=^XG^%UP!6+l+)81zX1B1>NvRLoC zOV(lnHZot)sWNgoSIF3oE;EG9(%t(9NKxeLCWCxVxE0M~P zZwTe-U^_%tNFa$1TbnF=3XEf3T)f9I~iM67NDs7g7&iq z;f>lD78z=(N^oDYmb}^wy~y=@ALpkvZB%+zjT&zVXmBLZZcHTo+gZT9yOvC*7qTAa&v6?1zTjs*KyL?^x`;U@1>yOz6?3=&}pIjUmQ=K5)p%eDI?c4G|; z@$KcHa`>e*&m<0TIZ!v{^sUUs&`lFLEAfJ1?#jLvZSZB`PYHIi(swPG;( z@E6YGBj+15;85RR?4k1y#v{&wZMM|qF`2YJM+BVOX?Q^nS199E5d7nK%L~yyAwzSv zpy3S>%fMdAxZTg(a}`~d3ElKvFj`w5Vx`6SA5Rb& z$={a=if7}yRVE_7b|7=P-l8y_eZ0*Q5ZZ(0Zva(toY1I08lILb30Z|cS|APX)FqmuCAJ!Gaq&$J0~MK{T2AyNc-VBzz_4D6DhCoGM*ie?-%zuzDz&1*t~(sb z)Eel``9Cd*-yO@4tJs7R__r$rqBv>*_aBbrAWDH-Rv#mVH1>9DG}C8;msK7WA9x2ve%>aMyHFU_b!u!m#(47_PRVgvUfzHLTs|X#*fgxxyLvj{ zP60GiE3yTU=^aiHk6le>sytsPSInzi^-}1Mh8oCmcJ^3m&800_b7n+XPG5}d-?tMI z2mZdDuo+p!2)o{%=vCJp-Rz+`iZ)4`u(rmXQnE#|!d*lK3xgMOUPzUW6g2 zxlggjRx0N(%4_ygIg)}N`b*ms3i-gf{qvP~qVIkM23|vHXq|9y zDt`U=*oVW|Rj2>dGUC;{$b~w(wf^{lit=hzHH}qDfwEP3B^2Ni#u9LqO-@W=;bl$P zXgU`9Dp$7CkThx{&7ACa%bX=ztti50F+U1p@0HFTuO(&9>>0>*DpQ=g@mZ&Q*;kX4 zv^Z90uDIRpMlhG0h0d!1s#@ylNCi&y{_Xj&WG6C`YQ{pGH_v-kq85=jfg5-pNp$0& ziBMQ%JSnjbt#)yWbu@2!f&~Z#koNmnI<(Azk}0s!A4tW-2nrkxTf#uvkJSlmoWx-9 z#{YkT4$i5yEi0APl|WFNi2Kt_w9&U%58t18+lUH$?`*A1M*L!EqOD*q-UF+ob?_~O z8RHSXa9QN60qDip#O6wi76Tz7&^f$->F3IK6ys7kLx1!H$=jt78o>)5SxHEEbWtNrQH0I_2TZo^Gg+@M+YRNVAKzwUdRDiX{ zr}7DI5t&2sWKp&WxP=Mo2ilpyJxxhqX#USV%_|`<`; E0sV`oy8r+H literal 0 HcmV?d00001 From e5649c6c19c4442cd31fe11fd599960a9dee176f Mon Sep 17 00:00:00 2001 From: ElginL Date: Fri, 21 Oct 2022 13:23:45 +0800 Subject: [PATCH 3/3] Update DeveloperGuide.md --- docs/DeveloperGuide.md | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 63246e79a74..0decf7be385 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -295,12 +295,42 @@ _{more aspects and alternatives to be added}_ The deletion mechanism for `clients`, `transactions`, and `remarks` is facilitated by a `DeleteCommandParser` and `DeleteCommand`. -The following class diagram shows the parent-child relation of `DeleteClientCommand`, `DeleteTransactionCommand`, `DeleteRemarkCommand` relative to the `DeleteCommand`. These concrete classes consists of the logic to delete an item stated by the name of their command. +The following class diagram shows the parent-child relation of `DeleteClientCommand`, `DeleteTransactionCommand`, `DeleteRemarkCommand` relative to the `DeleteCommand`. The concrete classes consists of the logic to delete an item stated by the name of their command. ![DeleteCommandClassDiagram](images/DeleteCommandClassDiagram.png) -The `DeleteCommandParser` will take in the user input, parse it, and return the correct concrete command type that is either `DeleteClientCommand`, `DeleteTransactionCommand`, or `DeleteRemarkCommand` which will be executed to achieve the deletion functionality. This process is depicted by the following sequence diagram (for user input `delete 1 m/client`): -![DeleteCommandClassDiagram]() +The `DeleteCommandParser` will take in the `userInput`, parse it, and return the correct concrete command type that is either `DeleteClientCommand`, `DeleteTransactionCommand`, or `DeleteRemarkCommand` which will be executed to achieve the deletion functionality. + +This process of deleting the first client in the list is depicted by the following sequence diagram (for user input `delete 1 m/client`): + +![DeleteSequenceDiagram](images/DeleteSequenceDiagram.png) +
:information_source: **Note:** The lifeline for `FilterTransCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. + +
+ +The process for deleting `transaction` and `remark` is almost the same as the process stated above, with just the following changes: +- For delete transaction: + - `userInput` is changed to `delete 1 m/transaction` + - `parse("1 m/transaction")` returns `d`, which is a `DeleteTransactionCommand` + - `deleteClient(1)` is changed to `deleteTransaction(1)` +- For delete remark: + - `userInput` is changed to `delete 1 m/remark` + - `parse("1 m/remark")` returns `d`, which is a `DeleteRemarkCommand` + - `deleteClient(1)` is changed to `deleteRemark(1)` + +#### Design Considerations: + +**Aspect: How delete executes:** + +* **Alternative 1 (current choice):** Delete either Client/Transaction/Remark specified by `mode (m) flag` selected by `index` + * Pros: Easy to implement and lesser commands overall since flag is used to specify each command. + * Cons: May be more clunky to use as users have to type in a longer command. + +* **Alternative 2:** Create separate individual commands to Delete Client/Transaction/Remark, e.g. `deleteClient 1`, `deleteTransaction 1`, `deleteRemark 1`. + * Pros: More intuitive to use, shorter command to type. + * Cons: Adds more valid commands that the user can use, which may not be very user-friendly since they have to remember more commands. Also, there will be much more classes and code. + +_{more aspects and alternatives to be added}_ --------------------------------------------------------------------------------------------------------------------