5.9 KiB
Implementation Plan
-
1. Настройка проекта и Git
-
1.1 Создать структуру Gradle проекта
- Создать build.gradle.kts с зависимостями Paper API, HikariCP, OkHttp
- Создать settings.gradle.kts
- Настроить Java 21 и shadowJar для сборки
- Requirements: 7.1
-
1.2 Настроить Git и .gitignore
- Создать .gitignore для Java/Gradle проекта
- Инициализировать git репозиторий
- Добавить remote https://git.lokili.xyz/loki/lorep.git
- Сделать initial commit и push
- Requirements: N/A
-
1.3 Создать plugin.yml и основной класс
- Создать plugin.yml с командами и правами
- Создать LorepPlugin.java с onEnable/onDisable
- Requirements: 6.1, 6.2, 6.3
-
-
2. Реализация конфигурации
-
2.1 Создать ConfigManager и config.yml
- Создать default config.yml с настройками БД и webhook
- Реализовать ConfigManager для чтения конфигурации
- Requirements: 7.1, 7.2, 7.3, 7.4
-
2.2 Написать property test для парсинга конфигурации
- Property 9: Configuration Parsing
- Validates: Requirements 7.1, 7.3, 7.4
-
-
3. Реализация базы данных
-
3.1 Создать модель Report и интерфейс DatabaseManager
- Создать Report record
- Создать интерфейс DatabaseManager
- Requirements: 2.1
-
3.2 Реализовать SQLiteDatabaseManager
- Реализовать все методы интерфейса для SQLite
- Создать таблицу и индексы
- Requirements: 2.1, 2.2, 2.3
-
3.3 Реализовать PostgreSQLDatabaseManager
- Реализовать все методы с HikariCP connection pool
- Создать таблицу и индексы для PostgreSQL
- Requirements: 2.1, 2.2, 2.3
-
3.4 Написать property tests для DatabaseManager
- Property 1: Report Creation Integrity
- Property 2: Duplicate Report Prevention
- Property 3: Report Persistence Round-Trip
- Property 4: Report Ordering
- Property 7: Report Count Accuracy
- Validates: Requirements 1.1, 1.2, 2.1, 2.2, 2.3, 5.1
-
-
4. Checkpoint - Проверка тестов БД
- Ensure all tests pass, ask the user if questions arise.
-
5. Реализация Discord Webhook
-
5.1 Создать DiscordWebhook сервис
- Реализовать отправку embed сообщений через OkHttp
- Обработать ошибки и отсутствие URL
- Requirements: 3.1, 3.2, 3.3
-
5.2 Написать property test для webhook payload
- Property 5: Webhook Payload Completeness
- Validates: Requirements 3.1
-
-
6. Реализация команд
-
6.1 Создать ReportCommand (/report [ник] [причина])
- Валидация аргументов и прав
- Проверка на самого себя и существование игрока
- Проверка на дубликат репорта
- Сохранение в БД и отправка в webhook
- Requirements: 1.1, 1.2, 1.3, 1.4, 1.5, 6.1
-
6.2 Создать ReportStatsCommand (/report stats [ник])
- Показ количества репортов
- Показ последнего онлайна
- Список последних репортов
- Requirements: 5.1, 5.2, 5.3, 5.4, 6.3
-
6.3 Написать property test для проверки прав
- Property 8: Permission Enforcement
- Validates: Requirements 6.1, 6.2, 6.3
-
-
7. Реализация GUI
-
7.1 Создать ReportGui с пагинацией
-
Создать инвентарь 54 слота
-
Отображение голов игроков с их скинами
-
Lore с информацией о репорте
-
Кнопки навигации по страницам
-
Requirements: 4.1, 4.2, 4.3, 4.4
-
-
[-] 7.2 Создать GuiClickListener
-
Обработка кликов по страницам
-
Отмена выноса предметов
-
Requirements: 4.4
-
-
7.3 Создать ReportGuiCommand (/report gui)
-
Проверка прав и открытие GUI
-
Requirements: 4.1, 6.2
-
-
7.4 Написать property test для пагинации
-
Property 6: Pagination Correctness
-
Validates: Requirements 4.4
-
-
-
8. Утилиты и сообщения
- 8.1 Создать TimeUtil для форматирования времени
- Форматирование "X минут/часов/дней назад"
- Requirements: 4.3, 5.2
- 8.2 Создать MessageUtil для цветных сообщений
- Парсинг цветовых кодов
- Отправка сообщений игрокам
- Requirements: 1.2, 1.3, 1.4, 5.4, 6.1, 6.2, 6.3
- 8.1 Создать TimeUtil для форматирования времени
-
9. Интеграция и финализация
- 9.1 Интегрировать все компоненты в LorepPlugin
- Инициализация всех менеджеров в onEnable
- Регистрация команд и листенеров
- Корректное закрытие в onDisable
- Requirements: 2.2, 7.1
- 9.2 Финальный push в Git
- Commit всех изменений
- Push в репозиторий
- Requirements: N/A
- 9.1 Интегрировать все компоненты в LorepPlugin
-
10. Final Checkpoint - Финальная проверка
- Ensure all tests pass, ask the user if questions arise.