Paillasse/portail/app/Models/FilConversation.php

58 lines
1.6 KiB
PHP
Raw Normal View History

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
/**
* Chat Messenger élève ↔ prof de sa classe (règles d'Adam, 2026-10-13) :
* un seul fil par élève, jamais de message privé entre élèves.
*/
class FilConversation extends Model
{
protected $table = 'fils_conversation';
protected $fillable = ['classe_id', 'eleve_id', 'lu_par_prof_a', 'lu_par_eleve_a'];
protected $casts = [
'lu_par_prof_a' => 'datetime',
'lu_par_eleve_a' => 'datetime',
];
/** @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);
}
/** @return HasMany<MessageChat, $this> */
public function messages(): HasMany
{
return $this->hasMany(MessageChat::class)->orderBy('created_at');
}
public function nonLusPourProf(): int
{
return $this->messages()
->where('expediteur', MessageChat::ELEVE)
->when($this->lu_par_prof_a, fn ($q) => $q->where('created_at', '>', $this->lu_par_prof_a))
->count();
}
public function nonLusPourEleve(): int
{
return $this->messages()
->where('expediteur', MessageChat::PROF)
->when($this->lu_par_eleve_a, fn ($q) => $q->where('created_at', '>', $this->lu_par_eleve_a))
->count();
}
}