§01
Обзор
- Что это: плагин-расширение для проприетарной POS-системы iikoFront (ресторанная касса). Распакованная папка — это *собранный артефакт* (DLL + зависимости + NuGet-пакет), а не исходники. Главный класс —
Resto.Front.Api.CustomWebserver.CustomWebserver, версия API V8, лицензионный модуль19011701(см.manifest.xml). Плагин поднимает self-hosted Web API внутри POS и интегрирует кассу с внешними сервисами сети пиццерий/доставки. - Тип / статус / роль: library (POS-плагин) / статус unknown (нет git и нет исходников, чтобы оценить «живость») / роль unknown — авторство не подтверждено (нет .git). Папка лежит в личном dev-окружении пользователя и завязана на его экосистему проектов Restaurant chain (UZ)/Restaurant chain (UZ), но прямых свидетельств вклада в коде нет.
- Активный период: git-даты недоступны. Артефакт собран 2025-04-12 (таймстемп главной DLL и .nupkg); версия пакета
1.0.0. PDB указывает на путь сборкиC:\projects\front.api.sdk\sample\new_webserver\Resto.Front.Api.SamplePlugin\— плагин выведен из официального примера iikonew_webserver(SamplePlugin) и расширен.
§02
Стек
- Языки: C# (.NET Framework 4.7.2), XAML (WPF — окно ввода OTP на экране POS).
- Фреймворки/библиотеки (по реальным DLL в пакете и строкам в сборке):
Resto.Front.Api.V8v8.7.6032 — SDK iikoFront (единственная объявленная зависимость в.nuspec).- ASP.NET Web API self-host (
System.Web.Http.SelfHost,HttpSelfHostServer,HttpSelfHostConfiguration,MapHttpRoute) — собственный HTTP-сервер внутри процесса POS. System.Reactive(Rx) +System.Interactive— подписка на события POS (OrderChanged,BeforeOrderBill).Newtonsoft.Json(+ Bson) — сериализация (JsonConvert.SerializeObject,JToken).System.Data.SQLite(EF6/Linq + нативнаяSQLite.Interop.dllдля x86/x64) — локальное хранилище.DuckDB.NET(Bindings + Data) — встроенное аналитическое хранилище (строкаDuckOrderData).EntityFramework6 (+EntityFramework.SqlServer,System.Data.SqlServerCe).- NuGet.* (Packaging/Configuration/Versioning) — судя по всему, используется для упаковки/обновления плагина.
- Инфра/деплой: распространяется как NuGet-пакет
Resto.Front.Api.CustomWebserver.V8.1.0.0.nupkg(формат iiko-плагина,target net472). Устанавливается в iikoFront. Нет CI/Docker. - Данные: локальный SQLite (таблица отсканированных заказов —
UpdateOrInsertScannedOrder,selectLastScannedOrders, полеScannedDate); DuckDB опционально. Внешние данные подтягиваются по HTTP из delivery-бэкендов. - Заметный тулинг: локализация (
ru-RU/...resources.dll), WPF UI, токен-аутентификация.
§03
Что реализовано
Git-истории нет — хронология восстановлена по содержимому скомпилированной сборки (символы типов/методов) и конфигу *.dll.config.
- Self-hosted Web API внутри POS.
OrdersController : ApiControllerс маршрутами черезMapHttpRoute; эндпоинты:GetKitchenOrders,GetOrderById,ReturnTabloOrders. - Токен-аутентификация запросов. Кастомный
Helpers.AuthenticationHandler : DelegatingHandler(SendAsync),ValidateToken, токен берётся из настройкиApiToken(6bbbcb4e-...в конфиге). - Окно OTP на экране POS. WPF
OtpWindow(CheckCode/CheckCodeClick, asyncCheckCodeсCancellationToken) — ввод и валидация одноразового кода на стороне бэкенда. - Хук на выдачу чека.
OnBeforeOrderBill(подписка наBeforeOrderBillчерез Rx) — расширение/дублирование логики чека:ExtendBillCheque,DuplicatedCheque,RoundChequeNumber,RoundNumberCongratulation(«поздравление» за круглый номер чека). - Кухонное «табло».
TabloOrder/TabloSplittedOrders,ReturnTabloOrders; отправка нового заказа на локальное табло поhttp://127.0.0.1:12123/new_order; обработка статусов готовки (Cooking/Cooked,ChangeKitchenOrderItemsProcessingStatus, интервалыDefaultCookedInterval/CookingTimePeriod). - Интеграции с delivery/платёжными бэкендами. Строки в DLL:
https://api.choparpizza.uz,https://api.restaurant-chain.uz; настройкиYandexPaymentId,EatsApiToken(платежи/заказы Yandex Eats). - Объём: оценить нельзя — нет git. Главная DLL ~45 KB (компактный glue-плагин вокруг SDK).
§04
Технические челленджи
Только то, что подтверждается сборкой/конфигом.
- HTTP-сервер внутри процесса POS →
System.Web.Http.SelfHost(HttpSelfHostServer+HttpSelfHostConfiguration,MapHttpRoute). Демонстрирует: умение встроить web API в чужой хост-процесс (десктопную кассу), а не классический ASP.NET-хостинг. - Аутентификация через пайплайн Web API → кастомный
DelegatingHandler.SendAsync+ValidateTokenвместо готового middleware. Паттерн: расширение пайплайна Web API на низком уровне. - Модель событий POS через Rx → подписки на
OrderChanged/BeforeOrderBill(System.Reactive), реакция вOnBeforeOrderBill. Демонстрирует работу с реактивными потоками событий проприетарного SDK. - Кастомная логика чека → перехват
BeforeOrderBillдля расширения/дублирования чека и округления номера (RoundChequeNumber). Доменная интеграция в фискальный флоу кассы — нетривиальная и «опасная» зона (печать/чеки). - Локальная очередь/журнал заказов → SQLite с upsert «отсканированных» заказов (
UpdateOrInsertScannedOrder/selectLastScannedOrders) для устойчивости в offline между кассой и кухонным табло. - Нативный interop → отдельные сборки
SQLite.Interop.dllпод x86/x64, что указывает на реальный деплой нативных зависимостей в Windows-окружении POS.
§05
AI-разработка
- Найдено сессий: 0. В локальной директории сессий Claude Code нет каталога, совпадающего с
resto/CustomWebServer. - Что делалось с AI: данных нет.
- Паттерны AI-воркфлоу: отсутствуют.
- Сессий нет.
§06
Достижения и метрики
По артефакту/конфигу, без домыслов:
- Интеграция POS iikoFront с 3+ внешними системами: Restaurant chain (UZ) API, Restaurant chain (UZ) API, Yandex Eats (платежи/заказы) + локальное кухонное табло.
- 3 публичных REST-эндпоинта в self-host Web API (
GetKitchenOrders,GetOrderById,ReturnTabloOrders). - Поддержка нативных зависимостей SQLite под x86 и x64; локализация ru-RU.
- Зависимость от iiko SDK V8.7.6032, target .NET Framework 4.7.2.
- Точных метрик масштаба (объём заказов, нагрузка) нет — закрытый проприетарный контекст.