From b30eed98d24bbffe208da05ab395aabfb5d257b5 Mon Sep 17 00:00:00 2001 From: programmingPug <36635276+programmingPug@users.noreply.github.com> Date: Fri, 17 Jan 2025 17:27:59 -0500 Subject: [PATCH] Update client for api changes and nickname attr --- .../Controllers/DeviceController.cs | 10 +++---- SoilMoistureAPI/Data/SoilMoisture.db | Bin 36864 -> 0 bytes SoilMoistureAPI/Program.cs | 2 +- SoilMoistureAPI/SoilMoisture.db | Bin 4096 -> 40960 bytes SoilMoistureAPI/SoilMoisture.db-shm | Bin 32768 -> 32768 bytes SoilMoistureAPI/SoilMoisture.db-wal | Bin 57712 -> 57712 bytes .../update-nickname-dialog.component.ts | 1 - .../src/app/models/device-dto.model.ts | 5 ++++ .../src/app/models/soil-data.model.ts | 11 ++++---- .../app/plant-list/plant-list.component.html | 12 ++++----- .../app/plant-list/plant-list.component.ts | 25 +++++++++--------- .../src/app/services/soil-data.service.ts | 7 ++--- plant-browser/src/environments/environment.ts | 3 ++- 13 files changed, 42 insertions(+), 34 deletions(-) delete mode 100644 SoilMoistureAPI/Data/SoilMoisture.db create mode 100644 plant-browser/src/app/models/device-dto.model.ts diff --git a/SoilMoistureAPI/Controllers/DeviceController.cs b/SoilMoistureAPI/Controllers/DeviceController.cs index 27d6543..62c1b87 100644 --- a/SoilMoistureAPI/Controllers/DeviceController.cs +++ b/SoilMoistureAPI/Controllers/DeviceController.cs @@ -56,9 +56,9 @@ namespace SoilMoistureAPI.Controllers // PUT: api/Device/{id}/nickname [HttpPut("{id}/nickname")] - public async Task UpdateNickname(string id, [FromBody] string newNickname) + public async Task UpdateNickname(int id, [FromBody] DeviceDto deviceUpdate) { - if (string.IsNullOrEmpty(newNickname)) + if (string.IsNullOrEmpty(deviceUpdate.Nickname)) { return BadRequest("Nickname cannot be empty."); } @@ -69,7 +69,7 @@ namespace SoilMoistureAPI.Controllers return NotFound("Device not found."); } - device.Nickname = newNickname; + device.Nickname = deviceUpdate.Nickname; _context.Entry(device).State = EntityState.Modified; try @@ -106,9 +106,9 @@ namespace SoilMoistureAPI.Controllers return NoContent(); // 204 No Content } - private bool DeviceExists(string id) + private bool DeviceExists(int id) { - return _context.SoilMoisturesFlat.Any(e => e.DeviceId == id); + return _context.SoilMoisturesFlat.Any(e => e.Id == id); } } } diff --git a/SoilMoistureAPI/Data/SoilMoisture.db b/SoilMoistureAPI/Data/SoilMoisture.db deleted file mode 100644 index 747bf13ef8193b88bfda0749fc66eba5907dd286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36864 zcmeI(Z%ZRb9KiA2cqW=7=M@V3KuU+D;06D%tF~#R(57*`F2;>b)009ILKmY**5cq!ueqPEMpReh|4}#vg|D$u-YW9QfQ9lTytAQW3_Wd_O z$9K+Cwae9ptaws5?!G(~=G;c6sJp^UH8sTxa~#tw9_O;g`nrA=wZHB9;bm9-BHjx9 z%PYUvnZ8^~`t&Ma)})xa_eHOL;cuvx#p}1(oUyj1|F$!Vnd&=rkxRw9GswJ9#dOY1 zm82(M%7$?3o^VfUHBqg*O|MZ=^};+pOnaH)xZxaC8fW5Ao{7qdS9e_1(UEk$jhm2@ z8XpSc3;+{S_aihvs&4g`Qq^XCplwvRUiI3!oNv1Ob&}_ z@T67+z1L-0d(!Ndb7JQPo!9X?m~zP%Hy5);WmVTkD?C{_?W?Fix}KoeN$BkGB$G2r zCH>kNWzlNMgQMX4K|2ciz3?mbVDtw+&8%EVXE^hoNxqYi@fu4lh3S;%#JLM_Jm{Za zb)r}PAXG!0ikdGv3t8iv(maNly|nC^)$ty9DgH4vtmrwzw)N}H8C11?=XJVyT$8yE zDZW7o72f^nyW2tP5!^^Z&3kAH`C=hXKJ5I_I{1Q0*~0R#|0 z0D*T9h~NK@|NozY00IagfB*srAb#jr2q1s}0tg_000Iag zfB*tx0rvl6362OLfB*srAb options.AddPolicy("AllowClient", builder => { - //builder.WithOrigins("http://localhost:3000", "http://soilmoisture_client:80") + //builder.WithOrigins("http://localhost:3000", "http://localhost:4200", "http://soilmoisture_client:80") builder.AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod(); diff --git a/SoilMoistureAPI/SoilMoisture.db b/SoilMoistureAPI/SoilMoisture.db index 0de02ecf623141161c863ee065d9f7dd83cbe849..8a269ff0fe62ae3ae7277de773109bee93186215 100644 GIT binary patch literal 40960 zcmeI*U2oe|7zc2_tVxq8^Cq$ z+3{@hX}5RO^oYvbWjKy`NC?9)JblFJV>CtR%&pNI`pRCIpEb)f>8HmDAd^R^YvIXnaQx<#k}SxZM)WW+Lf;3 zdM7>G-D)?ziGp~sY8rKu)Q$JcCJ`r=i{wEfPUs|-4ngFS}O01navG&SkQrxj> z^{PS3iMYGnm{NVWTB;b;1F~%%5M!^tQ?lqMR!pnDHf(p(K6P5Q-+JBLr_BzV9xWbi ze%U^?+ajS`Tb@{_?i|^!*F5@iMjMvXdfaIq*<*_n@zmGz(d2t8?Ad*%b7+56+7Cz2 z7;Rf9uGo;QWNn)J)MZvBk?dGwqEu5HwJD}{qmkt5DtpjRm3!Q#zlb+n`}oA}wCu6B z^Px12Eqvg|wnl5F&Ywo2$(0rMdv!AXp%|i}_QGkW8~GnIE|S^V9yA#QKbGvl(o1ta zSY>9a`-?Aj$E~sMI83G+Bvm9^J5{sv$m;jai;1DVY|E^gR?)1HVZPjO>ipDhnq`yj zIYpyZG&aq6>TKawG`Y0Io_*WLAB5@-U*^K#!_t6yhRgW=6;!+6yf%QD(Z}Pd^|?sW zSYnxe4x0u$5SOflKeP7i(%@gG~}tp{up@P zKTMw)Y&0p$?D_f>s&cpWI9%N?;Vwh+SD-?#alD=UfY2^DI)={LY3Knk;RkY;VT9lP z8B7p>00bZa0SG_<0uX=z1Rwwb2wX3L<#$+~sVI`7txNK{oF|H`t65zsq_bKsC+Air zNtYyl{LcwLFv4&22@?b$009U<00Izz00bZa0SG_<0#`<0nd8l*Kd_f%Ijbnyf}CrV zI*#Ww+r^&U^z1@fN=wUZu$EMi^HNqROj*mn!JiX;WQ0HH6D9~i00Izz00bZa0SG_< z0uX=z1g@e0;Z63kGXdONycrv;F#ROJ;QIe_fBgUaDh7ycf&c^{009U<00Izz00bZa z0SG`~B=82uXBM@rt}41jpH+I7zpmPw%~ShLme0H$TGG-ta{hOL)a;Ji?G3K~zhHzH z!r!CT@CpG4KmY;|fB*y_009U<00Izzz%>w98yEL7^B2^d`ef5r$u z3D2%UWY|OqKmY;|fB*y_009U<00Izzz>N}+xj81o8lmyJKZ;KUU+9-33ccE&*HtZ@ z%@#DRpt7_IR}5A0hxqdkgF0Cv7j#Y2Wi72p>PAl02IK#ijPQ@}@Vxv7bBZFR5Auo`}Ah20bU>ZLFeFp}i diff --git a/SoilMoistureAPI/SoilMoisture.db-shm b/SoilMoistureAPI/SoilMoisture.db-shm index 8a106cc33f002a63c6aae502f602d114eea21285..0f80a8f9745b1af1febe7b0132380dc427771405 100644 GIT binary patch delta 170 zcmZo@U}|V!njj*>#lXPuw{fk}KF9c?!+hIWet+mrHjL>^GMf8z9|7r!2^ywMK<&sF zWE?Vv$-%_H{EY`~oi<)zV&-N9>SbnNVc=xo+RW(olWF6HHzM4u3~UVS3>*yH3_KeT Haw-7;fwCwW delta 181 zcmZo@U}|V!njj*>#=yX^%x{qySIep&&R-d`%Bo&1ahBr@Tl1Z{j)3&U1PxP0pmruG z2Cex3P{K>@01k}aDz{|k5@!(e`W>yA{jR$`- XF|#pnf@nsrjR*fSF>-G_$gKwe%YQ3N diff --git a/SoilMoistureAPI/SoilMoisture.db-wal b/SoilMoistureAPI/SoilMoisture.db-wal index 11b42ca02d4917384d7dc38777e4a053b992622f..d97914dbec644fe8c45555c54163a9205a004d23 100644 GIT binary patch literal 57712 zcmeI*J!lj`7{>9rL?a&PC52x_AjBgUa+}%Nuk3=tsfBo8Y$M_aAwg6W6%Q;zFcyj; zqK$%JB)eSPZUQaf#J%|K+aP>Yd+A_3-XH!Enon z$h}!FM60MiW2^5koBMLPfAV(Q#B5uos9!bdfBMh+!sC4B3;%p+m42DZObPwtK>z^+ z5I_I{1Q0*~0R#|000H9!vKu>7&7z>B@^aG7*+GX=k+dV_SjzF0yIIOeO1-Q^F7WpG z$14~5=k`}~fohaME@0foQ!oMuAby9Ijx=@xJ!$Fcm-^Iboz-7m1~;mYFhz0veS zzW}*_d0S7#2q1s}0tg_000IagfB*srh`Muuw8mPPFK}k)>yN!xGhK1NKv`tUP$GZ; z0tg_000IagfB*srAb@}&0^O+=(Vp7A?y!o^I?<6J|98WH9oa#oJj?3|RF7ltI8+=^ zdR>WJ;L+>5*FLAIa@k*e1d)f zR94Q14KmY**5I_I{ z1Q0*~0R+qxs4;iY_9NG`qzpq(+O_W^cs2iY#j}&mpQ^clXcgR3Xy)cqH3A4AfB*sr zAbhP#!gP3$RmJH<*ujIpH_h86P3$^POY{Aa zmc0LdeSe>XLY_X)Q|)E%k`(yq0ZF=7vd7ThuICm`{qn)SYd4R+^Vz{UvCCDt|CO18 zZ+*V6$2)O2Zd!)?OujIavE;qtYPVb3FU#Uwclpb{%pUgjEv09x-%9gUY}b40mV&3| zI>ZrI*CUd6Fc3fh0R#|0009ILKmY**5NJ4o#i*;zr>d@{fR#C!Gty~&WYm1Nkg?4C zY%!kCPS@^n4~^^5lrE>D2jaTyuRXyp_jI(&V)$cIemRy%>5u8-aw3_M6G!54c_^8f zNR3Cue%U{EC|&RRvGLewbbL}iq)+ZHPn9xfjG~p9dEPIl^kZVG@^l^Ty99dabG{QV zIQiAZ#CPX@e$W2QUJfNR-0Q*(BY*$`2q1s}0tg_000IagfWW2&s^S9OmtQ;nd%}Eo z^>6vhQrGgP=ix*I5I_I{1Q0*~0R#|0009ILxN8JIQX+^?(%;WW)&|H!^J7v63oXd&o z`E+L9%9pm+CFDCRRqL+R{tSGN{U+HWbp#%JElwT5)o)+_<81f-r>G;aRTu~$fB*sr zAbHj-Yk>8|6BJ?LUa83ZM@msm@n`swc=kkgScsY6`m5e3CPaM?~DW`Y* zu(4ofjhX~|=dg48abv;A`DM}FKEBpo-Z|&L+Rr=36J~bWCaO)gr;ecXzXY1Nj^NdS zM|Uiqzj2nngH8U+nB^mY00IagfB*srAba5g;kTl&NmyNe7G<^pf^aba(5kLR|1Q0*~0R#|0009IL zxHAE}SAf@v3mksw&udp!E?*}uaA$~|jQ|1&Ab5)ZedZTCXCu?EV5(ae*Jt9KSGq -
-
-
-

