Dépôt de fichier en plus du texte libre pour les devoirs maison, stocké sur Hetzner Object Storage (jamais sur le disque du serveur), masqué côté élève tant que le bucket n'est pas configuré. Purge RGPD étendue pour supprimer aussi les fichiers d'Object Storage. Ansible lit les identifiants depuis un fichier que seul Adam peut créer sur le serveur (runbook docs/runbooks/stockage-s3.md) ; le bloc B du CLAUDE.md est maintenant complet. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
35 lines
834 B
PHP
35 lines
834 B
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
|
|
class RenduDevoir extends Model
|
|
{
|
|
protected $table = 'rendus_devoirs';
|
|
|
|
protected $fillable = ['devoir_id', 'eleve_id', 'reponse', 'fichier_chemin', 'fichier_nom_original', 'fichier_taille_octets', 'note', 'rendu_a'];
|
|
|
|
protected $casts = [
|
|
'rendu_a' => 'datetime',
|
|
'note' => 'integer',
|
|
];
|
|
|
|
/** @return BelongsTo<Devoir, $this> */
|
|
public function devoir(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Devoir::class);
|
|
}
|
|
|
|
/** @return BelongsTo<Eleve, $this> */
|
|
public function eleve(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Eleve::class);
|
|
}
|
|
|
|
public function aUnFichier(): bool
|
|
{
|
|
return $this->fichier_chemin !== null;
|
|
}
|
|
}
|