diff --git a/app/Helpers/SettingsHelper.php b/app/Helpers/SettingsHelper.php new file mode 100644 index 00000000..d76444e9 --- /dev/null +++ b/app/Helpers/SettingsHelper.php @@ -0,0 +1,37 @@ +get(); + + if(sizeof($name) == 0) { + return false; + } else if(sizeof($name) == 1) { + return $name[0]; + } else { + return $name; + } + } + + public static function set(String $name, String $value) + { + $setting = SettingsHelper::get($name); + + if($setting !== false) { + $setting->value = $value; + $setting->save(); + } else { + $setting = Setting::create([ + 'name' => $name, + 'value' => $value, + ]); + } + + return $setting; + } +} diff --git a/app/Helpers/SpeedtestHelper.php b/app/Helpers/SpeedtestHelper.php index c47ecdb3..c606645e 100644 --- a/app/Helpers/SpeedtestHelper.php +++ b/app/Helpers/SpeedtestHelper.php @@ -11,7 +11,7 @@ class SpeedtestHelper { public static function runSpeedtest($output = false) { if($output === false) { - $output = shell_exec('speedtest-cli --json'); + $output = SpeedtestHelper::output(); } try { @@ -31,6 +31,11 @@ class SpeedtestHelper { return (isset($test)) ? $test : false; } + public static function output() + { + return shell_exec('speedtest-cli --json'); + } + public static function latest() { $data = Speedtest::latest()->get(); diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php new file mode 100644 index 00000000..2103f433 --- /dev/null +++ b/app/Http/Controllers/SettingsController.php @@ -0,0 +1,46 @@ + [ 'required', 'string', 'min:1' ], + ]; + $validator = Validator::make($request->all(), $rule); + if($validator->fails()) { + return response()->json([ + 'method' => 'Store a setting', + 'error' => $validator->errors() + ], 422); + } + + if(!isset($request->value)) { + $request->value = ''; + } + + $setting = SettingsHelper::set($request->name, $request->value); + + return response()->json([ + 'method' => 'Store a setting', + 'data' => $setting + ], 200); + } +} diff --git a/app/Jobs/SpeedtestJob.php b/app/Jobs/SpeedtestJob.php index c359ae6b..0682f61b 100644 --- a/app/Jobs/SpeedtestJob.php +++ b/app/Jobs/SpeedtestJob.php @@ -31,7 +31,7 @@ class SpeedtestJob implements ShouldQueue */ public function handle() { - $output = shell_exec('speedtest-cli --json'); + $output = SpeedtestHelper::output(); $speedtest = SpeedtestHelper::runSpeedtest($output); event(new SpeedtestCompleteEvent($speedtest)); return $speedtest; diff --git a/app/Setting.php b/app/Setting.php new file mode 100644 index 00000000..e429d7cf --- /dev/null +++ b/app/Setting.php @@ -0,0 +1,19 @@ +id(); + $table->string('name')->unique(); + $table->string('value'); + $table->timestamps(); + }); + + SettingsHelper::set('schedule', '0 * * * *'); + SettingsHelper::set('server', ''); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('settings'); + } +} diff --git a/routes/api.php b/routes/api.php index 73d4acde..ce1f0ccd 100644 --- a/routes/api.php +++ b/routes/api.php @@ -53,3 +53,15 @@ Route::group([ Route::get('move', 'UpdateController@moveUpdate') ->name('update.move'); }); + +Route::group([ + 'middleware' => 'api', + 'prefix' => 'settings' +], function () { + Route::get('/', 'SettingsController@index') + ->name('settings.index'); + Route::put('/', 'SettingsController@store') + ->name('settings.store'); + Route::post('/', 'SettingsController@store') + ->name('settings.update'); +});