55 lines
1.4 KiB
PHP
55 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Prunable;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
|
|
/**
|
|
* Un élève demande à rejoindre une classe avec son code (façon n°1 du
|
|
* CLAUDE.md) ; le prof accepte ou refuse. Données minimales : prénom, nom
|
|
* facultatif. Supprimée dès que l'élève a vu son code, ou au bout d'une heure.
|
|
*/
|
|
class DemandeInscription extends Model
|
|
{
|
|
use Prunable;
|
|
|
|
public const EN_ATTENTE = 'en_attente';
|
|
|
|
public const ACCEPTEE = 'acceptee';
|
|
|
|
public const REFUSEE = 'refusee';
|
|
|
|
protected $table = 'demandes_inscription';
|
|
|
|
protected $fillable = ['classe_id', 'prenom', 'nom', 'jeton_empreinte', 'statut'];
|
|
|
|
protected $casts = [
|
|
'code_secret_chiffre' => 'encrypted',
|
|
];
|
|
|
|
/** @return BelongsTo<Classe, $this> */
|
|
public function classe(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Classe::class);
|
|
}
|
|
|
|
/** @return BelongsTo<Eleve, $this> */
|
|
public function eleve(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Eleve::class);
|
|
}
|
|
|
|
public static function empreinte(string $jeton): string
|
|
{
|
|
return hash('sha256', $jeton);
|
|
}
|
|
|
|
/** @return Builder<self> */
|
|
public function prunable(): Builder
|
|
{
|
|
return static::where('created_at', '<', now()->subHour());
|
|
}
|
|
}
|