andriiosmak/laravel-layer-sdk

View on GitHub
src/Routers/Router.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Aosmak\Laravel\Layer\Sdk\Routers;

use Aosmak\Laravel\Layer\Sdk\Traits\ContainerTrait;

/**
 * Class Router
 * @package namespace Aosmak\Laravel\Layer\Sdk\Routers
 */
class Router implements RouterInterface
{
    use ContainerTrait;

    /**
     * Application ID
     *
     * @var string application ID
     */
    protected $appId;

    /**
     * Set an application ID
     *
     * @param string $appId application ID
     *
     * @return void
     */
    public function setAppId(string $appId): void
    {
        $this->appId = $appId;
    }

    /**
     * Generate a request URL
     *
     * @param integer $id user ID
     * @param array $data user data
     *
     * @return string
     */
    public function genereteURL(string $url, array $data): string
    {
        $data[':app_id'] = $this->appId;

        if (!empty($url)) {
            $url = '/' . $url;
        }

        return str_replace(array_keys($data), $data, ':app_id' . $url);
    }

    /**
     * Get a URL
     *
     * @param string $pattern base uri pattern
     * @param string $entityId entity ID
     * @param string $path path
     *
     * @return string
     */
    public function getShortUrl(string $pattern, string $entityId = null, string $path = null): string
    {
        if (!empty($entityId)) {
            $pattern = implode([$pattern, '/:entity_id']);
        }

        if (!empty($path)) {
            $pattern = implode([
                $pattern,
                '/',
                $path
            ]);
        }

        return $this->genereteURL($pattern, [':entity_id' => $entityId]);
    }

    /**
     * Get a content URL
     *
     * @param string $conversationId user ID
     * @param string $contentId contentId content item ID
     *
     * @return string
     */
    public function getContentUrl(string $conversationId, string $contentId): string
    {
        return $this->genereteURL('conversations/:conversation_id/content/:content_id', [
            ':conversation_id' => $conversationId,
            ':content_id'      => $contentId
        ]);
    }

    /**
     * Send message URL
     *
     * @param string $userId user ID
     * @param string $conversationId conversation ID
     *
     * @return string
     */
    public function sendMessagesURL(string $userId, string $conversationId): string
    {
        return $this->genereteURL('users/:user_id/conversations/:conversation_id/messages', [
            ':user_id'         => $userId,
            ':conversation_id' => $conversationId,
        ]);
    }

    /**
     * Get user message receipts URL
     *
     * @param string $userId user ID
     * @param string $messageId message ID
     *
     * @return string
     */
    public function getMessageReceiptsURL(string $userId, string $messageId): string
    {
        return $this->genereteURL('users/:user_id/messages/:message_id/receipts', [
            ':user_id'    => $userId,
            ':message_id' => $messageId,
        ]);
    }

    /**
     * Get a user message URL
     *
     * @param string $userId user ID
     * @param string $messageId message ID
     *
     * @return string
     */
    public function deleteMessageURL(string $userId, string $messageId): string
    {
        return $this->genereteURL('users/:user_id/messages/:message_id?mode=all_participants', [
            ':user_id'    => $userId,
            ':message_id' => $messageId,
        ]);
    }

    /**
     * Get a message URL
     *
     * @param string $messageId message ID
     * @param string $conversationId user ID
     *
     * @return string
     */
    public function getMessageURL(string $messageId, string $conversationId): string
    {
        return $this->genereteURL('conversations/:conversation_id/messages/:message_id', [
            ':conversation_id' => $conversationId,
            ':message_id'      => $messageId
        ]);
    }
}