DEF STUDIO srl

Telegraph Entities Storage

Telegraph offers a quick, multi driver, data storage solution to save and retrieve information about Bots, Chats and Users. A fine grained configuration is available in the storage section of Telegraph configuration file

Storages Available

Telegraph implements, by default, contextual storage for Bots, Chats and User DTOs. Additionally a storage can be added to every class, it is only needed to implement the \DefStudio\Telegraph\Contracts\Storable contract and use the \DefStudio\Telegraph\Concerns\HasStorage trait:

class MyCustomClass implements \DefStudio\Telegraph\Contracts\Storable
{
    use \DefStudio\Telegraph\Concerns\HasStorage;

    public function storageKey(): string|int
    {
        return "MyCustomClass instance unique ID";
    }
}

Bot Storage

TelegraphBots data storage is available through its ->storage() method

/** @var \DefStudio\Telegraph\Models\TelegraphBot $telegraphBot */
$telegraphBot->storage()->set('last_chat', '1254824');

$lastChatId = $telegraphBot->storage()->get('last_chat'); // 1254824

$telegraphBot->forget('last_chat') //stored data is deleted

Chat Storage

TelegraphChats data storage is available through its ->storage() method

/** @var \DefStudio\Telegraph\Models\TelegraphChat $telegraphChat */
$telegraphChat->storage()->set('last_message', 'hello!');

$lastMessage = $telegraphChat->storage()->get('last_message'); // 1254824

$lastMessage->forget('last_message') //stored data is deleted

User DTO Storage

User DTO data storage is available through its ->storage() method

/** @var \App\Models\User $user */
/** @var \DefStudio\Telegraph\DTO\User $telegraphUser */
$telegraphUser->storage()->set('laravel_user_id', $user->id);

$userId = $telegraphUser->storage()->get('laravel_user_id'); // 99

$userId->forget('laravel_user_id') //stored data is deleted

Using different Storage drivers

Depending on the application needs, multiple drivers can be configured and used.

Default driver

A default storage driver can be set in telegraph.storage.default config and it will be used when ->storage() is invoked without arguments:

// /config/telegraph.php

return [
    // ...

    'storage' => [
        'default' => 'file'
    ]
]
$telegraphUser->storage() // \DefStudio\Telegraph\Storage\FileStorageDriver

File Storage Driver

A file storage driver saves data in json files inside the disk/folder defined in Telegraph configuration file

// /config/telegraph.php

return [
    // ...

    'storage' => [
        'stores' => [
            'file' => [
                'driver' => \DefStudio\Telegraph\Storage\FileStorageDriver::class,
                'disk' => 'local',
                'root' => 'telegraph',
            ]
        ]       
    ]
]

with the above configuration this code will store the name value in a /[laravel local disk path]/telegraph/User/<telegraph_user_id>.json file

$telegraphUser->storage('file')->put('name', 'Daniele');

Cache Storage Driver

A cache storage driver saves data using Laravel Cache system following Telegraph configuration file

// /config/telegraph.php

return [
    // ...

    'storage' => [
        'stores' => [
            'cache' => [
                'driver' => \DefStudio\Telegraph\Storage\CacheStorageDriver::class,
                'store' => 'redis',
                'key_prefix' => 'tgph',
            ]
        ]       
    ]
]

with the above configuration this code will store the name value inside Laravel Redis Cache

$telegraphUser->storage('cache')->put('name', 'Daniele');

Storing models

Telegraph can store model references as well: when a model is found inside data stored, it is internally converted in a class/id pair and the model is retrieved from DB when the value is fetched:

/** @var \DefStudio\Telegraph\DTO\User $telegraphUser */
$systemUser = \App\Models\User::where('username', $telegraphUser->username());

$telegraphUser->storage()->set('system_data.user', $systemUser);

$telegraphUser->storage()->get('system_data.user') // will return an Instance of \App\Models\User 
Suggest a change
Last updated 02 December 2024