From 59c1951a821c64c95ace45af7fcc43c027a3d090 Mon Sep 17 00:00:00 2001 From: Lexx YungCarter Date: Mon, 17 Jan 2022 10:32:57 +0300 Subject: [PATCH] feat: added API Resources: MessageResource[Collection], ThreadResource[Collection] --- src/Models/Thread.php | 12 +++++-- src/Resources/MessageResource.php | 31 ++++++++++++++++ src/Resources/MessageResourceCollection.php | 19 ++++++++++ src/Resources/ThreadResource.php | 39 +++++++++++++++++++++ src/Resources/ThreadResourceCollection.php | 19 ++++++++++ 5 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 src/Resources/MessageResource.php create mode 100644 src/Resources/MessageResourceCollection.php create mode 100644 src/Resources/ThreadResource.php create mode 100644 src/Resources/ThreadResourceCollection.php diff --git a/src/Models/Thread.php b/src/Models/Thread.php index fc7ec66..cfc95fa 100644 --- a/src/Models/Thread.php +++ b/src/Models/Thread.php @@ -25,14 +25,22 @@ class Thread extends Eloquent * * @var array */ - protected $fillable = ['subject', 'slug', 'start_date', 'end_date', 'max_participants', 'avatar']; + protected $fillable = [ + 'subject', 'slug', + 'start_date', 'end_date', + 'max_participants', 'avatar', + ]; /** * The attributes that should be mutated to dates. * * @var array */ - protected $dates = ['deleted_at']; + protected $dates = [ + 'deleted_at', + 'start_date', + 'end_date', + ]; /** * Internal cache for creator. diff --git a/src/Resources/MessageResource.php b/src/Resources/MessageResource.php new file mode 100644 index 0000000..502715e --- /dev/null +++ b/src/Resources/MessageResource.php @@ -0,0 +1,31 @@ + (int) $this->id, + 'body' => $this->body, + 'user_id' => $this->user_id, + 'thread_id' => $this->thread_id, + + 'name' => optional($this->user)->name ?? null, + 'user_avatar' => optional($this->user)->avatar_url, + + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'deleted_at' => $this->deleted_at, + ]; + } +} diff --git a/src/Resources/MessageResourceCollection.php b/src/Resources/MessageResourceCollection.php new file mode 100644 index 0000000..e10ef84 --- /dev/null +++ b/src/Resources/MessageResourceCollection.php @@ -0,0 +1,19 @@ +collection; + } +} diff --git a/src/Resources/ThreadResource.php b/src/Resources/ThreadResource.php new file mode 100644 index 0000000..cc0cccc --- /dev/null +++ b/src/Resources/ThreadResource.php @@ -0,0 +1,39 @@ + (int) $this->id, + 'subject' => $this->subject, + 'slug' => $this->slug, + 'start_date' => $this->start_date, + 'end_date' => $this->end_date, + 'max_participants' => $this->max_participants, + 'avatar' => $this->avatar, + + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'deleted_at' => $this->deleted_at, + + 'unread_count' => $this->userUnreadMessagesCount(auth()->id()), + 'latest_message' => optional($this->latestMessage)->body ?? null, + 'creator' => optional($this->creator())->name, + 'creator_avatar' => optional($this->creator())->avatar_url, + 'participants' => $this->participantsString(auth()->id()), + + 'messages' => MessageResource::collection($this->whenLoaded('messages')), + ]; + } +} diff --git a/src/Resources/ThreadResourceCollection.php b/src/Resources/ThreadResourceCollection.php new file mode 100644 index 0000000..4172698 --- /dev/null +++ b/src/Resources/ThreadResourceCollection.php @@ -0,0 +1,19 @@ +collection; + } +}