feat: Implement chat functionality

This commit is contained in:
Daan Meijer
2026-06-15 00:40:24 +02:00
parent 8f2cf8e642
commit f8ee8165ff
16 changed files with 349 additions and 2 deletions
+24
View File
@@ -0,0 +1,24 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphTo;
class Chat extends Model
{
/** @use HasFactory<\Database\Factories\ChatFactory> */
use HasFactory;
public function chatable(): MorphTo
{
return $this->morphTo();
}
public function messages(): HasMany
{
return $this->hasMany(Message::class);
}
}
+13
View File
@@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphOne;
class Dynamic extends Model
{
@@ -27,4 +28,16 @@ class Dynamic extends Model
{
return $this->hasMany(Ledger::class);
}
public function chat(): MorphOne
{
return $this->morphOne(Chat::class, 'chatable');
}
protected static function booted(): void
{
static::created(function (Dynamic $dynamic) {
$dynamic->chat()->create([]);
});
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Message extends Model
{
/** @use HasFactory<\Database\Factories\MessageFactory> */
use HasFactory;
protected $fillable = [
'chat_id',
'user_id',
'content',
];
public function chat(): BelongsTo
{
return $this->belongsTo(Chat::class);
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
}
+13
View File
@@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphOne;
class Mutation extends Model
{
@@ -30,4 +31,16 @@ class Mutation extends Model
{
return $this->belongsTo(User::class);
}
public function chat(): MorphOne
{
return $this->morphOne(Chat::class, 'chatable');
}
protected static function booted(): void
{
static::created(function (Mutation $mutation) {
$mutation->chat()->create([]);
});
}
}