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 747bf13..0000000 Binary files a/SoilMoistureAPI/Data/SoilMoisture.db and /dev/null differ diff --git a/SoilMoistureAPI/Program.cs b/SoilMoistureAPI/Program.cs index 378a3eb..33238fe 100644 --- a/SoilMoistureAPI/Program.cs +++ b/SoilMoistureAPI/Program.cs @@ -25,7 +25,7 @@ builder.Services.AddCors(options => 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 0de02ec..8a269ff 100644 Binary files a/SoilMoistureAPI/SoilMoisture.db and b/SoilMoistureAPI/SoilMoisture.db differ diff --git a/SoilMoistureAPI/SoilMoisture.db-shm b/SoilMoistureAPI/SoilMoisture.db-shm index 8a106cc..0f80a8f 100644 Binary files a/SoilMoistureAPI/SoilMoisture.db-shm and b/SoilMoistureAPI/SoilMoisture.db-shm differ diff --git a/SoilMoistureAPI/SoilMoisture.db-wal b/SoilMoistureAPI/SoilMoisture.db-wal index 11b42ca..d97914d 100644 Binary files a/SoilMoistureAPI/SoilMoisture.db-wal and b/SoilMoistureAPI/SoilMoisture.db-wal differ diff --git a/plant-browser/src/app/dialogs/update-nickname-dialog/update-nickname-dialog.component.ts b/plant-browser/src/app/dialogs/update-nickname-dialog/update-nickname-dialog.component.ts index ae87875..5d7b018 100644 --- a/plant-browser/src/app/dialogs/update-nickname-dialog/update-nickname-dialog.component.ts +++ b/plant-browser/src/app/dialogs/update-nickname-dialog/update-nickname-dialog.component.ts @@ -9,7 +9,6 @@ import { MatButtonModule } from '@angular/material/button'; import { MatDialogModule } from '@angular/material/dialog'; export interface UpdateNicknameData { - name: string; nickname?: string; } diff --git a/plant-browser/src/app/models/device-dto.model.ts b/plant-browser/src/app/models/device-dto.model.ts new file mode 100644 index 0000000..371cd3e --- /dev/null +++ b/plant-browser/src/app/models/device-dto.model.ts @@ -0,0 +1,5 @@ +export interface deviceDto { + id: number; + deviceId: string; + nickname: string; +} \ No newline at end of file diff --git a/plant-browser/src/app/models/soil-data.model.ts b/plant-browser/src/app/models/soil-data.model.ts index 86108bb..91c0f7d 100644 --- a/plant-browser/src/app/models/soil-data.model.ts +++ b/plant-browser/src/app/models/soil-data.model.ts @@ -1,6 +1,7 @@ export interface SoilData { - timestamp: Date; - moisture: number; - name: string; - nickname: string; - } \ No newline at end of file + id: number; + timestamp: Date; + moistureLevel: number; + deviceId: string; + nickname: string; +} \ No newline at end of file diff --git a/plant-browser/src/app/plant-list/plant-list.component.html b/plant-browser/src/app/plant-list/plant-list.component.html index bd73b2c..95cd17a 100644 --- a/plant-browser/src/app/plant-list/plant-list.component.html +++ b/plant-browser/src/app/plant-list/plant-list.component.html @@ -1,10 +1,10 @@
-
-
-
-

{{ 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 };