%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/geotechnics/api/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
Current File : /var/www/html/geotechnics/api/app/Http/Controllers/Api/v1/ChatsController.php

<?php

namespace App\Http\Controllers\Api\v1;


use App\Http\Controllers\Api\ApiController;
use App\Models\Project;
use App\Models\ProjectNote;
use App\Models\Reciption;
use App\Models\User;
use App\Transformers\ChatMessageTransformer;
use App\Transformers\ChatTransformer;
use Carbon\Carbon;
use Illuminate\Http\Request;

class ChatsController extends ApiController
{
    public function chats()
    {
        $user = $this->getLoggedInUser();
        $projects = Project::query()
                           ->whereHas('notes');
        if (!$user->isAdmin()) {
            $projects = $projects->where('client_id', $user->id);
        }
        return $this->collection($projects->get(), new ChatTransformer());
    }

    public function chatMessages(Project $project)
    {
        $user = $project->getLoggedInUser();
        $notes = $project->notes()
                         ->get();
        Reciption::setLastReadAt($project, $user);
        return $this->collection($notes, new ChatMessageTransformer());
    }

    public function sendMessage(Request $request, Project $project)
    {
        /** @var ProjectNote $note */
        $note = $project->notes()
                        ->make([
                            'message' => $request->get('message'),
                        ]);
        $user = $note->getLoggedInUser();
        $note->user()
             ->associate($user);
        $note->save();
        $project->updated_at = Carbon::now();
        $project->save();
        Reciption::setLastReadAt($project, $user);
        return $this->item($note, new ChatMessageTransformer());
    }

    public function getUnreadCount()
    {
        /** @var User $user */
        $user = auth()
            ->guard('api')
            ->user();
        return response()->json([
            'unread_messages' => $user->getUnreadCount(),
        ], 200);
    }

}

Zerion Mini Shell 1.0