File: /var/www/ipsremont-demo/docs/Заметки по коду.md
Я немного стандартизировала код
Смотри для примера `BranchRepository`, `PartRepository` и их модели
#### Модели
Для всех моделей подключаются трейты **Displayed** и **My**
**scopeMy()** - теперь все выборки данных делаем через него, не важно в модели ,или в репозитории ,или еще где.
По-умолчанию просто возвращает `query`, но есть возможность переписать в модели добавив разграничение доступа
**scopeDisplayed()**
Для моделей, которые можно включать/выключать
Модели наследуют `BaseModel` - там есть методы для получения подписей к полям и колонок для грида.
#### Репозитории
Все репозитории наследуются от `BaseRepository`.
Все запросы к данным должны идти через **getAvailable** - возвращает доступные мне модели.
**getDisplayed** - возвращает доступные мне модели и которые включены `displayed` 1.
Например, для всех селектов, когда мы даем что-то выбрать.
Привязать склад к подразделению - то в селект попадают только включенные объекты.
**getById** - ищет по ид, среди доступных мне моделей.
#### Сервисы
Сервисы я тоже немного поменяла, добавила статические методы, так как не всегда удобно создавать объект.
Смотри `BranchService`.
_Вообще их тоже можно наследовать от одного, можешь создать `BaseService` когда будешь делать каталог._
В `gridTrait` добавила **makeQueryOrdered** - для работы по новым методам.
`WarehouseService` - там есть методы-образцы для получения айтемов для селектов и для ajax.
#### Права доступа
**Посмотри модель User** - там много scope которые нужно использовать, когда тебе нужно получить каких-то определенных юзеров.
Нужно использовать везде одни и те же методы, а не писать свои.
Можно добавлять свои методы в сервис/репозиторий юзер, но даже там делать выборки через scope модели если есть подходящий.
Права проверять константами из модели `app/Models/Permission.php`
Типы ролей константами из `app/Models/Role.php`
#### Логи
Теперь при изменении моделей создается запись в таблице logs. Собственно какие observer созданы, для тех моделей и пишутся логи.
Что нужно держать в голове:
После обновления relations - вызывать метод
```php
LogService::updatedRelations($модель, 'relation name', $new relation array);
```
Если модель хранит приватные данные типа паролей, переопределить observer event и скрыть данные из лога. Образец - пароль юзера.
Если обновление несущественное, можно сделать такое, чтобы избежать логов.
```php
$model= Service::withoutEvents(function () use ($model) {
$model->save();
return $model;
});
```
#### Деплой
Теперь добавление постоянных данных, прав и тд - в миграциях.
Сидеры только для демо данных. Все новые - добавлять в `Init2Seeder` и в ридми дописывать в список по отдельности
Если для запуска модуля нужно что-то кроме composer install/update и миграций - то пиши команды в блок ридми "Для запуска модуля"