PHPackages                             losthost/reminders - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. losthost/reminders

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

losthost/reminders
==================

PHP библиотека для управления напоминаниями

1.1.0b(5mo ago)04MITPHP

Since Dec 14Pushed 5mo agoCompare

[ Source](https://github.com/Datahider/Reminders)[ Packagist](https://packagist.org/packages/losthost/reminders)[ RSS](/packages/losthost-reminders/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (3)Dependencies (2)Versions (4)Used By (0)

losthost/reminders
==================

[](#losthostreminders)

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` - уникальный ID
- `object` - идентификатор объекта (VARCHAR(64))
- `project` - идентификатор проекта (VARCHAR(64))
- `subject` - заголовок
- `description` - описание
- `remind_at` - исходное время напоминания
- `remind_next` - следующее срабатывание (меняется при snooze)
- `status` - статус: pending/done/cancelled
- `notified_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](https://github.com/losthost/db)

Лицензия
--------

[](#лицензия)

MIT

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance73

Regular maintenance activity

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

3

Last Release

154d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/d6034471e592d56036961af1cc7ae309cdc332e5eaae18b86c2d9ecde0aae773?d=identicon)[pio](/maintainers/pio)

---

Top Contributors

[![Datahider](https://avatars.githubusercontent.com/u/29582937?v=4)](https://github.com/Datahider "Datahider (4 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/losthost-reminders/health.svg)

```
[![Health](https://phpackages.com/badges/losthost-reminders/health.svg)](https://phpackages.com/packages/losthost-reminders)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
