баг-фикс 30/34
This commit is contained in:
@@ -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`: по прямому решению владельца
|
||||
содержимое прежних V2–V7 объединено в V1, клиентских tenant-БД нет. До отдельного решения о
|
||||
фиксации baseline новые DB-инварианты добавляются в V1 и проверяются на полностью чистой БД.
|
||||
|
||||
### Применение
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user