Космическая платформа для развития и мотивации
- Java 17+
- Node.js 18+
- Docker & Docker Compose
- Maven 3.9+
-
Клонируйте репозиторий
git clone <repository-url> cd alabuga
-
Запустите тестовую базу данных
docker-compose up -d- Запустите backend (Java)
cd backend
mvn spring-boot:run- При первом запуске автоматически применятся миграции Liquibase
- API будет доступно на
http://localhost:8080
- Запустите frontend (React)
cd frontend
npm install
npm start- Приложение будет доступно на
http://localhost:3000
Для входа используйте следующие тестовые учётные записи:
- Логин:
admin, Пароль:admin - Логин:
user, Пароль:user
Авторизация выполняется через модальное окно на лендинге.
erDiagram
USERS {
bigint id PK
varchar login UK
varchar email
varchar password_hash
varchar first_name
varchar last_name
varchar role
integer rank
integer experience
integer energy
integer branch_id FK
boolean is_active
timestamp created_at
timestamp updated_at
}
BRANCHES {
bigint id PK
varchar name
varchar description
boolean is_active
}
RANKS {
bigint id PK
varchar name
integer level
varchar branch
text description
integer required_experience
}
MISSIONS {
bigint id PK
varchar name
text description
varchar difficulty
integer experience_reward
integer energy_reward
boolean requires_moderation
boolean is_active
integer required_experience
integer required_rank
varchar type
}
USER_MISSIONS {
bigint id PK
bigint user_id FK
bigint mission_id FK
varchar status
integer progress
text notes
timestamp started_at
timestamp completed_at
}
COMPETENCIES {
bigint id PK
varchar name
text description
boolean is_active
}
USER_COMPETENCIES {
bigint id PK
bigint user_id FK
bigint competency_id FK
integer points
integer level
integer max_points
}
ARTIFACTS {
bigint id PK
varchar name
text description
varchar rarity
varchar image_url
boolean is_active
}
USER_ARTIFACTS {
bigint id PK
bigint user_id FK
bigint artifact_id FK
boolean is_equipped
timestamp obtained_at
}
SHOP_ITEMS {
bigint id PK
varchar name
text description
integer price
boolean available
}
USER_PURCHASES {
bigint id PK
bigint user_id FK
bigint shop_item_id FK
integer price_paid
integer energy_after
timestamp purchased_at
}
CARDS {
bigint id PK
varchar name
varchar series_name
varchar front_image_url
text back_description
varchar rarity
text unlock_condition
integer unlock_rank
boolean is_active
}
USER_CARDS {
bigint id PK
bigint user_id FK
bigint card_id FK
timestamp obtained_at
boolean is_new
}
NOTIFICATIONS {
bigint id PK
bigint user_id FK
varchar type
varchar title
text message
boolean is_read
timestamp created_at
}
USERS ||--o{ USER_MISSIONS : "has"
MISSIONS ||--o{ USER_MISSIONS : "assigned_to"
USERS ||--o{ USER_COMPETENCIES : "has"
COMPETENCIES ||--o{ USER_COMPETENCIES : "belongs_to"
USERS ||--o{ USER_ARTIFACTS : "owns"
ARTIFACTS ||--o{ USER_ARTIFACTS : "owned_by"
USERS ||--o{ USER_PURCHASES : "makes"
SHOP_ITEMS ||--o{ USER_PURCHASES : "purchased"
USERS ||--o{ USER_CARDS : "collects"
CARDS ||--o{ USER_CARDS : "collected_by"
USERS ||--o{ NOTIFICATIONS : "receives"
BRANCHES ||--o{ USERS : "belongs_to"
%%{init: {
'theme': 'dark',
'themeVariables': {
'primaryColor': '#0b1320',
'primaryBorderColor': '#22d3ee',
'primaryTextColor': '#e6f7ff',
'lineColor': '#22d3ee',
'secondaryColor': '#0f172a',
'tertiaryColor': '#0f172a'
}
}}%%
graph TB
%% --------- КЛАССЫ ---------
classDef neon fill:#0b1320,stroke:#22d3ee,stroke-width:1.5px,color:#e6f7ff;
classDef neonSoft fill:#0f172a,stroke:#22d3ee,stroke-dasharray:3 3,color:#c7e9fb,stroke-width:1.2px;
classDef pill fill:#0b1320,stroke:#60a5fa,color:#e6f7ff,stroke-width:1.2px;
linkStyle default stroke:#22d3ee,stroke-width:1.3px;
%% --------- ФРОНТЕНД ---------
subgraph FE[Frontend React+TS]
direction TB
FE_LP[Стартовый экран]:::neon --> FE_HOME[Домашний экран]:::neon
FE_HOME --> FE_DASH[Дэшборд]:::neon
FE_DASH --> FE_PROFILE[Профиль]:::neon
FE_DASH --> FE_CREW[Экипаж]:::neon
FE_DASH --> FE_MISS[Миссии]:::neon
FE_DASH --> FE_SHIP[Корабль]:::neon
FE_DASH --> FE_ADMIN[Админ]:::neon
subgraph FE_UI[UI Компоненты]
direction LR
UI_BG[AnimatedBackground]:::pill
UI_BTN[MainButton]:::pill
UI_SHINY[ShinyText]:::pill
UI_NOTE[NotificationPanel]:::pill
UI_GOOSE[Goose Assistant]:::pill
end
subgraph FE_UTIL[Хуки и утилиты]
direction LR
FE_NOTIF[useNotifications]:::neonSoft
FE_ERR[errorHandler]:::neonSoft
FE_API[API Client]:::neonSoft
end
end
%% --------- БЭКЕНД ---------
subgraph BE[Backend Spring Boot]
direction TB
BE_AUTH[AuthController]:::neon
BE_USER[UserController]:::neon
BE_MISS[MissionController]:::neon
BE_SHOP[ShopController]:::neon
BE_RANK[RankController]:::neon
BE_CARD[CardController]:::neon
BE_MSG[MessageController]:::neon
subgraph BE_SVC[Сервисы]
direction LR
S_USER[UserService]:::pill
S_MISS[MissionService]:::pill
S_NOTE[NotificationService]:::pill
S_RANK[RankService]:::pill
S_SHOP[ShopService]:::pill
end
subgraph BE_REP[Репозитории]
direction LR
R_USER[UserRepository]:::neonSoft
R_MISS[MissionRepository]:::neonSoft
R_RANK[RankRepository]:::neonSoft
R_SHOP[ShopRepository]:::neonSoft
end
end
%% --------- ВНЕШНИЕ СИСТЕМЫ ---------
subgraph EXT[Внешние сервисы]
EXT_TG[Telegram Bot API]:::neon
EXT_DB[(PostgreSQL)]:::neon
end
%% --------- TELEGRAM APP ---------
subgraph TG_APP[Telegram приложение]
TG_GAME[Tap игра с гусем Гага]:::neon
TG_BOT[Интерфейс бота]:::neon
end
%% --------- СВЯЗИ (FE → BE) ---------
FE_LP --> BE_AUTH
FE_PROFILE --> BE_USER
FE_MISS --> BE_MISS
FE_ADMIN --> BE_USER
FE_ADMIN --> BE_MISS
FE_SHIP --> BE_CARD
%% --------- СВЯЗИ (BE ВНУТРИ) ---------
BE_AUTH --> S_USER
BE_USER --> S_USER
BE_MISS --> S_MISS
BE_SHOP --> S_SHOP
BE_RANK --> S_RANK
S_USER --> R_USER
S_MISS --> R_MISS
S_RANK --> R_RANK
S_SHOP --> R_SHOP
%% --------- ХРАНИЛИЩЕ ---------
R_USER --> EXT_DB
R_MISS --> EXT_DB
R_RANK --> EXT_DB
R_SHOP --> EXT_DB
%% --------- TELEGRAM ИНТЕГРАЦИЯ ---------
TG_BOT --> EXT_TG
TG_GAME --> TG_BOT
- Авторизация: Упрощённая система с заглушкой для тестирования
- Роли: ADMIN, USER с разными уровнями доступа
- Профили: Полная информация о пользователе, статистика, компетенции
- Ветки развития: Различные направления карьерного роста
- Ранги: 11 уровней от "Космо-Кадета" до "Хранителя Станции"
- Опыт: Начисление за выполнение миссий и активность
- Прогресс-бары: Визуализация прогресса до следующего ранга
- Требования: Система требований для повышения ранга
- Типы миссий: Различные категории с разной сложностью
- Статусы: NOT_STARTED, IN_PROGRESS, COMPLETED, FAILED
- Модерация: Миссии, требующие подтверждения администратора
- Награды: Опыт и энергон за выполнение
- Прогресс: Отслеживание выполнения с заметками
- 9 базовых компетенций: От "Силы Миссии" до "Курса Аэронавигации"
- Уровни: Прокачка от 0 до 500 очков
- Визуализация: Прогресс-бары с анимацией
- Подсказки: Описания каждой компетенции
- Коллекционирование: Различные артефакты с редкостью
- Экипировка: Возможность экипировать артефакты
- Визуализация: Карточки с изображениями и описаниями
- Редкость: Система редкости артефактов
- Товары: Различные предметы за энергон
- Покупки: История покупок пользователя
- Энергон: Внутренняя валюта системы
- Доступность: Управление доступностью товаров
- Коллекционирование: Карты по сериям
- Редкость: Различные уровни редкости
- Условия разблокировки: Требования для получения
- Новые карты: Отметка о новых полученных картах
- Общий рейтинг: По опыту за всё время
- Недельный рейтинг: По опыту за последние 7 дней
- Топ-3: Специальные карточки для лидеров
- Таблица: Полный рейтинг с бейджами для топ-10
- Типы: Различные категории уведомлений
- Прочтение: Отметка о прочтении
- История: Сохранение всех уведомлений
- Панель: Удобный интерфейс для просмотра
- Анимации: Framer Motion для плавных переходов
- Космическая тематика: Единый стиль интерфейса
- Адаптивность: Поддержка различных устройств
- Тёмная тема: Космический дизайн
- Мотивация: 60+ фраз для мотивации пользователей
- Рандомность: Появление раз в 2 минуты
- Персонализация: Приветствие при первом заходе
- Интерактивность: Дополнительные фразы "alabu-ga-ga"
- Управление пользователями: CRUD операции
- Управление миссиями: Создание, редактирование, удаление
- Модерация: Подтверждение выполнения миссий
- Статистика: Просмотр данных пользователей
- Магазин: Управление товарами
- Конструктор викторин: Создание интерактивных викторин
- Система событий: Временные мероприятия и челленджи
- Календарь событий: Планирование и уведомления
- Награды за участие: Специальные награды за события
- Дашборд аналитики: Графики и метрики активности
- Отчёты по пользователям: Детальная статистика
- Тренды: Анализ популярности миссий и компетенций
- Экспорт данных: Возможность экспорта статистики
- Гранулярные права: Детальная настройка доступа
- Роли по веткам: Специализированные роли
- Менторство: Система наставничества
- Командные роли: Роли в рамках команд
- Команды: Создание и управление командами
- Друзья: Система друзей и подписок
- Чат: Внутренний мессенджер
- Достижения: Система достижений и бейджей
- Микросервисная архитектура: Разделение на сервисы
- Кэширование: Redis для повышения производительности
- Мониторинг: Интеграция с системами мониторинга
- CI/CD: Автоматизация развёртывания
- React Native: Кроссплатформенное мобильное приложение
- Push-уведомления: Уведомления о миссиях и событиях
- Офлайн-режим: Работа без интернета
- Синхронизация: Синхронизация данных между устройствами
Ниже приведён консолидированный список основных REST‑эндпоинтов (по контроллерам).
POST /api/auth/login— вход в систему (упрощённо: по логину)POST /api/auth/validate— валидация сессии и получение текущего пользователя
GET /api/users— список пользователейGET /api/users/{id}— получить пользователя по IDGET /api/users/login/{login}— получить пользователя по логинуPUT /api/users/{id}— обновить пользователяDELETE /api/users/{id}— удалить пользователяGET /api/users/roles— список ролей пользователейGET /api/users/search?name=— поиск пользователей по имениGET /api/users/role/{role}— пользователи по ролиGET /api/users/active— активные пользователиGET /api/users/rank/{minRank}— пользователи с мин. рангомGET /api/users/experience/{minExperience}— пользователи с мин. опытом
Статистика пользователя:
POST /api/users/{id}/experience?experience=— добавить опытPOST /api/users/{id}/energy?energy=— добавить энергонPOST /api/users/{id}/energy/spend?energy=— потратить энергон
Компетенции:
GET /api/users/competencies— список всех компетенцийGET /api/users/{id}/competencies— компетенции пользователяPOST /api/users/{id}/competencies?competencyId=&initialLevel=— добавить пользователю компетенциюPUT /api/users/{id}/competencies/{competencyId}?experiencePoints=— обновить очки/уровень компетенции
Миссии пользователя:
GET /api/users/{id}/missions— миссии пользователяPOST /api/users/{userId}/missions/{missionId}/take— выдать/взять миссию пользователюDELETE /api/users/{userId}/missions/{missionId}/remove— удалить миссию у пользователя
Артефакты пользователя:
GET /api/users/{userId}/artifacts— артефакты пользователяPOST /api/users/{userId}/artifacts/{artifactId}/equip— экипироватьPOST /api/users/{userId}/artifacts/{artifactId}/give— выдать
Карты пользователя:
GET /api/cards/user/{userId}— карты пользователяGET /api/cards/user/{userId}/series/{seriesName}— карты по серииPOST /api/cards/mark-viewed/{userId}/{cardId}— пометить карту просмотренной
GET /api/missions— список миссийPOST /api/missions— создать миссиюPUT /api/missions/{id}— обновить миссиюDELETE /api/missions/{id}— удалить миссию
Управление прогрессом и завершением:
PUT /api/missions/progress?userId=&missionId=&progress=¬es=— обновить прогрессPOST /api/missions/complete?userId=&missionId=— завершить миссиюPOST /api/missions/moderate?userId=&missionId=&approved=— модерировать (для миссий с модерацией)
Вспомогательные сообщения (подтверждения):
GET /api/messages/complete-mission/{missionId}— текст подтверждения завершения миссииGET /api/messages/remove-mission/{userId}/{missionId}— текст подтверждения удаления миссии у пользователяGET /api/messages/take-mission/{missionId}— текст подтверждения выдачи миссии
GET /api/ranks— список ранговGET /api/ranks/level/{level}— получить ранг по уровнюGET /api/ranks/requirements— требования ранговGET /api/ranks/requirements/level/{level}— требования для конкретного уровняGET /api/ranks/branch/{branch}— ранги по ветке (если включено)
GET /api/shop— список товаровGET /api/shop/available— доступные товарыPOST /api/shop— создать товарPUT /api/shop/{id}— обновить товарDELETE /api/shop/{id}— удалить товарPOST /api/shop/purchase?userId=&shopItemId=— покупка пользователемGET /api/shop/purchases/{userId}— история покупок пользователяGET /api/shop/{shopItemId}/confirmation-message— текст подтверждения покупки
GET /api/artifacts— список артефактовGET /api/artifacts/active— активные артефактыPOST /api/artifacts— создатьPUT /api/artifacts/{id}— обновитьDELETE /api/artifacts/{id}— удалить
GET /api/cards/series— список серийGET /api/cards/series/{seriesName}— карты по серииGET /api/cards/available/{userId}— доступные пользователюPOST /api/cards/check-awards/{userId}— проверить награды/выдачи
GET /api/branches— список веток
GET /api/messages/ui-texts— словарь UI‑текстовGET /api/messages/delete-user/{userId}— подтверждение удаления пользователяGET /api/messages/delete-artifact/{artifactId}— подтверждение удаления артефактаGET /api/messages/delete-mission/{missionId}— подтверждение удаления миссии
Документация API: http://localhost:8080/swagger-ui.html
Этот проект лицензирован под MIT License - см. файл LICENSE для деталей.
Участники проекта:
- Черемискина Алина — техлид, тимлид, главный разработчик
- Иван Пестеров — создатель Telegram‑апса
- Мария Голдовская — ручной тестировщик
В систему добавлены тексты подтверждений и UI‑сообщений, которые отдаются фронту через /api/messages/*:
- Подтверждение завершения миссии: «Вы действительно хотите пометить миссию … как выполненную?»
- Подтверждение удаления миссии у пользователя (с подстановкой имени/логина): «Вы уверены, что хотите удалить миссию … у пользователя …?»
- Подтверждения удаления пользователя и артефакта.
- UI‑словари (
/api/messages/ui-texts) для унификации надписей (кнопки, заголовки, уведомления).
Также на фронте реализованы мотивационные фразы «гуся‑помощника» (60+ фраз), появляющиеся контекстно и по таймеру.
Энергон — внутренняя валюта платформы:
- Начисляется за активности, может покупаться/тратиться через магазин.
- Используется как стоимость товаров/бонусов, часть наград за миссии.
- Изменяется через эндпоинты: добавление (
POST /api/users/{id}/energy), списание (POST /api/users/{id}/energy/spend). - Отображается в профиле и в рейтинге (⚡ рядом с логином).
Проект стилизован под космическую станцию «Алабуга.TECH» с собственным лором:
- Ранги — карьерные ступени «от кадета до хранителя станции».
- Миссии — тематические поручения станции (часть требует модерации «ЦУП»).
- Гусь‑помощник — персонаж‑мотиватор с фирменными репликами («alabu‑ga‑ga»).
- Карты/артефакты — коллекционный элемент вселенной, усиливающий вовлечённость.
Для каждой из 9 базовых компетенций заданы понятные названия и короткие описания (подсказки в UI):
- «Сила Миссии» — вера в дело.
- «Импульс Прорыва» — стремление к большему.
- «Канал Связи» — общение.
- «Модуль Аналитики» — аналитика.
- «Пульт Командования» — командование.
- «Кодекс Звёздного Права» — юриспруденция.
- «Голограммное Мышление» — объёмное мышление.
- «Кредитный Поток» — базовая экономика.
- «Курс Аэронавигации» — основы аэронавигации.
Каждая компетенция имеет лимиты (очки/уровни), визуализацию прогресса и может влиять на доступность контента.
Ветки (branch) описывают направления роста и влияют на требования рангов/контента:
- Список веток доступен через
/api/branches. - Пользователь связан с веткой (
branchId) и получает релевантные требования рангов (/api/ranks/requirements). - В будущем — специализированные роли/миссии/карты под ветки.
У нас есть отдельное Telegram-приложение с тапалкой и гусем Гага:
- Игра: Простая тапалка с гусем Гага для развлечения пользователей
- Порт: Для тестирования можно переназначить порт (по умолчанию стандартный)
- Преимущества:
- Реклама в массах через Telegram
- Дополнительный канал взаимодействия с пользователями
- Интеграция с основной платформой через API
- Технологии: Telegram Bot API, интеграция с основным backend
Alabuga.TECH - где каждый становится космическим пилотом! 🚀✨