diff --git a/amp-laravel/app/Http/Controllers/Admin/AdminFunctionsController.php b/amp-laravel/app/Http/Controllers/Admin/AdminController.php similarity index 75% rename from amp-laravel/app/Http/Controllers/Admin/AdminFunctionsController.php rename to amp-laravel/app/Http/Controllers/Admin/AdminController.php index dae4bb56..2b92303c 100644 --- a/amp-laravel/app/Http/Controllers/Admin/AdminFunctionsController.php +++ b/amp-laravel/app/Http/Controllers/Admin/AdminController.php @@ -2,23 +2,20 @@ namespace App\Http\Controllers\Admin; -use Illuminate\Http\Request; use App\Http\Controllers\Controller; +use App\Services\Admin\ProviderService; +use App\Services\Admin\ContactFormService; +use App\Services\Admin\EditProfileService; use App\Http\Requests\Admin\EditProfileRequest; use App\Http\Requests\Admin\EditProviderRequest; -use App\Services\Admin\editProfileService; -use App\Services\Admin\getAllProvidersService; -use App\Services\Admin\DeleteContactMessageService; -use App\Services\Admin\getAllContactMessagesService; -use App\Services\Admin\AdminEditProviderProfileService; use Illuminate\Database\Eloquent\ModelNotFoundException; -class AdminFunctionsController extends Controller +class AdminController extends Controller { public function getProviders() { try { - $providers = getAllProvidersService::getAll(); + $providers = ProviderService::getAll(); return $this->messageResponse(true, "Providers retrieved successfully", 200, $providers); } catch (\Exception $e) { @@ -26,21 +23,10 @@ public function getProviders() } } - public function getContactMessages() - { - try { - $messages = getAllContactMessagesService::getAll(); - - return $this->messageResponse(true, "Messages retrieved successfully", 200, $messages); - } catch (\Exception $e) { - return $this->errorMessageResponse(false, $e->getMessage(), "Failed to retrieve messages", 500); - } - } - public function editProvider(EditProviderRequest $request, $id) { try { - AdminEditProviderProfileService::editProfile($id, $request->validated()); + ProviderService::editProfile($id, $request->validated()); return $this->messageResponse(true, "Profile updated successfully", 200); } catch (\Exception $e) { @@ -48,22 +34,21 @@ public function editProvider(EditProviderRequest $request, $id) } } - - public function editProfile(EditProfileRequest $request) + public function getContactMessages() { try { - editProfileService::editProfile($request->validated()); + $messages = ContactFormService::getAll(); - return $this->messageResponse(true, "Profile updated successfully", 200); + return $this->messageResponse(true, "Messages retrieved successfully", 200, $messages); } catch (\Exception $e) { - return $this->errorMessageResponse(false, $e->getMessage(), "Failed to update profile", 500); + return $this->errorMessageResponse(false, $e->getMessage(), "Failed to retrieve messages", 500); } } public function deleteMessage($id) { try { - DeleteContactMessageService::delete($id); + ContactFormService::delete($id); return $this->messageResponse(true, "Message deleted successfully", 200); } catch (ModelNotFoundException $e) { @@ -72,4 +57,15 @@ public function deleteMessage($id) return $this->errorMessageResponse(false, $e->getMessage(), "Failed to delete message", 500); } } + + public function editProfile(EditProfileRequest $request) + { + try { + EditProfileService::editProfile($request->validated()); + + return $this->messageResponse(true, "Profile updated successfully", 200); + } catch (\Exception $e) { + return $this->errorMessageResponse(false, $e->getMessage(), "Failed to update profile", 500); + } + } } diff --git a/amp-laravel/app/Http/Controllers/Clients/ClientFunctionsController.php b/amp-laravel/app/Http/Controllers/Client/ClientController.php similarity index 72% rename from amp-laravel/app/Http/Controllers/Clients/ClientFunctionsController.php rename to amp-laravel/app/Http/Controllers/Client/ClientController.php index ce087c84..d9294df3 100644 --- a/amp-laravel/app/Http/Controllers/Clients/ClientFunctionsController.php +++ b/amp-laravel/app/Http/Controllers/Client/ClientController.php @@ -1,14 +1,12 @@ messageResponse(false, "Route ID not provided", 400, null); } - $report = GeneratingReportService::generateReport($id); + $report = ClientService::generateReport($id); return $this->messageResponse(true, "Report Generated", 200, $report); } catch (\Exception $e) { return $this->errorMessageResponse(false, "Failed to generate report ", $e->getMessage(), 500); @@ -28,7 +26,7 @@ public function generateReport($id) public function editProfile(EditProfileRequest $request) { try { - ClientEditProfileService::editProfile($request->validated()); + ClientService::editProfile($request->validated()); return $this->messageResponse(true, "Profile updated successfully", 200); } catch (\Exception $e) { @@ -39,7 +37,7 @@ public function editProfile(EditProfileRequest $request) public function getDashboardData($id) { try { - $dashboardData = ClientDashboardService::getDashboardData($id); + $dashboardData = ClientService::getDashboardData($id); return $this->messageResponse(true, "Dashboard data fetched successfully", 200, $dashboardData); } catch (\Exception $e) { return $this->errorMessageResponse(false, "Failed to fetch dashboard data", $e->getMessage(), 500); diff --git a/amp-laravel/app/Http/Controllers/Common/ClientCheckinController.php b/amp-laravel/app/Http/Controllers/Common/ClientCheckinController.php deleted file mode 100644 index 57a8ffc0..00000000 --- a/amp-laravel/app/Http/Controllers/Common/ClientCheckinController.php +++ /dev/null @@ -1,27 +0,0 @@ -validated()); - - return $this->messageResponse(true, "Slave Checkin Successful", 200, $slave); - } catch (InvalidArgumentException $e) { - return $this->errorMessageResponse(false, 'Invalid Input', $e->getMessage(), 422); - } catch (Throwable $e) { - return $this->errorMessageResponse(false, "Slave checkin failed", $e->getMessage(), 500); - } catch (\Exception $e) { - return $this->errorMessageResponse(false, 'Unexpected error', $e->getMessage(), 500); - } - } -} diff --git a/amp-laravel/app/Http/Controllers/Common/IotController.php b/amp-laravel/app/Http/Controllers/Common/IotController.php new file mode 100644 index 00000000..9fbdf71b --- /dev/null +++ b/amp-laravel/app/Http/Controllers/Common/IotController.php @@ -0,0 +1,67 @@ +validated()); + return $this->messageResponse(true, "Master checked in successfully", 200, $data); + } catch (Throwable $e) { + return $this->errorMessageResponse(false, "Master checkin failed", $e->getMessage(), 500); + } + } + + // Slave Check In + public function slaveCheckin(ClientRequestCheckin $request) + { + try { + $slave = IotService::slaveCheckin($request->validated()); + + return $this->messageResponse(true, "Slave Checkin Successful", 200, $slave); + } catch (InvalidArgumentException $e) { + return $this->errorMessageResponse(false, 'Invalid Input', $e->getMessage(), 422); + } catch (Throwable $e) { + return $this->errorMessageResponse(false, "Slave checkin failed", $e->getMessage(), 500); + } catch (\Exception $e) { + return $this->errorMessageResponse(false, 'Unexpected error', $e->getMessage(), 500); + } + } + + // Slave Metrics + public function slaveMetrics(ClientRequestMetric $request) + { + try { + $metric = IotService::addMetrics($request->validated()); + return $this->messageResponse(true, "Slave metric stored", 200, $metric); + } catch (InvalidArgumentException $e) { + return $this->errorMessageResponse(false, 'Invalid Input', $e->getMessage(), 422); + } catch (Throwable $e) { + return $this->errorMessageResponse(false, "Metric save failed", $e->getMessage(), 500); + } + } + + // Master Lines + public function masterLines(ProviderRequestLine $request) + { + try { + $line = IotService::addLines($request->validated()); + return $this->messageResponse(true, "Master lines data saved", 200, $line); + } catch (Throwable $e) { + return $this->errorMessageResponse(false, "Failed to save master lines", $e->getMessage(), 500); + } + } +} diff --git a/amp-laravel/app/Http/Controllers/Common/LinesController.php b/amp-laravel/app/Http/Controllers/Common/LinesController.php deleted file mode 100644 index a8f079c4..00000000 --- a/amp-laravel/app/Http/Controllers/Common/LinesController.php +++ /dev/null @@ -1,21 +0,0 @@ -validated()); - return $this->messageResponse(true, "Master lines data saved", 200, $line); - } catch (Throwable $e) { - return $this->errorMessageResponse(false, "Failed to save master lines", $e->getMessage(), 500); - } - } -} diff --git a/amp-laravel/app/Http/Controllers/Common/MetricsController.php b/amp-laravel/app/Http/Controllers/Common/MetricsController.php deleted file mode 100644 index 7d78e351..00000000 --- a/amp-laravel/app/Http/Controllers/Common/MetricsController.php +++ /dev/null @@ -1,24 +0,0 @@ -validated()); - return $this->messageResponse(true, "Slave metric stored", 200, $metric); - } catch (InvalidArgumentException $e) { - return $this->errorMessageResponse(false, 'Invalid Input', $e->getMessage(), 422); - } catch (Throwable $e) { - return $this->errorMessageResponse(false, "Metric save failed", $e->getMessage(), 500); - } - } -} diff --git a/amp-laravel/app/Http/Controllers/Common/ProviderCheckinController.php b/amp-laravel/app/Http/Controllers/Common/ProviderCheckinController.php deleted file mode 100644 index 28536deb..00000000 --- a/amp-laravel/app/Http/Controllers/Common/ProviderCheckinController.php +++ /dev/null @@ -1,21 +0,0 @@ -validated()); - return $this->messageResponse(true, "Master checked in successfully", 200, $data); - } catch (Throwable $e) { - return $this->errorMessageResponse(false, "Master checkin failed", $e->getMessage(), 500); - } - } -} diff --git a/amp-laravel/app/Http/Controllers/Provider/ProviderFunctionsController.php b/amp-laravel/app/Http/Controllers/Provider/ProviderController.php similarity index 75% rename from amp-laravel/app/Http/Controllers/Provider/ProviderFunctionsController.php rename to amp-laravel/app/Http/Controllers/Provider/ProviderController.php index 34ac5c7b..27069100 100644 --- a/amp-laravel/app/Http/Controllers/Provider/ProviderFunctionsController.php +++ b/amp-laravel/app/Http/Controllers/Provider/ProviderController.php @@ -3,22 +3,15 @@ namespace App\Http\Controllers\Provider; use App\Http\Controllers\Controller; -use App\Services\Provider\GetAllLinesService; -use App\Http\Requests\Provider\EditUserRequest; -use App\Services\Provider\EditClientUserService; -use App\Services\Provider\GetOverviewDataService; -use App\Services\Provider\GetMetricSummaryService; +use App\Http\Requests\Provider\EditUserRequest; // +use App\Http\Requests\Provider\EditProfileRequest; // + +use App\Services\Provider\EditClientUserService; // +use App\Services\Provider\ProviderEditProfileService; // +use App\Services\Provider\DashboardService; // use App\Services\Provider\GeneratingReportService; -use App\Http\Requests\Provider\EditProfileRequest; -use App\Services\Provider\GetAllClientUsersService; -use App\Services\Provider\GetAverageVoltageService; -use App\Services\Provider\GetTotalPowerUsageService; -use App\Services\Provider\ProviderEditProfileService; -use App\Services\Provider\GetAllClientMetricsService; -use App\Services\Provider\GetPowerUsageByClientService; -use App\Services\Provider\GetVoltageDistributionService; - -class ProviderFunctionsController extends Controller + +class ProviderController extends Controller { public function generateReport() { @@ -55,7 +48,7 @@ public function editUser(EditUserRequest $request, $id) public function getUsers($id) { try { - $users = GetAllClientUsersService::getAll($id); + $users = DashboardService::getAllClients($id); return $this->messageResponse(true, "Users retrieved successfully", 200, $users); } catch (\Exception $e) { @@ -66,7 +59,7 @@ public function getUsers($id) public function getMetrics($id) { try { - $metrics = GetAllClientMetricsService::getAll($id); + $metrics = DashboardService::getAllMetrics($id); return $this->messageResponse(true, "Metrics retrieved successfully", 200, $metrics); } catch (\Exception $e) { @@ -77,7 +70,7 @@ public function getMetrics($id) public function getLines($id) { try { - $lines = GetAllLinesService::getAll($id); + $lines = DashboardService::getAllLines($id); return $this->messageResponse(true, "Lines retrieved successfully", 200, $lines); } catch (\Exception $e) { @@ -88,7 +81,7 @@ public function getLines($id) public function getOverviewData($id) { try { - $overviewData = GetOverviewDataService::getOverviewData($id); + $overviewData = DashboardService::getOverviewData($id); return $this->messageResponse(true, "Overview data retrieved successfully", 200, $overviewData); } catch (\Exception $e) { return $this->errorMessageResponse(false, $e->getMessage(), "Failed to retrieve overview data", 500); @@ -98,7 +91,7 @@ public function getOverviewData($id) public function getTotalPowerUsage($id) { try { - $totalPower = GetTotalPowerUsageService::getTotalPowerUsage($id); + $totalPower = DashboardService::getTotalPowerUsage($id); return $this->messageResponse(true, "Total power usage retrieved successfully", 200, $totalPower); } catch (\Exception $e) { return $this->errorMessageResponse(false, $e->getMessage(), "Failed to retrieve total power usage", 500); @@ -108,7 +101,7 @@ public function getTotalPowerUsage($id) public function getAverageVoltage($id) { try { - $averageVoltage = GetAverageVoltageService::getAverageVoltage($id); + $averageVoltage = DashboardService::getAverageVoltage($id); return $this->messageResponse(true, "Average voltage retrieved successfully", 200, $averageVoltage); } catch (\Exception $e) { return $this->errorMessageResponse(false, $e->getMessage(), "Failed to retrieve average voltage", 500); @@ -118,7 +111,7 @@ public function getAverageVoltage($id) public function getPowerUsageByClient($id) { try { - $powerUsageByClient = GetPowerUsageByClientService::getPowerUsageByClient($id); + $powerUsageByClient = DashboardService::getPowerUsageByClient($id); return $this->messageResponse(true, "Power usage by client retrieved successfully", 200, $powerUsageByClient); } catch (\Exception $e) { return $this->errorMessageResponse(false, $e->getMessage(), "Failed to retrieve power usage by client", 500); @@ -128,7 +121,7 @@ public function getPowerUsageByClient($id) public function getVoltageDistribution($id) { try { - $voltageDistribution = GetVoltageDistributionService::getVoltageDistribution($id); + $voltageDistribution = DashboardService::getVoltageDistribution($id); return $this->messageResponse(true, "Voltage distribution retrieved successfully", 200, $voltageDistribution); } catch (\Exception $e) { return $this->errorMessageResponse(false, $e->getMessage(), "Failed to retrieve voltage distribution", 500); @@ -138,7 +131,7 @@ public function getVoltageDistribution($id) public function getMetricsSummary($id) { try { - $metricsSummary = GetMetricSummaryService::getMetricSummary($id); + $metricsSummary = DashboardService::getMetricSummary($id); return $this->messageResponse(true, "Metrics summary retrieved successfully", 200, $metricsSummary); } catch (\Exception $e) { return $this->errorMessageResponse(false, $e->getMessage(), "Failed to retrieve metrics summary", 500); diff --git a/amp-laravel/app/Models/ContactForm.php b/amp-laravel/app/Models/ContactForm.php index be09d5d0..ebfcb6c9 100644 --- a/amp-laravel/app/Models/ContactForm.php +++ b/amp-laravel/app/Models/ContactForm.php @@ -15,9 +15,4 @@ class ContactForm extends Model 'phone_number', 'message', ]; - - public function user() - { - return $this->belongsTo(User::class); - } } diff --git a/amp-laravel/app/Services/Admin/DeleteContactMessageService.php b/amp-laravel/app/Services/Admin/ContactFormService.php similarity index 78% rename from amp-laravel/app/Services/Admin/DeleteContactMessageService.php rename to amp-laravel/app/Services/Admin/ContactFormService.php index 16bd6167..0fc8c8a9 100644 --- a/amp-laravel/app/Services/Admin/DeleteContactMessageService.php +++ b/amp-laravel/app/Services/Admin/ContactFormService.php @@ -5,7 +5,7 @@ use App\Models\ContactForm; use Illuminate\Database\Eloquent\ModelNotFoundException; -class DeleteContactMessageService +class ContactFormService { public static function delete($id): bool { @@ -17,4 +17,9 @@ public static function delete($id): bool return $message->delete(); } + + public static function getAll() + { + return ContactForm::all(); + } } diff --git a/amp-laravel/app/Services/Admin/AdminEditProviderProfileService.php b/amp-laravel/app/Services/Admin/ProviderService.php similarity index 75% rename from amp-laravel/app/Services/Admin/AdminEditProviderProfileService.php rename to amp-laravel/app/Services/Admin/ProviderService.php index fd4ca369..7173e4c5 100644 --- a/amp-laravel/app/Services/Admin/AdminEditProviderProfileService.php +++ b/amp-laravel/app/Services/Admin/ProviderService.php @@ -4,9 +4,9 @@ use App\Models\User; -class AdminEditProviderProfileService +class ProviderService { - public static function editProfile(int $id, array $data) + public static function editProfile(int $id, array $data) { $user = User::where('id', $id)->where('user_type', 'Provider')->firstOrFail(); @@ -30,4 +30,9 @@ public static function editProfile(int $id, array $data) return $user; } + + public static function getAll() + { + return User::where('user_type', 'Provider')->get(); + } } diff --git a/amp-laravel/app/Services/Admin/getAllContactMessagesService.php b/amp-laravel/app/Services/Admin/getAllContactMessagesService.php deleted file mode 100644 index 7339c57b..00000000 --- a/amp-laravel/app/Services/Admin/getAllContactMessagesService.php +++ /dev/null @@ -1,13 +0,0 @@ -get(); - } -} diff --git a/amp-laravel/app/Services/Client/ClientCheckinService.php b/amp-laravel/app/Services/Client/ClientCheckinService.php deleted file mode 100644 index de249f3d..00000000 --- a/amp-laravel/app/Services/Client/ClientCheckinService.php +++ /dev/null @@ -1,34 +0,0 @@ -firstOrFail(); - - $slave = Slave::updateOrCreate( - ['modbus_id' => $data['modbus_id']], - ['master_id' => $master->id] - ); - - if ($slave->wasRecentlyCreated) { - User::create([ - 'slave_id' => $slave->id, - 'user_type' => 'Client', - ]); - } - - return $slave->toArray(); - } -} diff --git a/amp-laravel/app/Services/Client/ClientEditProfileService.php b/amp-laravel/app/Services/Client/ClientEditProfileService.php deleted file mode 100644 index 9db334de..00000000 --- a/amp-laravel/app/Services/Client/ClientEditProfileService.php +++ /dev/null @@ -1,21 +0,0 @@ -password = bcrypt($data['password']); - } - - $user->save(); - - return $user; - } -} diff --git a/amp-laravel/app/Services/Client/ClientDashboardService.php b/amp-laravel/app/Services/Client/ClientService.php similarity index 68% rename from amp-laravel/app/Services/Client/ClientDashboardService.php rename to amp-laravel/app/Services/Client/ClientService.php index 2cef4db2..119fda3a 100644 --- a/amp-laravel/app/Services/Client/ClientDashboardService.php +++ b/amp-laravel/app/Services/Client/ClientService.php @@ -5,9 +5,14 @@ use DateTime; use DateTimeZone; use App\Models\Metric; +use Prism\Prism\Prism; +use App\Utils\ClientPrompt; +use Prism\Prism\Enums\Provider; use Illuminate\Support\Collection; +use App\Utils\Schemas\ClientPrismSchema; +use PHPOpenSourceSaver\JWTAuth\Facades\JWTAuth; -class ClientDashboardService +class ClientService { public static function getDashboardData($slaveId): array { @@ -62,4 +67,36 @@ public static function getDashboardData($slaveId): array 'expectedPowerLimit' => $expectedPowerLimit, ]; } + + public static function editProfile(array $data) + { + $user = JWTAuth::user(); + + if (!empty($data['password'])) { + $user->password = bcrypt($data['password']); + } + + $user->save(); + + return $user; + } + + public static function generateReport($slaveId) + { + $prompt = ClientPrompt::clientBuildPromptFromMetrics($slaveId); + $schema = ClientPrismSchema::metricsReportSchema(); + + $response = Prism::structured() + ->using(Provider::OpenAI, 'gpt-4.1') + ->withSchema($schema) + ->withPrompt($prompt) + ->asStructured(); + + $structured = $response->structured; + + $structured['recommendations'] = str_replace('\n', "\n", $structured['recommendations']); + $structured['summary'] = preg_replace('/device\s+\d+/i', 'the device', $structured['summary']); + + return $structured; + } } diff --git a/amp-laravel/app/Services/Client/MetricsEntryService.php b/amp-laravel/app/Services/Client/MetricsEntryService.php deleted file mode 100644 index 9da059bd..00000000 --- a/amp-laravel/app/Services/Client/MetricsEntryService.php +++ /dev/null @@ -1,41 +0,0 @@ -firstOrFail(); - $slave = Slave::where('id', $data['slave_id'])->firstOrFail(); - - try { - $date = Carbon::createFromFormat('m-d', $data['date_month']); - $data['date_month'] = $date->format('m-d'); - } catch (\Exception $e) { - throw new InvalidArgumentException('Invalid date_month format. Use mm-dd or yyyy-mm.'); - } - - $metric = Metric::create([ - 'voltage' => $data['voltage'], - 'current' => $data['current'], - 'power' => $data['power'], - 'energy' => $data['energy'], - 'slave_id' => $slave->id, - 'master_id' => $master->id, - 'date_month' => $data['date_month'], - ]); - - return $metric->toArray(); - } -} diff --git a/amp-laravel/app/Services/IotService.php b/amp-laravel/app/Services/IotService.php new file mode 100644 index 00000000..3ea8b33f --- /dev/null +++ b/amp-laravel/app/Services/IotService.php @@ -0,0 +1,103 @@ + $data['name']], + ); + + if ($master->wasRecentlyCreated) { + $user = User::create([ + 'user_type' => 'Provider', + ]); + + $master->user_id = $user->id; + $master->save(); + } + + return $master->toArray(); + } + + // Slave Check In Service + public static function slaveCheckin(array $data): array + { + if (empty($data['master_id']) || empty($data['modbus_id'])) { + throw new InvalidArgumentException('master_id and modbus_id are required.'); + } + + $master = Master::where('id', $data['master_id'])->firstOrFail(); + + $slave = Slave::updateOrCreate( + ['modbus_id' => $data['modbus_id']], + ['master_id' => $master->id] + ); + + if ($slave->wasRecentlyCreated) { + User::create([ + 'slave_id' => $slave->id, + 'user_type' => 'Client', + ]); + } + + return $slave->toArray(); + } + + // Add Metrics Service + public static function addMetrics(array $data): array + { + if (empty($data['master_id']) || empty($data['slave_id'])) { + throw new InvalidArgumentException('master_id and slave_id are required.'); + } + + $master = Master::where('id', $data['master_id'])->firstOrFail(); + $slave = Slave::where('id', $data['slave_id'])->firstOrFail(); + + try { + $date = Carbon::createFromFormat('m-d', $data['date_month']); + $data['date_month'] = $date->format('m-d'); + } catch (\Exception $e) { + throw new InvalidArgumentException('Invalid date_month format. Use mm-dd or yyyy-mm.'); + } + + $metric = Metric::create([ + 'voltage' => $data['voltage'], + 'current' => $data['current'], + 'power' => $data['power'], + 'energy' => $data['energy'], + 'slave_id' => $slave->id, + 'master_id' => $master->id, + 'date_month' => $data['date_month'], + ]); + + return $metric->toArray(); + } + + // Add Lines Service + public static function addLines(array $data): array + { + $master = Master::where('id', $data['master_id'])->firstOrFail(); + + $line = $master->lines()->create([ + 'voltage_l1' => $data['voltage_l1'], + 'voltage_l2' => $data['voltage_l2'], + 'voltage_l3' => $data['voltage_l3'], + 'power_l1' => $data['power_l1'], + 'power_l2' => $data['power_l2'], + 'power_l3' => $data['power_l3'], + ]); + + return $line->toArray(); + } +} diff --git a/amp-laravel/app/Services/Provider/DashboardService.php b/amp-laravel/app/Services/Provider/DashboardService.php new file mode 100644 index 00000000..9ae0fce9 --- /dev/null +++ b/amp-laravel/app/Services/Provider/DashboardService.php @@ -0,0 +1,172 @@ +pluck('id'); + $clientSlaveIds = Metric::whereIn('master_id', $masterIds)->distinct()->pluck('slave_id'); + return User::whereIn('slave_id', $clientSlaveIds)->where('user_type', 'Client')->get(); + } + + // Fetch All Client Metric Values + public static function getAllMetrics(int $providerId) + { + $masterIds = Master::where('user_id', $providerId)->pluck('id'); + return Metric::whereIn('master_id', $masterIds)->get(); + } + + // Fetch All Line Values + public static function getAllLines(int $providerId) + { + $masterIds = Master::where('user_id', $providerId)->pluck('id'); + return Line::whereIn('master_id', $masterIds)->get(); + } + + // Fetch Average Voltage Values + public static function getAverageVoltage(int $providerId): array + { + $masterIds = Master::where('user_id', $providerId)->pluck('id'); + + $averageVoltageByDay = Metric::whereIn('master_id', $masterIds) + ->selectRaw('SUBSTRING(date_month, 1, 5) as day_month, AVG(voltage) as average_voltage') + ->groupBy('day_month') + ->orderBy('day_month') + ->get() + ->mapWithKeys(function ($item) { + try { + $date = DateTime::createFromFormat('m-d', $item->day_month); + if ($date) { + return [$date->format('Y-m-d') => round($item->average_voltage, 2)]; + } + } catch (\Exception $e) { + return []; + } + return []; + }) + ->filter() + ->toArray(); + + return $averageVoltageByDay; + } + + // Fetch Metric data summary + public static function getMetricSummary(int $providerId): array + { + $masterIds = Master::where('user_id', $providerId)->pluck('id'); + return [ + 'minPower' => round(Metric::whereIn('master_id', $masterIds)->min('power'), 2), + 'maxPower' => round(Metric::whereIn('master_id', $masterIds)->max('power'), 2), + 'avgPower' => round(Metric::whereIn('master_id', $masterIds)->avg('power'), 2), + 'minVoltage' => round(Metric::whereIn('master_id', $masterIds)->min('voltage'), 2), + 'maxVoltage' => round(Metric::whereIn('master_id', $masterIds)->max('voltage'), 2), + 'avgVoltage' => round(Metric::whereIn('master_id', $masterIds)->avg('voltage'), 2), + ]; + } + + // Fetch Data Overview for all metrics + public static function getOverviewData(int $providerId): array + { + $masterIds = Master::where('user_id', $providerId)->pluck('id'); + $clientSlaveIds = Metric::whereIn('master_id', $masterIds)->distinct()->pluck('slave_id'); + $totalClients = User::whereIn('slave_id', $clientSlaveIds)->where('user_type', 'Client')->count(); + $totalPowerThisMonth = Metric::whereIn('master_id', $masterIds) + ->whereRaw('SUBSTRING(date_month, 1, 2) = ?', [now()->format('m')]) + ->sum('power'); + + $averageVoltage = Metric::whereIn('master_id', $masterIds)->avg('voltage'); + + return [ + 'totalClients' => $totalClients, + 'totalPowerThisMonth' => round($totalPowerThisMonth, 2), + 'averageVoltageAcrossClients' => round($averageVoltage, 2), + 'latestMetricTimestamp' => Metric::whereIn('master_id', $masterIds)->max('created_at'), + ]; + } + + // Fetch Power Usage grouped by clients + public static function getPowerUsageByClient(int $providerId): array + { + $masters = Master::where('user_id', $providerId) + ->with(['metrics' => function ($query) { + $query->whereRaw('SUBSTRING(date_month, 1, 2) = ?', [now()->format('m')]); + }]) + ->get(); + + $clientPowerUsage = []; + + // Collect unique slave_ids from the loaded metrics + $clientSlaveIds = $masters->flatMap(function ($master) { + return $master->metrics->pluck('slave_id'); + })->unique()->toArray(); + + // Get clients matching those slave_ids + $clients = User::whereIn('slave_id', $clientSlaveIds) + ->where('user_type', 'Client') + ->get(['id', 'name', 'slave_id']); + + foreach ($clients as $client) { + // Sum power for each client's slave_id across all master's metrics (already filtered by month) + $totalPower = $masters->sum(function ($master) use ($client) { + return $master->metrics->where('slave_id', $client->slave_id)->sum('power'); + }); + + $clientPowerUsage[] = [ + 'client_name' => $client->name, + 'total_power' => round($totalPower, 2), + ]; + } + + // Sort clients by total power usage in descending order + usort($clientPowerUsage, fn($a, $b) => $b['total_power'] <=> $a['total_power']); + + return $clientPowerUsage; + } + + // Fetch Total Power Usage + public static function getTotalPowerUsage(int $providerId): array + { + $masterIds = Master::where('user_id', $providerId)->pluck('id'); + + $totalPowerUsageByDay = Metric::whereIn('master_id', $masterIds) + ->selectRaw('SUBSTRING(date_month, 1, 5) as day_month, SUM(power) as total_power') + ->groupBy('day_month') + ->orderBy('day_month') + ->get() + ->mapWithKeys(function ($item) { + try { + $date = DateTime::createFromFormat('m-d', $item->day_month); + if ($date) { + return [$date->format('Y-m-d') => round($item->total_power, 2)]; + } + } catch (\Exception $e) { + // Log or handle parsing errors as needed + return []; + } + return []; + }) + ->filter() + ->toArray(); + + return $totalPowerUsageByDay; + } + + // Fetch Voltage Distribution Values + public static function getVoltageDistribution(int $providerId): array + { + $masterIds = Master::where('user_id', $providerId)->pluck('id'); + return Metric::whereIn('master_id', $masterIds) + ->select(['id', 'voltage']) + ->get() + ->toArray(); + } +} diff --git a/amp-laravel/app/Services/Provider/GeneratingReportService.php b/amp-laravel/app/Services/Provider/GeneratingReportService.php index a563bbde..82ccd553 100644 --- a/amp-laravel/app/Services/Provider/GeneratingReportService.php +++ b/amp-laravel/app/Services/Provider/GeneratingReportService.php @@ -2,60 +2,19 @@ namespace App\Services\Provider; -use App\Models\Metric; - use Prism\Prism\Prism; +use App\Utils\ProviderPrompt; use Prism\Prism\Enums\Provider; - -use Prism\Prism\Schema\ObjectSchema; -use Prism\Prism\Schema\StringSchema; +use App\Utils\Schemas\ProviderPrismSchema; class GeneratingReportService { public static function generateReport() { - $metrics = Metric::orderBy('date_month', 'desc')->get(); - - if ($metrics->isEmpty()) { - throw new \Exception('No metrics found across devices.'); - } - - $metricsText = $metrics->map(function ($m) { - return "Date: {$m->date_month}, Voltage: {$m->voltage}V, Current: {$m->current}A, Power: {$m->power}W, Energy: {$m->energy}kWh"; - })->implode("\n"); - - $prompt = <<using(Provider::OpenAI, 'o4-mini') ->using(Provider::OpenAI, 'gpt-4.1') ->withSchema($schema) ->withPrompt($prompt) @@ -63,7 +22,6 @@ public static function generateReport() $structured = $response->structured; - // Fix formatting issues $structured['recommendations'] = str_replace('\n', "\n", $structured['recommendations']); $structured['summary'] = preg_replace('/device\s+\d+/i', 'a device', $structured['summary']); diff --git a/amp-laravel/app/Services/Provider/GetAllClientMetricsService.php b/amp-laravel/app/Services/Provider/GetAllClientMetricsService.php deleted file mode 100644 index 9162a30a..00000000 --- a/amp-laravel/app/Services/Provider/GetAllClientMetricsService.php +++ /dev/null @@ -1,15 +0,0 @@ -pluck('id'); - return Metric::whereIn('master_id', $masterIds)->get(); - } -} diff --git a/amp-laravel/app/Services/Provider/GetAllClientUsersService.php b/amp-laravel/app/Services/Provider/GetAllClientUsersService.php deleted file mode 100644 index 238fa191..00000000 --- a/amp-laravel/app/Services/Provider/GetAllClientUsersService.php +++ /dev/null @@ -1,17 +0,0 @@ -pluck('id'); - $clientSlaveIds = Metric::whereIn('master_id', $masterIds)->distinct()->pluck('slave_id'); - return User::whereIn('slave_id', $clientSlaveIds)->where('user_type', 'Client')->get(); - } -} diff --git a/amp-laravel/app/Services/Provider/GetAllLinesService.php b/amp-laravel/app/Services/Provider/GetAllLinesService.php deleted file mode 100644 index e29d456a..00000000 --- a/amp-laravel/app/Services/Provider/GetAllLinesService.php +++ /dev/null @@ -1,15 +0,0 @@ -pluck('id'); - return Line::whereIn('master_id', $masterIds)->get(); - } -} diff --git a/amp-laravel/app/Services/Provider/GetAverageVoltageService.php b/amp-laravel/app/Services/Provider/GetAverageVoltageService.php deleted file mode 100644 index a90cae97..00000000 --- a/amp-laravel/app/Services/Provider/GetAverageVoltageService.php +++ /dev/null @@ -1,36 +0,0 @@ -pluck('id'); - - $averageVoltageByDay = Metric::whereIn('master_id', $masterIds) - ->selectRaw('SUBSTRING(date_month, 1, 5) as day_month, AVG(voltage) as average_voltage') - ->groupBy('day_month') - ->orderBy('day_month') - ->get() - ->mapWithKeys(function ($item) { - try { - $date = DateTime::createFromFormat('m-d', $item->day_month); - if ($date) { - return [$date->format('Y-m-d') => round($item->average_voltage, 2)]; - } - } catch (\Exception $e) { - return []; - } - return []; - }) - ->filter() - ->toArray(); - - return $averageVoltageByDay; - } -} diff --git a/amp-laravel/app/Services/Provider/GetMetricSummaryService.php b/amp-laravel/app/Services/Provider/GetMetricSummaryService.php deleted file mode 100644 index 39d0a397..00000000 --- a/amp-laravel/app/Services/Provider/GetMetricSummaryService.php +++ /dev/null @@ -1,23 +0,0 @@ -pluck('id'); - return [ - 'minPower' => round(Metric::whereIn('master_id', $masterIds)->min('power'), 2), - 'maxPower' => round(Metric::whereIn('master_id', $masterIds)->max('power'), 2), - 'avgPower' => round(Metric::whereIn('master_id', $masterIds)->avg('power'), 2), - 'minVoltage' => round(Metric::whereIn('master_id', $masterIds)->min('voltage'), 2), - 'maxVoltage' => round(Metric::whereIn('master_id', $masterIds)->max('voltage'), 2), - 'avgVoltage' => round(Metric::whereIn('master_id', $masterIds)->avg('voltage'), 2), - ]; - } -} diff --git a/amp-laravel/app/Services/Provider/GetOverviewDataService.php b/amp-laravel/app/Services/Provider/GetOverviewDataService.php deleted file mode 100644 index c8d73613..00000000 --- a/amp-laravel/app/Services/Provider/GetOverviewDataService.php +++ /dev/null @@ -1,29 +0,0 @@ -pluck('id'); - $clientSlaveIds = Metric::whereIn('master_id', $masterIds)->distinct()->pluck('slave_id'); - $totalClients = User::whereIn('slave_id', $clientSlaveIds)->where('user_type', 'Client')->count(); - $totalPowerThisMonth = Metric::whereIn('master_id', $masterIds) - ->whereRaw('SUBSTRING(date_month, 1, 2) = ?', [now()->format('m')]) - ->sum('power'); - - $averageVoltage = Metric::whereIn('master_id', $masterIds)->avg('voltage'); - - return [ - 'totalClients' => $totalClients, - 'totalPowerThisMonth' => round($totalPowerThisMonth, 2), - 'averageVoltageAcrossClients' => round($averageVoltage, 2), - 'latestMetricTimestamp' => Metric::whereIn('master_id', $masterIds)->max('created_at'), - ]; - } -} diff --git a/amp-laravel/app/Services/Provider/GetPowerUsageByClientService.php b/amp-laravel/app/Services/Provider/GetPowerUsageByClientService.php deleted file mode 100644 index b841a04b..00000000 --- a/amp-laravel/app/Services/Provider/GetPowerUsageByClientService.php +++ /dev/null @@ -1,48 +0,0 @@ -with(['metrics' => function ($query) { - $query->whereRaw('SUBSTRING(date_month, 1, 2) = ?', [now()->format('m')]); - }]) - ->get(); - - $clientPowerUsage = []; - - // Collect unique slave_ids from the loaded metrics - $clientSlaveIds = $masters->flatMap(function ($master) { - return $master->metrics->pluck('slave_id'); - })->unique()->toArray(); - - // Get clients matching those slave_ids - $clients = User::whereIn('slave_id', $clientSlaveIds) - ->where('user_type', 'Client') - ->get(['id', 'name', 'slave_id']); - - foreach ($clients as $client) { - // Sum power for each client's slave_id across all master's metrics (already filtered by month) - $totalPower = $masters->sum(function ($master) use ($client) { - return $master->metrics->where('slave_id', $client->slave_id)->sum('power'); - }); - - $clientPowerUsage[] = [ - 'client_name' => $client->name, - 'total_power' => round($totalPower, 2), - ]; - } - - // Sort clients by total power usage in descending order - usort($clientPowerUsage, fn($a, $b) => $b['total_power'] <=> $a['total_power']); - - return $clientPowerUsage; - } -} diff --git a/amp-laravel/app/Services/Provider/GetTotalPowerUsageService.php b/amp-laravel/app/Services/Provider/GetTotalPowerUsageService.php deleted file mode 100644 index 33c32033..00000000 --- a/amp-laravel/app/Services/Provider/GetTotalPowerUsageService.php +++ /dev/null @@ -1,38 +0,0 @@ -pluck('id'); - - $totalPowerUsageByDay = Metric::whereIn('master_id', $masterIds) - ->selectRaw('SUBSTRING(date_month, 1, 5) as day_month, SUM(power) as total_power') - ->groupBy('day_month') - ->orderBy('day_month') - ->get() - ->mapWithKeys(function ($item) { - try { - $date = DateTime::createFromFormat('m-d', $item->day_month); - if ($date) { - return [$date->format('Y-m-d') => round($item->total_power, 2)]; - } - } catch (\Exception $e) { - // Log or handle parsing errors as needed - return []; - } - return []; - }) - ->filter() - ->toArray(); - - return $totalPowerUsageByDay; - } -} diff --git a/amp-laravel/app/Services/Provider/GetVoltageDistributionService.php b/amp-laravel/app/Services/Provider/GetVoltageDistributionService.php deleted file mode 100644 index b1ea6874..00000000 --- a/amp-laravel/app/Services/Provider/GetVoltageDistributionService.php +++ /dev/null @@ -1,18 +0,0 @@ -pluck('id'); - return Metric::whereIn('master_id', $masterIds) - ->select(['id', 'voltage']) - ->get() - ->toArray(); - } -} diff --git a/amp-laravel/app/Services/Provider/LinesEntryService.php b/amp-laravel/app/Services/Provider/LinesEntryService.php deleted file mode 100644 index 23f6f323..00000000 --- a/amp-laravel/app/Services/Provider/LinesEntryService.php +++ /dev/null @@ -1,24 +0,0 @@ -firstOrFail(); - - $line = $master->lines()->create([ - 'voltage_l1' => $data['voltage_l1'], - 'voltage_l2' => $data['voltage_l2'], - 'voltage_l3' => $data['voltage_l3'], - 'power_l1' => $data['power_l1'], - 'power_l2' => $data['power_l2'], - 'power_l3' => $data['power_l3'], - ]); - - return $line->toArray(); - } -} diff --git a/amp-laravel/app/Services/Provider/ProviderCheckinService.php b/amp-laravel/app/Services/Provider/ProviderCheckinService.php deleted file mode 100644 index e13cce84..00000000 --- a/amp-laravel/app/Services/Provider/ProviderCheckinService.php +++ /dev/null @@ -1,27 +0,0 @@ - $data['name']], - ); - - if ($master->wasRecentlyCreated) { - $user = User::create([ - 'user_type' => 'Provider', - ]); - - $master->user_id = $user->id; - $master->save(); - } - - return $master->toArray(); - } -} diff --git a/amp-laravel/app/Traits/ResponseTrait.php b/amp-laravel/app/Traits/ResponseTrait.php index c6421466..21a49d7f 100644 --- a/amp-laravel/app/Traits/ResponseTrait.php +++ b/amp-laravel/app/Traits/ResponseTrait.php @@ -2,9 +2,7 @@ namespace App\Traits; -use App\Models\User; use Illuminate\Contracts\Validation\Validator; -use PHPOpenSourceSaver\JWTAuth\Facades\JWTAuth; use Illuminate\Http\Exceptions\HttpResponseException; trait ResponseTrait @@ -44,28 +42,4 @@ public function failedValidation(Validator $validator) 'message' => 'Invalid Credentials' ], 422)); } - - public function actingAsClient() - { - $client = User::factory()->create(['user_type' => 'Client']); - $token = JWTAuth::fromUser($client); - $request = $this->withHeader('Authorization', "Bearer $token"); - - return [$request, $client]; - } - - - public function actingAsProvider() - { - $provider = User::factory()->create(['user_type' => 'provider']); - $token = JWTAuth::fromUser($provider); - return $this->withHeader('Authorization', "Bearer $token"); - } - - public function actingAsAdmin() - { - $admin = User::factory()->create(['user_type' => 'admin']); - $token = JWTAuth::fromUser($admin); - return $this->withHeader('Authorization', "Bearer $token"); - } } diff --git a/amp-laravel/app/Traits/TestTrait.php b/amp-laravel/app/Traits/TestTrait.php new file mode 100644 index 00000000..a6b8bdde --- /dev/null +++ b/amp-laravel/app/Traits/TestTrait.php @@ -0,0 +1,33 @@ +create(['user_type' => 'Client']); + $token = JWTAuth::fromUser($client); + $request = $this->withHeader('Authorization', "Bearer $token"); + + return [$request, $client]; + } + + + public function actingAsProvider() + { + $provider = User::factory()->create(['user_type' => 'provider']); + $token = JWTAuth::fromUser($provider); + return $this->withHeader('Authorization', "Bearer $token"); + } + + public function actingAsAdmin() + { + $admin = User::factory()->create(['user_type' => 'admin']); + $token = JWTAuth::fromUser($admin); + return $this->withHeader('Authorization', "Bearer $token"); + } +} diff --git a/amp-laravel/app/Services/Client/GeneratingReportService.php b/amp-laravel/app/Utils/ClientPrompt.php similarity index 54% rename from amp-laravel/app/Services/Client/GeneratingReportService.php rename to amp-laravel/app/Utils/ClientPrompt.php index 34a1d1e9..ea1ac645 100644 --- a/amp-laravel/app/Services/Client/GeneratingReportService.php +++ b/amp-laravel/app/Utils/ClientPrompt.php @@ -1,18 +1,13 @@ orderBy('date_month', 'desc') @@ -44,32 +39,6 @@ public static function generateReport($slaveId) $metricsText EOT; - - $schema = new ObjectSchema( - name: 'metrics_report', - description: 'A structured energy metrics report for a slave device', - properties: [ - new StringSchema('summary', 'Overall performance summary'), - new StringSchema('voltageInsights', 'Insights on voltage trends'), - new StringSchema('powerInsights', 'Insights on power consumption'), - new StringSchema('energyInsights', 'Insights on energy usage'), - new StringSchema('recommendations', 'Recommended actions based on data') - ], - requiredFields: ['summary', 'voltageInsights', 'powerInsights', 'energyInsights'] - ); - - $response = Prism::structured() - // ->using(Provider::OpenAI, 'o4-mini') - ->using(Provider::OpenAI, 'gpt-4.1') - ->withSchema($schema) - ->withPrompt($prompt) - ->asStructured(); - - $structured = $response->structured; - - $structured['recommendations'] = str_replace('\n', "\n", $structured['recommendations']); - $structured['summary'] = preg_replace('/device\s+\d+/i', 'the device', $structured['summary']); - - return $structured; + return $prompt; } } diff --git a/amp-laravel/app/Utils/ProviderPrompt.php b/amp-laravel/app/Utils/ProviderPrompt.php new file mode 100644 index 00000000..775d5167 --- /dev/null +++ b/amp-laravel/app/Utils/ProviderPrompt.php @@ -0,0 +1,41 @@ +get(); + + if ($metrics->isEmpty()) { + throw new Exception('No metrics found across devices.'); + } + + $metricsText = $metrics->map(function ($m) { + return "Date: {$m->date_month}, Voltage: {$m->voltage}V, Current: {$m->current}A, Power: {$m->power}W, Energy: {$m->energy}kWh"; + })->implode("\n"); + + $prompt = << null, 'name' => $this->faker->name, 'email' => $this->faker->unique()->safeEmail, 'phone_number' => $this->faker->phoneNumber, diff --git a/amp-laravel/database/migrations/2025_04_28_175033_create_contact_forms_table.php b/amp-laravel/database/migrations/2025_04_28_175033_create_contact_forms_table.php index d0cd60e0..a6f7c3f7 100644 --- a/amp-laravel/database/migrations/2025_04_28_175033_create_contact_forms_table.php +++ b/amp-laravel/database/migrations/2025_04_28_175033_create_contact_forms_table.php @@ -12,8 +12,7 @@ public function up(): void { Schema::create('contact_forms', function (Blueprint $table) { - $table->id(); - $table->foreignId('user_id')->constrained()->onDelete('cascade'); + $table->id(); $table->string('name'); $table->string('email'); $table->string('phone_number'); diff --git a/amp-laravel/database/seeders/ContactFormSeeder.php b/amp-laravel/database/seeders/ContactFormSeeder.php index ce6626a5..21c00187 100644 --- a/amp-laravel/database/seeders/ContactFormSeeder.php +++ b/amp-laravel/database/seeders/ContactFormSeeder.php @@ -2,7 +2,6 @@ namespace Database\Seeders; -use App\Models\User; use App\Models\ContactForm; use Illuminate\Database\Seeder; @@ -10,12 +9,6 @@ class ContactFormSeeder extends Seeder { public function run(): void { - $users = User::inRandomOrder()->limit(10)->get(); - - foreach ($users as $user) { - ContactForm::factory()->create([ - 'user_id' => $user->id, - ]); - } + ContactForm::factory()->count(10)->create(); } } diff --git a/amp-laravel/routes/api.php b/amp-laravel/routes/api.php index d85f87e5..d762b32c 100644 --- a/amp-laravel/routes/api.php +++ b/amp-laravel/routes/api.php @@ -1,14 +1,11 @@ "v1"], function () { //Authenticated Users @@ -18,47 +15,47 @@ // Slave/Client Users Route::group(["prefix" => "clients", "middleware" => "isClient"], function () { - Route::get("/clientReport/{id}", [ClientFunctionsController::class, "generateReport"]); - Route::get("/clientDashboardData/{id}", [ClientFunctionsController::class, "getDashboardData"]); - Route::post("/editProfile", [ClientFunctionsController::class, "editProfile"]); + Route::get("/clientReport/{id}", [ClientController::class, "generateReport"]); + Route::get("/clientDashboardData/{id}", [ClientController::class, "getDashboardData"]); + Route::post("/editProfile", [ClientController::class, "editProfile"]); }); // Master/Provider Users Route::group(["prefix" => "providers", "middleware" => "isProvider"], function () { - Route::get("/providerReport", [ProviderFunctionsController::class, "generateReport"]); + Route::get("/providerReport", [ProviderController::class, "generateReport"]); - Route::get("/getAllUsers/{id}", [ProviderFunctionsController::class, "getUsers"]); - Route::get("/getAllMetrics/{id}", [ProviderFunctionsController::class, "getMetrics"]); - Route::get("/getAllLines/{id}", [ProviderFunctionsController::class, "getLines"]); + Route::get("/getAllUsers/{id}", [ProviderController::class, "getUsers"]); + Route::get("/getAllMetrics/{id}", [ProviderController::class, "getMetrics"]); + Route::get("/getAllLines/{id}", [ProviderController::class, "getLines"]); - Route::get("/overview/{id}", [ProviderFunctionsController::class, "getOverviewData"]); - Route::get("/totalPowerUsage/{id}", [ProviderFunctionsController::class, "getTotalPowerUsage"]); - Route::get("/averageVoltage/{id}", [ProviderFunctionsController::class, "getAverageVoltage"]); - Route::get("/powerUsageByClient/{id}", [ProviderFunctionsController::class, "getPowerUsageByClient"]); - Route::get("/voltageDistribution/{id}", [ProviderFunctionsController::class, "getVoltageDistribution"]); - Route::get("/metricsSummary/{id}", [ProviderFunctionsController::class, "getMetricsSummary"]); + Route::get("/overview/{id}", [ProviderController::class, "getOverviewData"]); + Route::get("/totalPowerUsage/{id}", [ProviderController::class, "getTotalPowerUsage"]); + Route::get("/averageVoltage/{id}", [ProviderController::class, "getAverageVoltage"]); + Route::get("/powerUsageByClient/{id}", [ProviderController::class, "getPowerUsageByClient"]); + Route::get("/voltageDistribution/{id}", [ProviderController::class, "getVoltageDistribution"]); + Route::get("/metricsSummary/{id}", [ProviderController::class, "getMetricsSummary"]); - Route::post("/editProfile", [ProviderFunctionsController::class, "editProfile"]); - Route::post("/editUser/{id}", [ProviderFunctionsController::class, "editUser"]); + Route::post("/editProfile", [ProviderController::class, "editProfile"]); + Route::post("/editUser/{id}", [ProviderController::class, "editUser"]); }); // Admin Users Route::group(["prefix" => "admins", "middleware" => "isAdmin"], function () { - Route::get("/getAllProviders", [AdminFunctionsController::class, "getProviders"]); - Route::get("/getAllContactMessages", [AdminFunctionsController::class, "getContactMessages"]); + Route::get("/getAllProviders", [AdminController::class, "getProviders"]); + Route::get("/getAllContactMessages", [AdminController::class, "getContactMessages"]); - Route::post("/editProvider/{id}", [AdminFunctionsController::class, "editProvider"]); - Route::post("/editProfile", [AdminFunctionsController::class, "editProfile"]); - Route::delete("/deleteContactMessage/{id}", [AdminFunctionsController::class, "deleteMessage"]); + Route::post("/editProvider/{id}", [AdminController::class, "editProvider"]); + Route::post("/editProfile", [AdminController::class, "editProfile"]); + Route::delete("/deleteContactMessage/{id}", [AdminController::class, "deleteMessage"]); }); }); // Public Routes for Data Entry - Route::post("/slaveCheckIn", [ClientCheckinController::class, "slaveCheckin"]); - Route::post("/metrics", [MetricsController::class, "slaveMetrics"]); + Route::post("/slaveCheckIn", [IotController::class, "slaveCheckin"]); + Route::post("/metrics", [IotController::class, "slaveMetrics"]); - Route::post("/masterCheckIn", [ProviderCheckinController::class, "masterCheckin"]); - Route::post("/lines", [LinesController::class, "masterLines"]); + Route::post("/masterCheckIn", [IotController::class, "masterCheckin"]); + Route::post("/lines", [IotController::class, "masterLines"]); // Public Route for Contact Message Submission // Route::post("/insertMessage", [AuthController::class, "insertMessage"]); diff --git a/amp-laravel/tests/Feature/AdminTest.php b/amp-laravel/tests/Feature/AdminTest.php index f0120f98..5d95bb08 100644 --- a/amp-laravel/tests/Feature/AdminTest.php +++ b/amp-laravel/tests/Feature/AdminTest.php @@ -4,12 +4,12 @@ use Tests\TestCase; use App\Models\User; +use App\Traits\TestTrait; use App\Models\ContactForm; -use App\Traits\ResponseTrait; class AdminTest extends TestCase { - use ResponseTrait; + use TestTrait; public function testAdminCanGetAllProviders(): void { @@ -103,9 +103,7 @@ public function testAdminCanDeleteContactMessage(): void { $user = User::factory()->create(['user_type' => 'client']); - $contactMessage = ContactForm::factory()->create([ - 'user_id' => $user->id, - ]); + $contactMessage = ContactForm::factory()->create([]); $response = $this->actingAsAdmin()->deleteJson("/api/v1/admins/deleteContactMessage/{$contactMessage->id}"); diff --git a/amp-laravel/tests/Feature/ClientTest.php b/amp-laravel/tests/Feature/ClientTest.php index 1eba475c..9fc4364f 100644 --- a/amp-laravel/tests/Feature/ClientTest.php +++ b/amp-laravel/tests/Feature/ClientTest.php @@ -3,12 +3,11 @@ namespace Tests\Feature; use Tests\TestCase; -use App\Traits\ResponseTrait; -use Illuminate\Support\Facades\Auth; +use App\Traits\TestTrait; class ClientTest extends TestCase { - use ResponseTrait; + use TestTrait; public function testClientCanEditProfile(): void { diff --git a/amp-laravel/tests/Feature/LineTest.php b/amp-laravel/tests/Feature/LineTest.php index f3ef6844..df428420 100644 --- a/amp-laravel/tests/Feature/LineTest.php +++ b/amp-laravel/tests/Feature/LineTest.php @@ -4,12 +4,12 @@ use Tests\TestCase; use App\Models\Master; -use App\Traits\ResponseTrait; +use App\Traits\TestTrait; use Illuminate\Foundation\Testing\WithFaker; class LineTest extends TestCase { - use WithFaker, ResponseTrait; + use WithFaker, TestTrait; public function testSubmitMasterLinesSuccessfully(): void { diff --git a/amp-laravel/tests/Feature/MasterTest.php b/amp-laravel/tests/Feature/MasterTest.php index 636aa66c..e61b332a 100644 --- a/amp-laravel/tests/Feature/MasterTest.php +++ b/amp-laravel/tests/Feature/MasterTest.php @@ -4,7 +4,6 @@ use Tests\TestCase; use Illuminate\Foundation\Testing\WithFaker; -use Illuminate\Foundation\Testing\RefreshDatabase; class MasterTest extends TestCase { diff --git a/amp-laravel/tests/Feature/MetricTest.php b/amp-laravel/tests/Feature/MetricTest.php index 97fb1b36..5f3efe40 100644 --- a/amp-laravel/tests/Feature/MetricTest.php +++ b/amp-laravel/tests/Feature/MetricTest.php @@ -5,12 +5,12 @@ use Tests\TestCase; use App\Models\Slave; use App\Models\Master; -use App\Traits\ResponseTrait; +use App\Traits\TestTrait; use Illuminate\Foundation\Testing\WithFaker; class MetricTest extends TestCase { - use WithFaker, ResponseTrait; + use WithFaker, TestTrait; public function testSubmitSlaveMetricsSuccessfully(): void { diff --git a/amp-laravel/tests/Feature/ProviderTest.php b/amp-laravel/tests/Feature/ProviderTest.php index ed595423..32568519 100644 --- a/amp-laravel/tests/Feature/ProviderTest.php +++ b/amp-laravel/tests/Feature/ProviderTest.php @@ -4,11 +4,11 @@ use Tests\TestCase; use App\Models\User; -use App\Traits\ResponseTrait; +use App\Traits\TestTrait; class ProviderTest extends TestCase { - use ResponseTrait; + use TestTrait; public function testProviderCanEditOwnProfile(): void { diff --git a/amp-laravel/tests/Feature/UserTest.php b/amp-laravel/tests/Feature/UserTest.php index f58c1fa2..719d6e2a 100644 --- a/amp-laravel/tests/Feature/UserTest.php +++ b/amp-laravel/tests/Feature/UserTest.php @@ -6,7 +6,6 @@ use App\Models\User; use Illuminate\Foundation\Testing\WithFaker; use PHPOpenSourceSaver\JWTAuth\Facades\JWTAuth; -// use Illuminate\Foundation\Testing\RefreshDatabase; class UserTest extends TestCase {