master
build-and-deploy / build-and-deploy (push) Successful in 4m38s
schedule-service
Self-hosted сервис адаптивного расписания дня, синхронизируемого с CalDAV-календарём (Baikal → нативная синхронизация с Календарём iPhone).
Идея
- Шаблон дня хранится в Postgres как набор блоков двух типов:
- RELATIVE — смещение от времени пробуждения (например, "завтрак: wake+105 мин")
- FIXED — жёсткая привязка к часу и дню недели (например, дейли в 10:15 по будням)
- По триггеру "проснулся" (через iOS Shortcuts →
POST /api/wake) сервис вычисляет реальные времена на сегодня и создаёт/обновляет события в Baikal через CalDAV. POST /api/shiftпересчитывает и сдвигает ещё не начавшиеся сегодняшние события.- Список покупок (
shopping_item) пополняется голосом через кастомный навык Алисы (вебхук/api/alice/webhook), читается бэкендом при наступлении блока категорииSHOPPING_TRIP. - Фронт на React для ручного администрирования шаблона — собирается в один jar вместе с бэкендом.
Стек
- Spring Boot 3.3, Java 17
- Spring Data JPA + PostgreSQL (
ddl-auto: update, без Flyway — осознанное упрощение для домашнего проекта) - RestTemplate + ical4j для CalDAV-синхронизации с Baikal
- React (сборка встраивается в
classpath:/static)
Текущий статус
Готово:
- Entities:
ScheduleBlock,ShoppingItem - Repositories
CaldavProperties/RestTemplateConfig- Базовый
application.yml
В работе / следующие шаги:
ScheduleCalculationService— расчёт конкретных времён на день из шаблонаCaldavSyncService— построение VEVENT (ical4j) и PUT в Baikal, детерминированный UID (напримерsha256(date + title)) для идемпотентного обновленияWakeController—POST /api/wake,POST /api/shiftScheduleBlockController,ShoppingController— CRUD для фронтаAliceWebhookController— приём команд от навыка Алисы- React-фронт для администрирования
- Dockerfile + манифесты Deployment/Service для k3s (namespace
media)
Локальный запуск
# 1. Прокинуть Postgres из кластера
kubectl port-forward -n media svc/postgres-postgresql 5432:5432
# 2. Создать БД и пользователя (один раз)
psql -h localhost -U postgres -c "CREATE DATABASE schedule;"
psql -h localhost -U postgres -c "CREATE USER schedule_user WITH PASSWORD 'changeme';"
psql -h localhost -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE schedule TO schedule_user;"
# 3. Поправить src/main/resources/application.yml (пароли caldav/db)
# 4. Запуск
mvn spring-boot:run
Baikal доступен напрямую по NodePort (192.168.1.100:30019), отдельный port-forward не нужен.
Референсные данные шаблона (обсуждены, вводятся вручную через фронт/API после его готовности)
Пробуждение ~9:00, отбой ~23:30. Полный список блоков и офсетов — см. историю разработки проекта, часть значений помечена как оценочная и подлежит уточнению по факту использования.
Статические события:
| Событие | Время | Дни |
|---|---|---|
| Дейли НСИ | 10:15 | будни |
| Дейли Mesh | 12:30 | будни |
| Созвон НСИ→ПГ | 15:00 | вторник |
Languages
JavaScript
89.5%
Java
8.7%
CSS
1.5%
Dockerfile
0.3%