баг-фикс 30/34

This commit is contained in:
Zuev
2026-07-19 14:40:43 +03:00
parent 3d798c13e3
commit bc0e1ab1b4
172 changed files with 13431 additions and 2910 deletions

View File

@@ -73,14 +73,16 @@ private static final Logger logger = LoggerFactory.getLogger(MyController.class)
// Информационные сообщения
logger.info("Запрос на получение всех занятий");
// Ошибки с полным стектрейсом
logger.error("Ошибка при сохранении: {}", e.getMessage(), e);
// Технические детали остаются только в журнале
logger.error("Ошибка при сохранении записи", e);
```
#### Валидация
- Для сложных правил — отдельные сервисы или приватные методы в контроллере с понятным сообщением об ошибке
- Для простых — inline-проверки в контроллере с `ResponseEntity.badRequest()`
- Не формируйте HTTP-ответ из `Exception.getMessage()`: JDBC/SQL-исключения передаются в
`GlobalExceptionHandler`, который возвращает безопасный русский `400`/`409`/`500`
#### Импорты
@@ -126,8 +128,8 @@ import com.magistr.app.repository.*;
#### Лучшие практики
```javascript
// ✅ Предпочитайте const
const token = localStorage.getItem('token');
// ✅ Авторизация только через общий модуль; access JWT не хранится в Web Storage
const session = getSession();
// ✅ Async/await вместо .then()
async function loadData() {
@@ -229,6 +231,10 @@ public class AbsenceController {
Изменение `V1__init.sql` допустимо только как осознанное исключение на этапе разработки. Для уже применённой `V1` требуется полный сброс tenant-схем или удаление истории Flyway перед запуском backend, иначе будет checksum mismatch.
Текущее состояние проекта — единый baseline `V1__init.sql`: по прямому решению владельца
содержимое прежних V2V7 объединено в V1, клиентских tenant-БД нет. До отдельного решения о
фиксации baseline новые DB-инварианты добавляются в V1 и проверяются на полностью чистой БД.
### Применение
```bash