Назад в архив
IV. Клиентские проекты и логистические платформыдополнительнонеизвестноклиент анонимизирован

iikoFront POS Plugin — Custom Webserver (C#)

Кастомный плагин для POS-системы iikoFront (API V8), который поднимает собственный HTTP-сервер внутри процесса кассы и связывает её с delivery-бэкендами Restaurant chain (UZ) / Restaurant chain (UZ), платежами Yandex Eats и кухонным «табло».

Статус
неизвестно
Период
n/a
AI-сессий
Стек
Языки
C#XAML
Фреймворки · Инфра
iiko Resto.Front.Api V8ASP.NET Web API (self-host)Entity Framework 6System.Reactive (Rx)Newtonsoft.JsonSystem.Data.SQLiteDuckDB.NETWPF
§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\ — плагин выведен из официального примера iiko new_webserver (SamplePlugin) и расширен.
§02

Стек

  • Языки: C# (.NET Framework 4.7.2), XAML (WPF — окно ввода OTP на экране POS).
  • Фреймворки/библиотеки (по реальным DLL в пакете и строкам в сборке):
  • Resto.Front.Api.V8 v8.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).
  • EntityFramework 6 (+ 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, async CheckCode с 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-сервер внутри процесса POSSystem.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.
  • Точных метрик масштаба (объём заказов, нагрузка) нет — закрытый проприетарный контекст.
Сейчас

Открыт к ролям Senior / Staff инженера и избранному фрилансу — продакшн-AI, платформы и full-stack разработка.

Связаться