diff --git a/backend/app/Console/Kernel.php b/backend/app/Console/Kernel.php
index c43d22d..1482174 100644
--- a/backend/app/Console/Kernel.php
+++ b/backend/app/Console/Kernel.php
@@ -4,7 +4,6 @@ namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
-use App\Jobs\IncrementAvailabilityMinutesJob;
use App\Jobs\UpdateAvailabilityWithSchedulesJob;
class Kernel extends ConsoleKernel
@@ -14,7 +13,6 @@ class Kernel extends ConsoleKernel
*/
protected function schedule(Schedule $schedule): void
{
- $schedule->job(new IncrementAvailabilityMinutesJob)->everyMinute();
$schedule->job(new UpdateAvailabilityWithSchedulesJob)->everyThirtyMinutes();
}
diff --git a/backend/app/Http/Controllers/AvailabilityController.php b/backend/app/Http/Controllers/AvailabilityController.php
index d24bdf1..c21fbc7 100644
--- a/backend/app/Http/Controllers/AvailabilityController.php
+++ b/backend/app/Http/Controllers/AvailabilityController.php
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
+use App\Utils\Availability;
class AvailabilityController extends Controller
{
@@ -24,22 +25,11 @@ class AvailabilityController extends Controller
$user = $request->user();
}
- $user->available = $request->input("available", false);
- $user->availability_manual_mode = true;
- $user->save();
-
- return [
- "updated_user_id" => $user->id,
- "updated_user_name" => $user->name
- ];
+ return Availability::updateAvailability($user, $request->input("available", false));
}
public function updateAvailabilityManualMode(Request $request)
{
- $user = $request->user();
- $user->availability_manual_mode = $request->input("manual_mode", false);
- $user->save();
-
- return;
+ return Availability::updateAvailabilityManualMode($request->user(), $request->input("manual_mode", false));
}
}
diff --git a/backend/app/Jobs/IncrementAvailabilityMinutesJob.php b/backend/app/Jobs/IncrementAvailabilityMinutesJob.php
deleted file mode 100644
index 356c772..0000000
--- a/backend/app/Jobs/IncrementAvailabilityMinutesJob.php
+++ /dev/null
@@ -1,34 +0,0 @@
-where('available', 1)
- ->where('banned', 0)
- ->increment('availability_minutes');
- }
-}
diff --git a/backend/app/Models/User.php b/backend/app/Models/User.php
index c10f7a7..3f9e4be 100644
--- a/backend/app/Models/User.php
+++ b/backend/app/Models/User.php
@@ -56,6 +56,7 @@ class User extends Authenticatable
protected $casts = [
'email_verified_at' => 'datetime',
'last_access' => 'datetime',
+ 'last_availability_change' => 'datetime',
];
/**
diff --git a/backend/app/Telegram/WebhookController.php b/backend/app/Telegram/WebhookController.php
index df22752..f5c5e81 100644
--- a/backend/app/Telegram/WebhookController.php
+++ b/backend/app/Telegram/WebhookController.php
@@ -5,6 +5,8 @@ namespace App\Telegram;
use App\Models\TelegramBotLogins;
use App\Models\User;
+use App\Utils\Availability;
+
class WebhookController extends
\DefStudio\Telegraph\Handlers\WebhookHandler
{
@@ -118,9 +120,8 @@ class WebhookController extends
$this->reply("⚠️ Il tuo account Allerta non è collegato con Telegram.\nPer favore, eseguire il comando /start.");
return;
}
- $user->available = true;
- $user->availability_manual_mode = true;
- $user->save();
+
+ Availability::updateAvailability($user, true);
$this->reply("Disponibilità aggiornata con successo.\nOra sei operativo.");
}
@@ -130,9 +131,8 @@ class WebhookController extends
$this->reply("⚠️ Il tuo account Allerta non è collegato con Telegram.\nPer favore, eseguire il comando /start.");
return;
}
- $user->available = false;
- $user->availability_manual_mode = true;
- $user->save();
+
+ Availability::updateAvailability($user, false);
$this->reply("Disponibilità aggiornata con successo.\nOra sei non operativo.");
}
@@ -142,8 +142,8 @@ class WebhookController extends
$this->reply("⚠️ Il tuo account Allerta non è collegato con Telegram.\nPer favore, eseguire il comando /start.");
return;
}
- $user->availability_manual_mode = false;
- $user->save();
+
+ Availability::updateAvailabilityManualMode($user, false);
$this->reply("Programmazione oraria abilitata.\nPer disabilitarla (e tornare in modalità manuale), cambiare la disponbilità usando i comandi \"/attiva\" e \"/disattiva\"");
}
diff --git a/backend/app/Utils/Availability.php b/backend/app/Utils/Availability.php
new file mode 100644
index 0000000..c01ca14
--- /dev/null
+++ b/backend/app/Utils/Availability.php
@@ -0,0 +1,49 @@
+available;
+ $last_availability_change = $user->last_availability_change;
+ $new_last_availability_change = now();
+
+ //Increment only if the user was available and now is not
+ if(!is_null($last_availability_change) && $last_availability && !$available) {
+ $diff = $new_last_availability_change->diffInMinutes($last_availability_change);
+ if($diff > 0) $user->availability_minutes += $diff;
+ }
+
+ $user->available = $available;
+ $user->availability_manual_mode = true;
+ $user->last_availability_change = $new_last_availability_change;
+ $user->save();
+
+ return [
+ "updated_user_id" => $user->id,
+ "updated_user_name" => $user->name
+ ];
+ }
+
+ public static function updateAvailabilityManualMode(User|int $id, bool $manual_mode)
+ {
+ if(is_int($id)) {
+ $user = User::find($id);
+ } else {
+ $user = $id;
+ }
+ $user->availability_manual_mode = $manual_mode;
+ $user->save();
+
+ return;
+ }
+}
\ No newline at end of file
diff --git a/backend/database/migrations/2023_08_29_163731_add_last_availability_change_column.php b/backend/database/migrations/2023_08_29_163731_add_last_availability_change_column.php
new file mode 100644
index 0000000..d935340
--- /dev/null
+++ b/backend/database/migrations/2023_08_29_163731_add_last_availability_change_column.php
@@ -0,0 +1,28 @@
+timestamp('last_availability_change')->nullable()->after('availability_manual_mode');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::table('users', function (Blueprint $table) {
+ $table->dropColumn('last_availability_change');
+ });
+ }
+};