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\Console\Scheduling\Schedule;
|
||||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||||
use App\Jobs\IncrementAvailabilityMinutesJob;
|
|
||||||
use App\Jobs\UpdateAvailabilityWithSchedulesJob;
|
use App\Jobs\UpdateAvailabilityWithSchedulesJob;
|
||||||
|
|
||||||
class Kernel extends ConsoleKernel
|
class Kernel extends ConsoleKernel
|
||||||
|
@ -14,7 +13,6 @@ class Kernel extends ConsoleKernel
|
||||||
*/
|
*/
|
||||||
protected function schedule(Schedule $schedule): void
|
protected function schedule(Schedule $schedule): void
|
||||||
{
|
{
|
||||||
$schedule->job(new IncrementAvailabilityMinutesJob)->everyMinute();
|
|
||||||
$schedule->job(new UpdateAvailabilityWithSchedulesJob)->everyThirtyMinutes();
|
$schedule->job(new UpdateAvailabilityWithSchedulesJob)->everyThirtyMinutes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use App\Utils\Availability;
|
||||||
|
|
||||||
class AvailabilityController extends Controller
|
class AvailabilityController extends Controller
|
||||||
{
|
{
|
||||||
|
@ -24,22 +25,11 @@ class AvailabilityController extends Controller
|
||||||
$user = $request->user();
|
$user = $request->user();
|
||||||
}
|
}
|
||||||
|
|
||||||
$user->available = $request->input("available", false);
|
return Availability::updateAvailability($user, $request->input("available", false));
|
||||||
$user->availability_manual_mode = true;
|
|
||||||
$user->save();
|
|
||||||
|
|
||||||
return [
|
|
||||||
"updated_user_id" => $user->id,
|
|
||||||
"updated_user_name" => $user->name
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateAvailabilityManualMode(Request $request)
|
public function updateAvailabilityManualMode(Request $request)
|
||||||
{
|
{
|
||||||
$user = $request->user();
|
return Availability::updateAvailabilityManualMode($request->user(), $request->input("manual_mode", false));
|
||||||
$user->availability_manual_mode = $request->input("manual_mode", false);
|
|
||||||
$user->save();
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 = [
|
protected $casts = [
|
||||||
'email_verified_at' => 'datetime',
|
'email_verified_at' => 'datetime',
|
||||||
'last_access' => 'datetime',
|
'last_access' => 'datetime',
|
||||||
|
'last_availability_change' => 'datetime',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -5,6 +5,8 @@ namespace App\Telegram;
|
||||||
use App\Models\TelegramBotLogins;
|
use App\Models\TelegramBotLogins;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
|
||||||
|
use App\Utils\Availability;
|
||||||
|
|
||||||
class WebhookController extends
|
class WebhookController extends
|
||||||
\DefStudio\Telegraph\Handlers\WebhookHandler
|
\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>.");
|
$this->reply("⚠️ Il tuo account Allerta non è collegato con Telegram.\nPer favore, eseguire il comando <strong><i>/start</i></strong>.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$user->available = true;
|
|
||||||
$user->availability_manual_mode = true;
|
Availability::updateAvailability($user, true);
|
||||||
$user->save();
|
|
||||||
$this->reply("Disponibilità aggiornata con successo.\nOra sei <b>operativo</b>.");
|
$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>.");
|
$this->reply("⚠️ Il tuo account Allerta non è collegato con Telegram.\nPer favore, eseguire il comando <strong><i>/start</i></strong>.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$user->available = false;
|
|
||||||
$user->availability_manual_mode = true;
|
Availability::updateAvailability($user, false);
|
||||||
$user->save();
|
|
||||||
$this->reply("Disponibilità aggiornata con successo.\nOra sei <b>non operativo</b>.");
|
$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>.");
|
$this->reply("⚠️ Il tuo account Allerta non è collegato con Telegram.\nPer favore, eseguire il comando <strong><i>/start</i></strong>.");
|
||||||
return;
|
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\"");
|
$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