From 9e77f4996ef4cc7b9df0605036e59c270f7da60b Mon Sep 17 00:00:00 2001 From: Wessel Tip Date: Tue, 11 Jun 2024 10:59:15 +0200 Subject: [PATCH] feat: Improve database/path route --- .../.idea/.idea.REST API/.idea/workspace.xml | 17 +++--------- src/Server/Console/Program.cs | 2 +- .../Routes/{RouteMap.cs => RoutePath.cs} | 25 ++++++++++++++---- .../Console/bin/Debug/net8.0/Console.dll | Bin 16384 -> 16384 bytes .../Console/bin/Debug/net8.0/Console.pdb | Bin 15616 -> 15692 bytes src/Web/src/components/mapCanvas.jsx | 25 +++--------------- 6 files changed, 28 insertions(+), 41 deletions(-) rename src/Server/Console/Routes/{RouteMap.cs => RoutePath.cs} (83%) diff --git a/src/Server/.idea/.idea.REST API/.idea/workspace.xml b/src/Server/.idea/.idea.REST API/.idea/workspace.xml index d7f9255..1fe2d9e 100755 --- a/src/Server/.idea/.idea.REST API/.idea/workspace.xml +++ b/src/Server/.idea/.idea.REST API/.idea/workspace.xml @@ -8,23 +8,12 @@ - - - + - - - - - - - - - - + diff --git a/src/Server/Console/Program.cs b/src/Server/Console/Program.cs index ab867a4..9b5aea9 100755 --- a/src/Server/Console/Program.cs +++ b/src/Server/Console/Program.cs @@ -19,7 +19,7 @@ internal static class Program { { "", new Root() }, { "database", new RouteDatabase(cassandraSession) }, { "database/metadata", new RouteMetadata(cassandraSession) }, - { "database/route", new RouteMap(cassandraSession) }, + { "database/path", new RoutePath(cassandraSession) }, { "roomba/control", new RouteControl() } }; diff --git a/src/Server/Console/Routes/RouteMap.cs b/src/Server/Console/Routes/RoutePath.cs similarity index 83% rename from src/Server/Console/Routes/RouteMap.cs rename to src/Server/Console/Routes/RoutePath.cs index 98c8407..e68c0e3 100644 --- a/src/Server/Console/Routes/RouteMap.cs +++ b/src/Server/Console/Routes/RoutePath.cs @@ -6,9 +6,9 @@ using Console.JsonClasses; namespace Console.Routes; -public class RouteMap(ISession cassandraSession): IRoute { +public class RoutePath(ISession cassandraSession): IRoute { /// - /// GET request for the database/mapped route, return a map based on given criteria. + /// GET request for the database/path route, return a path of a map based on given criteria. /// public HttpResponse Get(HttpRequest request) { try { @@ -27,7 +27,6 @@ public class RouteMap(ISession cassandraSession): IRoute { if (selectStatement == null) throw new Exception("No valid search criteria given, give one of (id)."); - // Execute the query and return all rows in an array var rowSet = cassandraSession.Execute(selectStatement); @@ -43,8 +42,8 @@ public class RouteMap(ISession cassandraSession): IRoute { } /// - /// POST request for the database route, insert a new map containing - /// object data into the database. + /// POST request for the database/path route, insert a new path containing + /// routing data into the database. /// public HttpResponse Post(HttpRequest request) { try { @@ -55,6 +54,22 @@ public class RouteMap(ISession cassandraSession): IRoute { throw new Exception("objectData is null"); } + if (parsedBody?.id == null) { + throw new Exception("id is null"); + } + + var selectStatement = + parsedBody?.id != null ? cassandraSession.Prepare(@"SELECT * FROM Roommapper.Maps WHERE Id = ?;") + .Bind(Guid.Parse(parsedBody.id)) : + throw new Exception("No valid search criteria given, give one of (id)."); + + // Execute the query and return all rows in an array + var rowSet = cassandraSession.Execute(selectStatement); + + if (rowSet.IsExhausted()) { + throw new Exception("No matching map found with the given criteria."); + } + // Prepare the insert statement, bind the values, and execute the query // Using a prepare due to the potential of SQL injection when accepting // any form of user data. diff --git a/src/Server/Console/bin/Debug/net8.0/Console.dll b/src/Server/Console/bin/Debug/net8.0/Console.dll index 5aa069c8705dc1c6088e5759dba1b5e494029864..ee6bf232a9112c13270c37452557164fc89d165e 100755 GIT binary patch delta 4584 zcma)A3vg7`8UD|GoV%|)b~oA06E-9v3ke}1Z z92JO1MVVAYe1OklG>&cT2-r?_(AL(eV?kyZ!0HqQE!IwJZNGDNApv#lX7;=P_x=C* z|NowQ&e=QZ?q=QHZ0jcDrtan6^xvDMeZIK=nI(yjEGC*y_^c%AGy8M=o^B!!_{)ok z7Kt3KNLC9xJH}Z%WIKEuGS6Lz&wT`+ZkVt^YMfr9E zQM=XQ9i_BE>2RJCJfTf~A{z#K-*KJV z`6NB1kn?Z|L3T)N(XVFX#ix4Ciq!_ShtZj9(m1ExevT}2+Uw7fshiPt^+9A#k zwp+pNcCr{U%kxv<2$w)7pP6Wc@vx+2r;U>B5|PAHFRC3a%^XFHNGV2zb)rH!baY&} z3?92ytl+nm$$RUV3ZAc~&Td7DNLbd(SF?YfAaCDp6>e)u{Se~#w;a!ycT7Wgq&7BY zIHr%eQ2%XAAA6zxXYq_RhaC}LS>;(x7PWh=$Sh>CyI|WrfXHk~?-C!nbHy4*ZQ6a% zI%Yy!AI4&KxwTGBu7E-DYe#+XDaW~aGc5VYaqk8Ozv#)0W#>PT{c}%-xW!rPJAwqU z?D4#picHsd@tHHrx7~Sx>l3&t5-xU8yXFWd;>PS-#d25Xj~9Bu)jHK*q7x>G3?eUS zop?-!+6$wWkBhqt$(mTJ>0O92v~Vu&mnI6IyO0fuTKAmH(cQ`rN8~buBxufXsz`EV z{Mdv}Ht)jjaf^Oux)|?CywY!a%_0xkBU2pTrJa~bBjsD>=Uy%YZpS^xW{DR$xbjYN z+ZT3YtGSEf3CZ3p)tko=nTHnrme-Pr?jK2{vV`ZV{?!2cG@Oxo2x<2v;FQV_IPb-- zVvpwsd8dhtk4NUnR7Nbn*H8t)l#S7^Sj+A6*xw9A7&&1UT5eAZJ)HaE?_BDWV-V1N3)(4-ZhE zaS!Koqbb{(4xLjL+Tzrs@J5nlGAvo<5Bvlg<>nCDn!}{t37ykA6z252Qd-aur%GeU z$e^WWvYA1ffl(jrMtM%xpleRck(ATddc@-Npz#|FcmRXP(A{hrVlGEI7ySptT;xE3 zL|UQ>^jbrBJVY-^z|v;a&5~)rc#Ksj#_$9tSYx?lI=;ztixFey6^j0eNva{Obbd{e z>6E0{3>9kN7?i#*$qk=L0mV)!=A@uvRhCzv*;765~q zwC6F2c?vuEV%YnY*QYIo{S#xpUP&*|3O#^&%}_4kYk^BFTj@U=rLT|cjUkF+4j!V{ zjXsnw%aJqEPe<7%uxk|im>uNnaICEykI2 zuVNc%mbDp0-^`Pdu`Dhs$R}A}(uZ^xRfC>QeDARn*WQi0CPm(NFB9+<{ zi}f8K`#jcp9_v%AKW)F+hY8<$o^L?0UK&fg;7h^5j{32rLCRLNmzwEWJxC34wiPUm zy5ej*SUNo)XHS4-(7SO~j>906{u*bsv|rC658k!#Kvgr@l%`m$UN+?^)*DsbWYhXl z&N0**bE;;>&|sX&5@YFLoXHX)q-S&z`-x$peLuE9*XVwrPD>fiG&-Wo$U|yW^t;18 z;3MvsHx~Lskx^Ax{ys766p3%E)W=kF&nj;WM@PnWu_G9a4x0=+Rxa&ypo=B|lc`i; zjlw#G^$M?4c(uYNAfuhYRC-O}hd>;+zzn*HTFf#kWsmY2V6jyPoX;+Y{w8n0s+N%+ zDoA5XvFnD-RrCmO4RE6=*Wj>dNDD^qwsun;8)H64^{l{rm1@|Fe37 zI{%3Eu;bjRIoYtNPp`nN_fZe~skK>4XP@gwwKfVHyJ-Si{HL~uy>9(i+e@Ve*B8+? zD@)I#9aawP<9dN!P8--~R6xt<7e+C;>3zMJ{PYnplfD7wk_o+#W&q2m5qJ?T1J0l| zz`06a7{z5eR``HXM;-Jyu#=uPE~D$|4t=H4o0Q(9^cJP}D5Xa!a;pv)y-L4R;Vz}@ zQudPy4=Ck;vX3eIn6h=&Owj>DXR=r>$bgZn>}Dog=~cKB%7C#;+543DfU=J&n`v@v zj>0;HO$vJy?o_x^Z$?bWkT_l8V+zTH!u6262$mTP9MTrxo{rKPx|Q9@?qhGU+qFbp z6lIPpEYgRtv*hM&mKXJ@&`+o<-lWfciu8K1Gt-~?5?(`y&iC8{PkyjSpQe0n{499z zO&|+D%9i*jbF%*v?Giev?VuTK2YsnMNrOa#*;%s;$AZYs>slI{)`_OjvB8F%ZJIcd zJ1--1H8tUVp@~-E+d(Zfnc9`IX0RbI)m5I_Myn}=?a={TOE=>+5ig3%ub>F{jViL4 z*1*4(u8k}0V)LZwgR6>d4ew(E;~X1a*t4Kv+o!pKr`|tVJb1ihzm}3_xqTsDm#@3W z+kLmMOVc!Oo7h?QG|Lk87oD{!r7nzE|2qGZ+Ts?z4N zveuUJDdnQ2A~zj#^x^G|?-Ofi#F0hU$vMNnH5^sq(TV`KVcJ#VmlflZ|DAeUeo=A3 zoQJwTIULyXaJ4vDv3yEg{8u0@BGsZV_PU<)-!T2jR`Y>v`!N3O=a95R{W$^coy9^_ z&K*pw{)aXn2NIRwuZb!#eU)G}_^YC7uvSc7HC4oU1!AUPqD!Ha;JO-7rC1DQ_-jRU XIlSeA3om*_(@s|mdTURy{u1kd!X#{i delta 4343 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 diff --git a/src/Server/Console/bin/Debug/net8.0/Console.pdb b/src/Server/Console/bin/Debug/net8.0/Console.pdb index b4ce5246890a0c0af723930f6aac4c4be214dbf4..74b6ef266c391bcbdf957cfade23355dc1404207 100755 GIT binary patch delta 2116 zcmah~dr(wm6hG&?ckeE{%Zdr|P;q$^0{dWLK~@DJA0Ul@s8|Wet{|aKK`7$73vBo( zpErCU8D(RZwqj&&5_*i`BVSFWqe%@@SdRYTSeBrjOW16VGwsapobx;9cg}bB?)QD` zTy=8Q7Sod!0U&G*fUg{&A1KbRes;;SvMLH;fO5Q)E64{>0JKT*^n#h0k-H&3|Fpng@i()fj6xE}K z``6Mk_qnvDZS(M}Jcm@GFgblQpqv+>ArIZMupyg-95k^s z2YS)C3`!l9&81W!S4`4ILoq6$#ZW_;O5RDC0Ye+vB4Za>7g;5&HTDkm0+SZdGHFg4 z#i0plObICo#T0iZILYcwZDd`>Hpb&L8RoiBlRF}t>R(b0H z1#kb*$T;VX`fJ)5k6Qa$WqtBl6PNBfb|n2o)r;eDU%q|x+U5os^?koTPlUi4@>_B&Wuow@ej zV9BfXxu-aQxASwdIfGBdyNGPO0%{U_k8-nxh|{lbi6AgEjpv?W?W$N z?XYX>OxIr;%z3Z-nUBh@uP^i7A&Y%FWBw`4<9Ag*f7aaH+*b5|efajl=y@7|Xi@Xp9huU)OSbX#_-FHg31h6gpxOxkpA&6H#5%g-#hRe0d! zzUrwX=C$&BeC{p(rRBrb-`^X53Z}%}i1iQrWXa^J~uP;fmB^gpu%*nRJ*5pL;i6zEGhD7}$tJzSRkg(WhGMYO2HFeRW7NXmRZYR1o zpnE&I_o4fJvBqpx_M!VGx(D%)Mtt8~KK3CpJhT)K)saR_OG@ibPjFa~@#zKCIyy&|^M-Y&H$W67jFpqM(uVI?%Z`9=RB%qdxkHOz z(m-}2!q41mFW;sl!t%CIq9`8>H8l|erw9do=(!XHb14Gp=w&Pd zdKLviYyvTC3Ro~YkOf)=8{!l=FmS-E;6SR91Nn$51f}AF9U=%(j}WQ3kfr9qX2cEz zOTz;L;-rQTKO^`!PngAw^`D0e?o0u=Ak%WeAE7~nAi@z*!!@SPgV^Di2MJmpEJmbT zSX4GKi9ia3QNSw*d-#`MuyPNqJ7HX62kXZ$X7moI z_qFO>QRHB?JhPxvlgL2ZVZ%ow_q5^Tk;`m&405>*XI|)S!`s5&)4_DMc3E+`hit!xHRJ2Dl2DC+L1Lk`)1r+m^ zYRuqNm}gr2_(@ZOl9P=VciwB1)cLDAucoH%8;z9}4ZevN>*M#f4IaDSOMgAI#k;$C z&JKF3T}!BN?y5I)GG?c&4ou4y<6hv3M|n;ND7aVnsr2b!RP7i^Qv2JI#8#KOZkO*@ zYbC|MHuYrtSf*_`b>|s9OW;m!(aQxM^l5>PCol3VQWXW!9ATF=er&lY6cN*Kp+qX} zFCN$+7;!u7JD{$D5ncu#!pA30zUHlI_!wTcNSpbLQXV2`IYTt5ezG$+~ z`I^JBBMBw0b$RwDoF|uU`Z0aGzcDu>%>U_=l?MX?X4o}aYV$P@GjIN8bbJ*1Mz~{} zIOI^jEc*OXpVk#edUiVLx7C^U7)rTEHyXs!#E+-(!@0 za~x)w%YJ`Qb9#c8v)s7GMSj^Sug7<7<>ZJC*%w9cpME~SIae_*_j%-($745#cFvHj z+Px@dQ1{KmofD&lmG_-GqI(>%avE(i9kx9gyM$8+Dxr~@Ah`ENCKc`Fddck#Ken8C6NWF+YsbA{$ z5*evqPU_d8hK>$;NA^-dKWPyEBO?ti^pl`A&zCAiwld45;Dto)WhaSZj;=&V-aih*^Y?!a=Gif+|d) zV(>yBYI=UiI6IjrU&NZuhCtdBGR`@V6n@Ld3Jw9b6=%iatwG}H(n-mS?D5Qzb%BKC zODWVq`1u?z0k6N#EDyZ-5)WejpT#)gokZ+#_Mw#DD6pq+!i37_3hALqim_ZFux76J Uz-2(P(`d%|y0|dT&(#(F1Q;Ia%K!iX diff --git a/src/Web/src/components/mapCanvas.jsx b/src/Web/src/components/mapCanvas.jsx index add36e6..25102b1 100644 --- a/src/Web/src/components/mapCanvas.jsx +++ b/src/Web/src/components/mapCanvas.jsx @@ -33,28 +33,10 @@ export default class MapCanvas extends React.Component { this.draw(); } - async getLinePoints() { + async getLinePoints(endpoint = '') { try { const { searchOption, inputValue } = this.state; - const url = `${API_ENDPOINT}/database?${searchOption}=${inputValue}`; - const data = await (await fetch(url)).json(); - - // Combine all found sets into a singular array. - const map = []; - if (!Array.isArray(data) || data.length < 1) return map; - data.forEach((set) => set.Objects.forEach((coord) => map.push(coord))); - - return map; - } catch (ex) { - return; - // this.props.onError(ex); - } - } - - async getRoutePoints() { - try { - const { searchOption, inputValue } = this.state; - const url = `${API_ENDPOINT}/database/route?id=${inputValue}`; + const url = `${API_ENDPOINT}/database/${endpoint}?${searchOption}=${inputValue}`; const data = await (await fetch(url)).json(); // Combine all found sets into a singular array. @@ -74,7 +56,8 @@ export default class MapCanvas extends React.Component { const ctx = this.canvasRef.current.getContext('2d'); // Get the points to draw from the server const points = await this.getLinePoints(); - const route = await this.getRoutePoints(); + const route = await this.getLinePoints("path"); + // const route = await this.getRoutePoints(); // Set the font for the text we will draw on the canvas ctx.font = "24px Comic Sans MS";