{{ plant.moisture }}

+
+
+
+

{{ plant.moistureLevel }}%

+
+

{{ plant.nickname }}

-

{{ plant.nickname }}

-
\ No newline at end of file diff --git a/plant-browser/src/app/plant-list/plant-list.component.ts b/plant-browser/src/app/plant-list/plant-list.component.ts index a15302c..8d14d5f 100644 --- a/plant-browser/src/app/plant-list/plant-list.component.ts +++ b/plant-browser/src/app/plant-list/plant-list.component.ts @@ -1,6 +1,7 @@ import { CommonModule } from '@angular/common'; import { Component } from '@angular/core'; import { SoilData } from '../models/soil-data.model'; +import { deviceDto } from '../models/device-dto.model'; import { SoilDataService } from '../services/soil-data.service'; import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; import { MatDialog } from '@angular/material/dialog'; @@ -10,7 +11,7 @@ import { UpdateNicknameDialogComponent, UpdateNicknameData } from '../dialogs/up selector: 'app-plant-list', templateUrl: './plant-list.component.html', styleUrls: ['./plant-list.component.scss'], - imports:[ + imports: [ CommonModule ] }) @@ -23,7 +24,7 @@ export class PlantListComponent { constructor( private plantService: SoilDataService, private dialog: MatDialog, - ) {} + ) { } ngOnInit(): void { this.fetchPlants(); @@ -45,25 +46,25 @@ export class PlantListComponent { openUpdateDialog(device: SoilData): void { const dialogRef = this.dialog.open(UpdateNicknameDialogComponent, { width: '300px', - data: { name: device.name, nickname: device.nickname } + data: { nickname: device.nickname } }); dialogRef.afterClosed().subscribe(result => { if (result) { - this.updateNickname(device.name, result.nickname); + let deviceDto: deviceDto = { + id: device.id, + deviceId: device.deviceId, + nickname: result.nickname + }; + this.updateNickname(deviceDto); } }); } - updateNickname(name: string, nickname: string): void { - this.plantService.updateNickname(name, nickname).subscribe( + updateNickname(deviceDto: deviceDto): void { + this.plantService.updateNickname(deviceDto).subscribe( (response: any) => { - console.log(response.message); - // Update the local device list - const device = this.plants.find(d => d.name === name); - if (device) { - device.nickname = nickname; - } + this.fetchPlants(); }, (error: any) => { console.error('Error updating nickname:', error); diff --git a/plant-browser/src/app/services/soil-data.service.ts b/plant-browser/src/app/services/soil-data.service.ts index de2dfe0..107f300 100644 --- a/plant-browser/src/app/services/soil-data.service.ts +++ b/plant-browser/src/app/services/soil-data.service.ts @@ -3,6 +3,7 @@ import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { SoilData } from '../models/soil-data.model'; import { environment } from '../../environments/environment'; +import { deviceDto } from '../models/device-dto.model'; @Injectable({ providedIn: 'root' @@ -17,9 +18,9 @@ export class SoilDataService { } // Update device nickname - updateNickname(name: string, nickname: string): Observable { - const url = `${this.baseUrl}/Device/${encodeURIComponent(name)}/nickname`; - return this.http.put(url, { nickname: nickname }); + updateNickname(deviceDto: deviceDto): Observable { + const url = `${this.baseUrl}/Device/${deviceDto.id}/nickname`; + return this.http.put(url, deviceDto); } } diff --git a/plant-browser/src/environments/environment.ts b/plant-browser/src/environments/environment.ts index 97f45ea..cd7f0c4 100644 --- a/plant-browser/src/environments/environment.ts +++ b/plant-browser/src/environments/environment.ts @@ -1,4 +1,5 @@ export const environment = { production: false, - apiUrl: 'http://localhost:8000/api' // For development + //apiUrl: 'http://localhost:8000/api' // For development + apiUrl: 'http://192.168.1.193:8000/api' // For development };