# QuoteForge — План очистки (удаление admin pricing) Цель: убрать всё, что связано с администрированием цен, складскими справками, алертами. Оставить: конфигуратор, проекты, read-only просмотр прайслистов, sync, offline-first. --- ## 1. Удалить файлы - [x] `internal/handlers/pricing.go` (40.6KB) — весь admin pricing UI - [x] `internal/services/pricing/` — весь пакет расчёта цен - [x] `internal/services/pricelist/` — весь пакет управления прайслистами - [x] `internal/services/stock_import.go` — импорт складских справок - [x] `internal/services/alerts/` — весь пакет алертов - [x] `internal/warehouse/` — алгоритмы расчёта цен по складу - [x] `web/templates/admin_pricing.html` (109KB) — страница admin pricing - [x] `cmd/cron/` — cron jobs (cleanup-pricelists, update-prices, update-popularity) - [x] `cmd/importer/` — утилита импорта данных ## 2. Упростить `internal/handlers/pricelist.go` (read-only) Read-only методы (List, Get, GetItems, GetLotNames, GetLatest) уже работают только через `h.localDB` (SQLite) без `pricelist.Service`. - [x] Убрать поле `service *pricelist.Service` из структуры `PricelistHandler` - [x] Изменить конструктор: `NewPricelistHandler(localDB *localdb.LocalDB)` - [x] Удалить write-методы: `Create()`, `CreateWithProgress()`, `Delete()`, `SetActive()`, `CanWrite()` - [x] Удалить метод `refreshLocalPricelistCacheFromServer()` (зависит от service) - [x] Удалить import `pricelist` пакета - [x] Оставить: `List()`, `Get()`, `GetItems()`, `GetLotNames()`, `GetLatest()` ## 3. Упростить `cmd/qfs/main.go` - [x] Удалить создание сервисов: `pricingService`, `alertService`, `pricelistService`, `stockImportService` - [x] Удалить хэндлер: `pricingHandler` - [x] Изменить создание `pricelistHandler`: `NewPricelistHandler(local)` (без service) - [x] Удалить repositories: `priceRepo`, `alertRepo` (statsRepo оставить — nil-safe) - [x] Удалить все routes `/api/admin/pricing/*` (строки ~1407-1430) - [x] Из `/api/pricelists/*` оставить только read-only: - `GET ""` (List), `GET "/latest"`, `GET "/:id"`, `GET "/:id/items"`, `GET "/:id/lots"` - [x] Удалить write routes: `POST ""`, `POST "/create-with-progress"`, `PATCH "/:id/active"`, `DELETE "/:id"`, `GET "/can-write"` - [x] Удалить web page `/admin/pricing` - [x] Исправить `/pricelists` — вместо redirect на admin/pricing сделать страницу - [x] В `QuoteService` конструкторе: передавать `nil` для `pricingService` - [x] Удалить imports: `pricing`, `pricelist`, `alerts` пакеты ## 4. Упростить `handlers/web.go` - [x] Удалить из `simplePages`: `admin_pricing.html` - [x] Удалить метод: `AdminPricing()` - [x] Оставить все остальные методы включая `Pricelists()` и `PricelistDetail()` ## 5. Упростить `base.html` (навигация) - [x] Убрать ссылку "Администратор цен" - [x] Добавить ссылку "Прайслисты" (на `/pricelists`) - [x] Оставить: "Мои проекты", "Прайслисты", sync indicator ## 6. Sync — оставить полностью - Background worker: pull компоненты + прайслисты, push конфигурации - Все `/api/sync/*` endpoints остаются - Это ядро offline-first архитектуры ## 7. Верификация - [x] `go build ./cmd/qfs` — компилируется - [x] `go vet ./...` — без ошибок - [ ] Запуск → `/configs` работает - [ ] `/pricelists` — read-only список работает - [ ] `/pricelists/:id` — детали работают - [ ] Sync с сервером работает - [ ] Нет ссылок на admin pricing в UI ## 8. Обновить CLAUDE.md - [x] Убрать разделы про admin pricing, stock import, alerts, cron - [x] Обновить API endpoints список - [x] Обновить описание приложения