Replace IncrementAvailabilityMinutesJob
This commit is contained in:
parent
df762afca5
commit
d0e8dc6b0f
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
}
|
|
@ -56,6 +56,7 @@ class User extends Authenticatable
|
|||
protected $casts = [
|
||||
'email_verified_at' => 'datetime',
|
||||
'last_access' => 'datetime',
|
||||
'last_availability_change' => 'datetime',
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
@ -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\"");
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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');
|
||||
});
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue