losthost / reminders
PHP библиотека для управления напоминаниями
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/losthost/reminders
Requires
- losthost/db: ~3.5
Requires (Dev)
- phpunit/phpunit: ~11.5
This package is auto-updated.
Last update: 2025-12-15 07:29:55 UTC
README
PHP библиотека для управления напоминаниями с поддержкой откладывания (snooze), массовых операций и периодических рассылок.
Установка
composer require losthost/reminders
Быстрый старт
use losthost\Reminders\Reminder; use losthost\Reminders\ReminderService; // Инициализация таблицы Reminder::initDataStructure(); // Создание напоминания $reminder = Reminder::create( 'user_123', // ID объекта 'telegram_bot', // ID проекта 'Позвонить клиенту', // Заголовок new DateTimeImmutable('+1 hour'), // Когда напомнить 'Обсудить договор', // Описание (опционально) 'data1', // Доп. данные 1 (опционально) 'data2' // Доп. данные 2 (опционально) ); // Получение созревших напоминаний $due = ReminderService::getDue(); while ($reminder = $due->next()) { // Отправить уведомление... $reminder->markDone(); } // Отложить напоминание на 30 минут $reminder->snooze(30); // Отметить выполненным $reminder->markDone(); // Отменить $reminder->cancel(); // Сбросить на исходное время $reminder->reset();
Архитектура
Сущности
Reminder - основная сущность:
id- уникальный IDobject- идентификатор объекта (VARCHAR(64))project- идентификатор проекта (VARCHAR(64))subject- заголовокdescription- описаниеremind_at- исходное время напоминанияremind_next- следующее срабатывание (меняется при snooze)status- статус: pending/done/cancellednotified_at- когда отправлено уведомление (для клиента)data1,data2- резервные поля для клиентаcreated_at- дата создания
Особенности
- Автоматический
write()при изменении полей существующих объектов - Автоматический сброс
notified_atпри измененииremind_next - Константы статусов для type safety
- Поддержка периодических рассылок через поле
notified_at
Сервисные методы
// Получить все созревшие напоминания ReminderService::getDue(); // Получить созревшие для конкретного объекта/проекта ReminderService::getDueFor('user_123', 'telegram_bot'); // Получить созревшие неотправленные напоминания ReminderService::getDueUnnotified(); // Получить список пар object/project с созревшими напоминаниями ReminderService::getObjectsWithDue(); // Получить все напоминания для объекта/проекта ReminderService::getFor('user_123', 'telegram_bot'); // Получить с фильтром по статусу ReminderService::getFor('user_123', 'telegram_bot', Reminder::STATUS_PENDING); // Количество pending напоминаний ReminderService::countPending(); ReminderService::countPending('telegram_bot'); // по проекту // Отменить все pending для объекта/проекта ReminderService::cancelAllFor('user_123', 'telegram_bot');
Использование для периодических рассылок
// В кроне каждую минуту $unnotified = ReminderService::getDueUnnotified(); while ($reminder = $unnotified->next()) { sendNotification($reminder); $reminder->notified_at = new DateTimeImmutable(); }
Требования
- PHP 8.0+
- MySQL/MariaDB
- Библиотека losthost/db
Лицензия
MIT