Replace IncrementAvailabilityMinutesJob

This commit is contained in:
Matteo Gheza 2023-08-29 17:41:37 +02:00
parent df762afca5
commit d0e8dc6b0f
7 changed files with 89 additions and 57 deletions

View File

@ -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();
}

View File

@ -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));
}
}

View File

@ -1,34 +0,0 @@
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
class IncrementAvailabilityMinutesJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*/
public function __construct()
{
//
}
/**
* Execute the job.
*/
public function handle(): void
{
DB::table('users')
->where('available', 1)
->where('banned', 0)
->increment('availability_minutes');
}
}

View File

@ -56,6 +56,7 @@ class User extends Authenticatable
protected $casts = [
'email_verified_at' => 'datetime',
'last_access' => 'datetime',
'last_availability_change' => 'datetime',
];
/**

View File

@ -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 <strong><i>/start</i></strong>.");
return;
}
$user->available = true;
$user->availability_manual_mode = true;
$user->save();
Availability::updateAvailability($user, true);
$this->reply("Disponibilità aggiornata con successo.\nOra sei <b>operativo</b>.");
}
@ -130,9 +131,8 @@ class WebhookController extends
$this->reply("⚠️ Il tuo account Allerta non è collegato con Telegram.\nPer favore, eseguire il comando <strong><i>/start</i></strong>.");
return;
}
$user->available = false;
$user->availability_manual_mode = true;
$user->save();
Availability::updateAvailability($user, false);
$this->reply("Disponibilità aggiornata con successo.\nOra sei <b>non operativo</b>.");
}
@ -142,8 +142,8 @@ class WebhookController extends
$this->reply("⚠️ Il tuo account Allerta non è collegato con Telegram.\nPer favore, eseguire il comando <strong><i>/start</i></strong>.");
return;
}
$user->availability_manual_mode = false;
$user->save();
Availability::updateAvailabilityManualMode($user, false);
$this->reply("Programmazione oraria <b>abilitata</b>.\nPer disabilitarla (e tornare in modalità manuale), cambiare la disponbilità usando i comandi \"/attiva\" e \"/disattiva\"");
}

View File

@ -0,0 +1,49 @@
<?php
namespace App\Utils;
use App\Models\User;
class Availability {
public static function updateAvailability(User|int $id, bool $available)
{
if(is_int($id)) {
$user = User::find($id);
} else {
$user = $id;
}
$last_availability = $user->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;
}
}

View File

@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->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');
});
}
};