О проекте
Команда: Undefined
Кейс HackAlem.ai: Торговля — Электрокомплект · ekt.kz
Стадия: Рабочий MVP
Задача кейса: AI-консультант по каталогу ekt.kz: товары, аналоги, цены, остатки, корзина
Суть
Демо-интернет-магазин электрооборудования: синтетический каталог, цены по городам, остатки на складах, корзина и заказы. Встроенный AI-консультант на казахском и русском ищет товары и аналоги и добавляет их в корзину после явного подтверждения.
Как устроено
Backend на Express 5, Prisma и PostgreSQL: каталог из 64 товаров и 39 категорий, региональные цены в 9 городах, 12 складов, транзакционное резервирование. Ассистент (/api/assistant/chat) работает на детерминированном intent routing, классификация через OpenAI (gpt-4.1-mini) подключается опционально. Инструменты product/cart/purchase tools читают актуальные цены и остатки, не доверяют значениям от пользователя и меняют корзину в два шага (proposal → «Да, добавь»). Модули analogs/scoring подбирают аналоги, есть разбор спецификаций из файлов.
Ключевые решения
- intent routing
- OpenAI intent classification
- tool calling
- two-step cart confirmation
- analog scoring
- content safety
Особенности
Корзина меняется только в два шага: ассистент предлагает, пользователь явно подтверждает. Ассистент не принимает цены и остатки от пользователя. Для консультанта команда построила целый магазин с JWT, ролями и транзакционным резервом, а README на трёх языках.
Стек
Node.js · Express 5 · Prisma 6 · PostgreSQL · React 18 · TypeScript · Vite · Jest · Supertest · Swagger
Модели
OpenAI gpt-4.1-mini
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-47277bdb-undefined.
README
README.md⚡ EKT Store
Қалаға бейімделген электр жабдықтары интернет-дүкені: көптілді каталог, қойма есебі, транзакциялық тапсырыстар және қауіпсіз AI-ассистент.
🇰🇿 Қазақша
Жоба туралы
EKT Store — электр жабдықтарын қалаға қарай іздеуге, салыстыруға және тапсырыс беруге арналған хакатондық интернет-дүкен.
Жүйе әр қаладағы баға мен қойма қалдығын бөлек есептейді, қонақ және тіркелген пайдаланушы себетін қолдайды, тапсырыс кезінде тауарды транзакциялық түрде резервтейді және қазақша/орысша AI-ассистент ұсынады.
Каталогтағы атаулар, бағалар, мекенжайлар, жаңалықтар және жеткізу шарттары — синтетикалық демо деректер. Оларды нақты коммерциялық ұсыныс немесе өндіруші растаған техникалық ақпарат ретінде қолдануға болмайды.
💡 Инвестициялық өтініш: өтінемін, 100 000доллар керек — жобаны production деңгейіне жеткізуге, нақты каталог, төлем жүйесі және логистика интеграциясын қосуға жұмсаймыз.
Негізгі мүмкіндіктер
- 64 өнімнен тұратын қазақша және орысша демо каталог;
- 39 иерархиялық санат және динамикалық техникалық сипаттамалар;
- 9 қала бойынша аймақтық бағалар;
- 12 қоймадағы тауар қалдығын бақылау;
- іздеу, сүзу, сұрыптау және pagination;
- таңдаулылар және 4 тауарға дейін салыстыру;
- қонақ және тіркелген пайдаланушы себеті;
- checkout және жеткізу құнын есептеу;
- қоймадағы тауарды транзакциялық резервтеу;
- тапсырысты тоқтату және аяқтау сценарийлері;
- JWT авторизациясы;
CUSTOMER,MANAGERжәнеADMINрөлдері;- әкімшілік CRUD операциялары;
- акциялар, жаңалықтар, FAQ және контент беттері;
- XLSX прайс-парағын қалыптастыру;
- JPG, PNG, WEBP және PDF файлдарын жүктеу;
- Swagger/OpenAPI құжаттамасы;
- қауіпсіз қазақша/орысша AI-ассистент;
- каталог, себет, checkout және аккаунтқа арналған React интерфейсі.
Архитектура
React 18 + Vite
http://localhost:5173
│
│ REST / JSON
▼
Express 5 API
http://localhost:3000
│
├── Авторизация
├── Каталог
├── Себет
├── Тапсырыстар
├── Контент
├── Admin API
└── AI Assistant
│
▼
Prisma 6
│
▼
PostgreSQL
Жоба құрылымы
.
├── frontend/ # React 18, TypeScript және Vite
├── backend/ # Express, Prisma және PostgreSQL
│ ├── prisma/
│ │ ├── migrations/ # Дерекқор migration файлдары
│ │ ├── seed-data/ # Демо каталог және контент
│ │ ├── schema.prisma
│ │ └── seed.js
│ ├── src/
│ │ ├── config/ # Орта және Prisma конфигурациясы
│ │ ├── docs/ # Swagger/OpenAPI
│ │ ├── middleware/ # Auth, validation, rate limit
│ │ └── modules/ # Бизнес модульдер
│ └── tests/ # Jest және Supertest
├── ai/ # Архивтік migration reference
├── ASSISTANT_MIGRATION.md
├── INTEGRATION_REPORT.md
└── INTEGRATION_API_CONTRACT.md
Маңызды:
ai/бумасы жұмыс істейтін екінші сервер емес. Ол бұрынғы архитектураның архивтік нұсқасы ретінде сақталған. Қолдау көрсетілетін жалғыз сервер —backend/src/server.js. AI-ассистент сол backend ішінде жұмыс істейді.
Қолданылған технологиялар
| Бөлік | Технологиялар |
|---|---|
| Frontend | React 18, TypeScript 5, Vite 6, React Router, Axios |
| Backend | Node.js 20+, Express 5, CommonJS |
| Database | PostgreSQL, Prisma 6 |
| Қауіпсіздік | JWT, bcrypt, Helmet, CORS, rate limiting |
| Тесттер | Jest, Supertest, jsdom |
| API құжаттамасы | OpenAPI 3, Swagger UI |
| AI | Детерминдік intent routing, optional OpenAI classification |
Жүйелік талаптар
- Node.js 20 немесе одан жаңа нұсқа;
- npm;
- PostgreSQL;
- Git;
- бос
3000және5173порттары.
Дерекқорды дайындау
PostgreSQL ішінде пайдаланушы мен база жасаңыз:
CREATE ROLE ekt_app
WITH LOGIN PASSWORD 'CHANGE_ME';
CREATE DATABASE ekt_store
OWNER ekt_app;
Backend орнату
cd backend
npm ci
Copy-Item .env.example .env
.env файлын баптаңыз:
PORT=3000
NODE_ENV=development
DATABASE_URL="postgresql://ekt_app:CHANGE_ME@localhost:5432/ekt_store?schema=public"
JWT_SECRET="REPLACE_WITH_A_LONG_RANDOM_SECRET"
JWT_EXPIRES_IN="7d"
CLIENT_URL="http://localhost:5173"
BCRYPT_ROUNDS=10
OPENAI_API_KEY=""
OPENAI_MODEL="gpt-4.1-mini"
ASSISTANT_LLM_ENABLED=false
ASSISTANT_PROPOSAL_TTL_SECONDS=900
SEED_ADMIN_EMAIL=""
SEED_ADMIN_PASSWORD=""
[скрыто] мен демо деректерді қолданыңыз:
npm run prisma:generate
npx prisma migrate deploy
npm run prisma:seed
Backend серверін іске қосыңыз:
npm run dev
Frontend орнату
Жаңа терминал ашыңыз:
cd frontend
npm ci
Copy-Item .env.example .env
npm run dev
Frontend ортасы:
VITE_API_URL=http://localhost:3000/api
VITE_USE_MOCKS=false
Құпия кілттерді frontend ортасына жазбаңыз. VITE_* айнымалылары браузерге қолжетімді болады.
Қызмет мекенжайлары
| Қызмет | Мекенжай |
|---|---|
| Web қолданба | http://localhost:5173 |
| REST API | http://localhost:3000/api |
| Health check | http://localhost:3000/api/health |
| Swagger UI | http://localhost:3000/api-docs |
AI-ассистент
Ассистенттің негізгі endpoint-і:
POST /api/assistant/chat
Ассистент:
- нақты каталогтан өнім іздейді;
- актуалды баға мен қойма қалдығын оқиды;
- балама тауарларды ұсынады;
- қазақша және орысша жұмыс істейді;
- пайдаланушы жіберген баға немесе stock мәніне сенбейді;
- себетті пайдаланушының нақты растауынсыз өзгертпейді.
Себетке қосу екі кезеңнен тұрады:
- Ассистент ұсыныс дайындап, растау сұрайды.
- Пайдаланушы
Иә, қоснемесеДа, добавьдеп нақты растағаннан кейін ғана себет өзгереді.
Мысал:
$session = [guid]::NewGuid().ToString()
$headers = @{
"X-Session-Id" = $session
"Accept-Language" = "kk"
}
$body = @{
message = "Маған 16А автомат керек"
sessionId = $session
city = "almaty"
} | ConvertTo-Json
Invoke-RestMethod `
-Method Post `
-Uri "http://localhost:3000/api/assistant/chat" `
-Headers $headers `
-ContentType "application/json; charset=utf-8" `
-Body $body
Детерминдік ассистент API кілтінсіз жұмыс істейді. Қосымша LLM классификациясын қосу үшін backend .env ішінде:
OPENAI_API_KEY="YOUR_KEY"
ASSISTANT_LLM_ENABLED=true
Frontend чат интерфейсі негізгі backend-ке қосылған. Сайттың төменгі оң жағындағы «ИИ консультант» батырмасын ашып, «Маған 16А автомат керек» деп жазыңыз. Нәтижеден «Таңдау» арқылы тауарды таңдаңыз; «3 данасын себетке қос» ұсыныс дайындайды, ал бөлек «Иә, қос» растауынан кейін ғана себет өзгереді. Қала, JWT және қонақ сессиясы сайтпен ортақ. ai/.env және PORT=3001 қолданылмайды.
Frontend бумасындағы npm run check:assistant чаттың UI сценарийлерін тексереді; npm run check:assistant:integration іске қосылған backend-пен нақты HTTP байланысын тексереді. Екінші команда тек өзінің уақытша тест деректерін құрып/тазартады.
API бағыттары
| Модуль | Base path |
|---|---|
| Health | /api/health |
| Авторизация | /api/auth |
| Пайдаланушылар | /api/users |
| Қалалар | /api/cities |
| Филиалдар | /api/branches |
| Санаттар | /api/categories |
| Брендтер | /api/brands |
| Өнімдер | /api/products |
| Каталог | /api/catalog |
| Таңдаулылар | /api/favorites |
| Салыстыру | /api/comparison |
| Себет | /api/cart |
| Тапсырыстар | /api/orders |
| Бір басумен тапсырыс | /api/one-click-orders |
| Акциялар | /api/promotions |
| Жаңалықтар | /api/news |
| FAQ | /api/faqs |
| Контент беттері | /api/pages |
| Клиент өтінімдері | /api/requests |
| AI-ассистент | /api/assistant/chat |
| Admin | /api/admin |
Тексеру
Backend:
cd backend
npm run check
npm test
npm run check:demo
Backend іске қосылып тұрғанда:
npm run check:assistant
Frontend:
cd frontend
npm run build
npm run check:contexts
npm run check:pages
Backend 3000 портында іске қосылып тұрғанда:
npm run check:integration
Backend тесттері mock database емес, нақты PostgreSQL қолданады. Тест ортасын оқшаулау үшін TEST_DATABASE_URL айнымалысын орнатуға болады.
Белгілі шектеулер
- төлем провайдері қосылмаған;
- қонақ себеті аккаунт себетімен автоматты біріктірілмейді;
- чаттың көрінетін тарихы бетті жаңартқанда тазарады; сервердегі контекст сақталады, файл жүктеу әлі қосылмаған;
- кейбір сұрыптау және stock сүзгілері жадта орындалады;
- ассистент тарихына production retention cleanup қажет;
- нақты каталог пен контент қосылмаған;
- production алдында қауіпсіздік аудиті және browser smoke test қажет.
🇷🇺 Русский
О проекте
EKT Store — демонстрационный интернет-магазин электрооборудования с региональными ценами, складскими остатками, корзиной, оформлением заказов и безопасным AI-ассистентом.
Платформа поддерживает казахский и русский языки, гостевые и авторизованные сессии, транзакционное резервирование товаров и управление заказами.
Каталог, цены, адреса, новости и условия доставки являются синтетическими демо-данными. Они не являются реальным коммерческим предложением или подтверждёнными производителем характеристиками.
💡 Небольшая инвестиционная просьба: пожалуйста, нам нужно 100 000 долларов — на production-запуск, подключение настоящего каталога, платежей и логистики.
Возможности
- двуязычный каталог из 64 товаров;
- 39 иерархических категорий;
- цены для 9 городов;
- остатки на 12 складах;
- поиск, фильтры, сортировка и пагинация;
- избранное и сравнение до 4 товаров;
- гостевая и пользовательская корзина;
- checkout и расчёт доставки;
- транзакционное резервирование остатков;
- JWT-авторизация;
- роли
CUSTOMER,MANAGERиADMIN; - административный CRUD;
- акции, новости, FAQ и контентные страницы;
- формирование XLSX-прайса;
- Swagger/OpenAPI;
- AI-ассистент на казахском и русском языках.
Технологии
| Слой | Технологии |
|---|---|
| Frontend | React 18, TypeScript, Vite, React Router, Axios |
| Backend | Node.js 20+, Express 5 |
| Database | PostgreSQL, Prisma 6 |
| Security | JWT, bcrypt, Helmet, CORS, rate limiting |
| Tests | Jest, Supertest, jsdom |
| Documentation | OpenAPI 3, Swagger UI |
Быстрый запуск
Backend:
cd backend
npm ci
Copy-Item .env.example .env
npm run prisma:generate
npx prisma migrate deploy
npm run prisma:seed
npm run dev
Перед запуском укажите в .env корректные значения DATABASE_URL и JWT_SECRET.
Frontend запускается в отдельном терминале:
cd frontend
npm ci
Copy-Item .env.example .env
npm run dev
После запуска:
- приложение — http://localhost:5173;
- API — http://localhost:3000/api;
- health check — http://localhost:3000/api/health;
- Swagger — http://localhost:3000/api-docs.
AI-ассистент
Endpoint ассистента:
POST /api/assistant/chat
Ассистент использует настоящий каталог и актуальные серверные цены. Добавление товара в корзину выполняется только после отдельного явного подтверждения пользователя.
Детерминированный режим работает без API-ключа. Опциональная LLM-классификация включается через backend-переменные:
OPENAI_API_KEY="YOUR_KEY"
ASSISTANT_LLM_ENABLED=true
Каталог ai/ является архивной версией старого сервиса и не должен запускаться. Поддерживаемая реализация ассистента находится внутри backend/.
Проверка проекта
# backend/
npm run check
npm test
npm run check:demo
npm run check:assistant
# frontend/
npm run build
npm run check:contexts
npm run check:pages
npm run check:integration
Ограничения
- платёжный провайдер не интегрирован;
- гостевая корзина не объединяется с корзиной аккаунта автоматически;
- чат подключён к основному backend, но история на экране очищается при перезагрузке страницы; загрузка файлов в чат ещё не подключена;
- перед production необходимы аудит безопасности, monitoring и browser smoke test.
🇬🇧 English
About
EKT Store is a hackathon e-commerce platform for electrical equipment. It combines a multilingual storefront with city-specific pricing, multi-warehouse inventory, transactional checkout, content management, and a safety-focused AI shopping assistant.
All catalog entries, prices, addresses, news, and delivery terms are synthetic demo data. They are not an actual commercial offer and must not be treated as manufacturer-verified specifications.
💡 A small funding request: please, we need 100,000 dollars to turn the demo into a production product and integrate a real catalog, payments, and logistics.
Highlights
- bilingual catalog with 64 demo products;
- 39 hierarchical categories;
- city-specific pricing for 9 cities;
- inventory across 12 warehouses;
- search, dynamic filters, sorting, and pagination;
- favorites and comparison of up to 4 products;
- guest and authenticated carts;
- checkout and delivery calculation;
- atomic stock reservations;
- JWT authentication;
CUSTOMER,MANAGER, andADMINroles;- administrative CRUD operations;
- promotions, news, FAQs, and content pages;
- XLSX price-list generation;
- controlled file uploads;
- OpenAPI and Swagger documentation;
- deterministic Kazakh/Russian AI assistant.
Technology stack
| Area | Stack |
|---|---|
| Frontend | React 18, TypeScript 5, Vite 6, React Router, Axios |
| Backend | Node.js 20+, Express 5 |
| Database | PostgreSQL, Prisma 6 |
| Security | JWT, bcrypt, Helmet, CORS, rate limiting |
| Testing | Jest, Supertest, jsdom |
| API documentation | OpenAPI 3, Swagger UI |
Quick start
Prerequisites:
- Node.js 20 or newer;
- npm;
- PostgreSQL;
- Git.
Start the backend:
cd backend
npm ci
Copy-Item .env.example .env
# Configure DATABASE_URL and JWT_SECRET
npm run prisma:generate
npx prisma migrate deploy
npm run prisma:seed
npm run dev
Start the frontend in another terminal:
cd frontend
npm ci
Copy-Item .env.example .env
npm run dev
Available services:
| Service | URL |
|---|---|
| Web application | http://localhost:5173 |
| REST API | http://localhost:3000/api |
| Health check | http://localhost:3000/api/health |
| Swagger UI | http://localhost:3000/api-docs |
Assistant safety model
The assistant is available at:
POST /api/assistant/chat
It reads server-side product, price, and stock data. Commercial values supplied by the client are not trusted.
Cart additions use a prepare-and-confirm flow:
- The assistant creates an expiring proposal.
- It asks the customer for confirmation.
- The cart is modified only after a separate validated confirmation.
The deterministic assistant works without an API key. Optional provider-assisted intent classification is backend-only and cannot authorize cart mutations.
The top-level ai/ directory is a disabled migration reference. The supported assistant implementation runs inside the main Express backend.
Verification
# backend/
npm run check
npm test
npm run check:demo
npm run check:assistant
# frontend/
npm run build
npm run check:contexts
npm run check:pages
npm run check:integration
Backend tests use PostgreSQL rather than a mock database. Configure TEST_DATABASE_URL to isolate test data; otherwise the tests use DATABASE_URL.
Current limitations
- no payment-provider integration;
- guest carts are not automatically merged after sign-in;
- the frontend chat is connected to the main backend; reloading clears visible history (server context persists), and chat file uploads are not yet enabled;
- some sorting and stock filtering operations happen in memory;
- production conversation retention cleanup is required;
- a production rollout requires a security review, monitoring, real content, and browser-level smoke testing.
Additional documentation
backend/README.md— PostgreSQL configuration, seed data, API rules and troubleshooting;ASSISTANT_MIGRATION.md— assistant architecture and security model;INTEGRATION_REPORT.md— frontend/backend integration report;INTEGRATION_API_CONTRACT.md— integration API contract;http://localhost:3000/api-docs— live Swagger documentation.
License
The project is currently marked UNLICENSED. No permission to copy, modify, or redistribute the project is granted unless the repository owner adds an explicit license.
Авторы коммитов
История коммитов
- 2026-09-23 17:59feat: add assistant integration with chat functionalityNurlybek
- 2026-09-23 17:49fix: update assistantOpen state to true in MainLayout and enhance layout stylesNurlybek
- 2026-09-23 17:40feat: add assistant widget and launcher to MainLayoutNurlybek
- 2026-09-23 17:30Add comprehensive tests for assistant tools and HTTP interactionsNurlybek
- 2026-09-23 17:00feat: add Commerce, Content, and Product pages with corresponding functionality and stylesNurlybek
- 2026-09-23 16:23Merge remote-tracking branch 'origin/main'Nurlybek
- 2026-09-23 16:22Add tests for API documentation and database seedingNurlybek
- 2026-09-23 15:58feat(frontend): build EKT commerce interfaceCabinetckate
Все коммиты (13)
- 2026-09-23 15:56Merge remote-tracking branch 'origin/main'Nurlybek
- 2026-09-23 15:54add news service and routes for listing and retrieving news by slugNurlybek
- 2026-09-23 15:09feat: implement specification analysis service with PostgreSQL storageCabinetckate
- 2026-09-23 15:04add initial migration files for database schema setupNurlybek
- 2026-09-23 14:21feat: add middleware for error handling, language detection, rate limiting, and validationNurlybek
Структура репозитория (289 файлов)
ASSISTANT_MIGRATION.md INTEGRATION_API_CONTRACT.md INTEGRATION_REPORT.md README.md ai/.env.example ai/.gitignore ai/.prettierrc.json ai/README.md ai/docs/ARCHITECTURE.md ai/docs/DEMO.md ai/docs/FRONTEND_INTEGRATION.md ai/eslint.config.js ai/legacy-disabled.cjs ai/migrations/001_initial.sql ai/migrations/002_postgresql_only_upgrade.sql ai/package-lock.json ai/package.json ai/src/agents/ekt-agent.ts ai/src/agents/intent-router.ts ai/src/agents/language.ts ai/src/agents/openai-intent-classifier.ts ai/src/analogs/analog-service.ts ai/src/analogs/index.ts ai/src/analogs/scoring.ts ai/src/analogs/types.ts ai/src/api/app.ts ai/src/api/contracts.ts ai/src/cart/cart-service.ts ai/src/cart/contracts.ts ai/src/cart/index.ts ai/src/cart/live-cart-adapter.ts ai/src/cart/mock-cart-adapter.ts ai/src/cart/proposal-store.ts ai/src/cart/session-port.ts ai/src/catalog/index.ts ai/src/catalog/live-catalog-adapter.ts ai/src/catalog/mock-catalog-adapter.ts ai/src/catalog/search-utils.ts ai/src/catalog/types.ts ai/src/composition.ts ai/src/config/env.ts ai/src/database/health.ts ai/src/database/migrate.ts ai/src/database/postgres.ts ai/src/errors/app-error.ts ai/src/files/file-service.ts ai/src/files/parsers.ts ai/src/handoff/handoff-service.ts ai/src/matching/characteristics.ts ai/src/matching/compatibility.ts ai/src/matching/index.ts ai/src/mock-data/mockCatalog.ts ai/src/observability/audit-log.ts ai/src/rag/knowledge-base.ts ai/src/schemas/analogs.ts ai/src/schemas/catalog.ts ai/src/security/content-safety.ts ai/src/security/request-context.ts ai/src/server.ts ai/src/sessions/in-memory-session-store.ts ai/src/sessions/index.ts ai/src/sessions/postgres-session-store.ts ai/src/sessions/session.ts ai/src/specifications/specification-service.ts ai/src/types/domain.ts ai/tests/api/app.test.ts ai/tests/cart/cart-service.test.ts ai/tests/database/postgres-aux-stores.test.ts ai/tests/database/postgres-cart-proposal-store.test.ts ai/tests/database/postgres-session-store.test.ts ai/tests/files/file-service.test.ts ai/tsconfig.eslint.json ai/tsconfig.json ai/vitest.config.ts backend/.env.example backend/.gitignore backend/README.md backend/jest.config.js backend/package-lock.json backend/package.json backend/prisma/migrations/20260923100105_init/migration.sql backend/prisma/migrations/20260923102957_phase_2_ecommerce/migration.sql backend/prisma/migrations/20260923103500_phase_2_constraints/migration.sql backend/prisma/migrations/20260923160000_assistant_context/migration.sql backend/prisma/migrations/migration_lock.toml backend/prisma/schema.prisma backend/prisma/seed-data/catalog.js backend/prisma/seed-data/content.js backend/prisma/seed.js backend/scripts/check-assistant.js backend/scripts/check.js backend/scripts/integration-check.js backend/scripts/verify-demo.js backend/src/app.js backend/src/config/env.js backend/src/config/prisma.js backend/src/config/upload.js backend/src/docs/assistant.js backend/src/docs/paths.js backend/src/docs/schemas.js backend/src/docs/swagger.js backend/src/middleware/admin.middleware.js backend/src/middleware/auth.middleware.js backend/src/middleware/error.middleware.js backend/src/middleware/identity.middleware.js backend/src/middleware/language.middleware.js backend/src/middleware/notFound.middleware.js backend/src/middleware/optionalAuth.middleware.js backend/src/middleware/query.middleware.js backend/src/middleware/rateLimit.middleware.js backend/src/middleware/validation.middleware.js backend/src/modules/admin/admin-resource.config.js backend/src/modules/admin/admin-resource.service.js backend/src/modules/admin/admin.controller.js backend/src/modules/admin/admin.routes.js backend/src/modules/assistant/ai.service.js backend/src/modules/assistant/assistant.controller.js backend/src/modules/assistant/assistant.routes.js backend/src/modules/assistant/assistant.safety.js backend/src/modules/assistant/assistant.service.js backend/src/modules/assistant/assistant.validation.js backend/src/modules/assistant/files/README.md backend/src/modules/assistant/files/archive.js backend/src/modules/assistant/files/file-service.js backend/src/modules/assistant/files/index.js backend/src/modules/assistant/files/optional-parsers.js backend/src/modules/assistant/files/parsers.js backend/src/modules/assistant/files/specifications.js backend/src/modules/assistant/prompts/system.prompt.js backend/src/modules/assistant/tools/cart.tools.js backend/src/modules/assistant/tools/product.tools.js backend/src/modules/assistant/tools/purchase.tools.js backend/src/modules/auth/auth.controller.js backend/src/modules/auth/auth.routes.js backend/src/modules/auth/auth.service.js backend/src/modules/auth/auth.validation.js backend/src/modules/branches/branch.controller.js backend/src/modules/branches/branch.routes.js backend/src/modules/branches/branch.service.js backend/src/modules/brands/brand.controller.js backend/src/modules/brands/brand.routes.js backend/src/modules/brands/brand.service.js backend/src/modules/cart/cart.controller.js backend/src/modules/cart/cart.routes.js backend/src/modules/cart/cart.service.js backend/src/modules/catalog/catalog-filter.service.js backend/src/modules/catalog/catalog.controller.js backend/src/modules/catalog/catalog.routes.js backend/src/modules/catalog/price-list.service.js backend/src/modules/categories/category.controller.js backend/src/modules/categories/category.routes.js backend/src/modules/categories/category.service.js backend/src/modules/cities/city.controller.js backend/src/modules/cities/city.routes.js backend/src/modules/cities/city.service.js backend/src/modules/comparison/comparison.controller.js backend/src/modules/comparison/comparison.routes.js backend/src/modules/comparison/comparison.service.js backend/src/modules/delivery/delivery.service.js backend/src/modules/faqs/faq.routes.js backend/src/modules/faqs/faq.service.js backend/src/modules/favorites/favorite.controller.js backend/src/modules/favorites/favorite.routes.js backend/src/modules/favorites/favorite.service.js backend/src/modules/health/health.controller.js backend/src/modules/health/health.routes.js backend/src/modules/health/health.service.js backend/src/modules/news/news.routes.js backend/src/modules/news/news.service.js backend/src/modules/one-click-orders/oneClickOrder.controller.js backend/src/modules/one-click-orders/oneClickOrder.routes.js backend/src/modules/one-click-orders/oneClickOrder.service.js backend/src/modules/orders/order.controller.js backend/src/modules/orders/order.routes.js backend/src/modules/orders/order.service.js backend/src/modules/orders/order.validation.js backend/src/modules/pages/page.routes.js backend/src/modules/pages/page.service.js backend/src/modules/products/product-query.service.js backend/src/modules/products/product.controller.js backend/src/modules/products/product.routes.js backend/src/modules/products/product.service.js backend/src/modules/products/product.validation.js backend/src/modules/promotions/promotion.routes.js backend/src/modules/promotions/promotion.service.js backend/src/modules/requests/request.routes.js backend/src/modules/requests/request.service.js backend/src/modules/uploads/upload.admin.routes.js backend/src/modules/uploads/upload.controller.js backend/src/modules/uploads/upload.routes.js backend/src/modules/users/user.controller.js backend/src/modules/users/user.routes.js backend/src/modules/users/user.service.js backend/src/modules/users/user.validation.js backend/src/modules/warehouses/warehouse.service.js backend/src/server.js backend/src/utils/apiError.js backend/src/utils/asyncHandler.js backend/src/utils/decimal.js backend/src/utils/jwt.js backend/src/utils/localization.js backend/src/utils/pagination.js backend/src/utils/slug.js backend/src/utils/transaction.js backend/src/utils/validation.js backend/tests/api.test.js backend/tests/assistant-ai.test.js backend/tests/assistant-cart-tools.test.js backend/tests/assistant-files.test.js backend/tests/assistant-tools.test.js backend/tests/assistant.test.js backend/tests/docs.test.js backend/tests/helpers/fixture.js backend/tests/seed.test.js backend/tests/setup.js backend/tests/users.test.js backend/uploads/.gitkeep frontend/.env.example frontend/.gitignore frontend/index.html frontend/package-lock.json frontend/package.json frontend/scripts/assistant-check.mjs frontend/scripts/assistant-integration-check.mjs frontend/scripts/context-check.mjs frontend/scripts/integration-check.mjs frontend/scripts/pages-check.mjs frontend/src/App.tsx frontend/src/api/assistant.api.ts frontend/src/api/auth.api.ts frontend/src/api/brands.api.ts frontend/src/api/cart.api.ts frontend/src/api/catalog.api.ts frontend/src/api/categories.api.ts frontend/src/api/cities.api.ts frontend/src/api/client.ts frontend/src/api/comparison.api.ts frontend/src/api/faq.api.ts frontend/src/api/favorites.api.ts frontend/src/api/health.api.ts frontend/src/api/news.api.ts frontend/src/api/normalizers.ts frontend/src/api/orders.api.ts frontend/src/api/pages.api.ts frontend/src/api/products.api.ts frontend/src/api/promotions.api.ts frontend/src/api/requests.api.ts frontend/src/api/saved-products.ts frontend/src/api/users.api.ts frontend/src/components/assistant/AssistantWidget.tsx frontend/src/components/common/States.tsx frontend/src/components/product/ProductCard.tsx frontend/src/components/product/ProductGrid.tsx frontend/src/contexts/AppContexts.tsx frontend/src/layouts/MainLayout.tsx frontend/src/main.tsx frontend/src/mocks/mock-api.ts frontend/src/mocks/mock-data.ts frontend/src/pages/AccountPages.tsx frontend/src/pages/CatalogPages.tsx frontend/src/pages/CommercePages.tsx frontend/src/pages/ContentPages.tsx frontend/src/pages/Pages.tsx frontend/src/pages/ProductPage.tsx frontend/src/styles/assistant.css frontend/src/styles/global.css frontend/src/styles/integration.css frontend/src/styles/layout.css frontend/src/styles/reset.css frontend/src/styles/variables.css frontend/src/types/api.types.ts frontend/src/types/assistant.types.ts frontend/src/types/auth.types.ts frontend/src/types/brand.types.ts frontend/src/types/cart.types.ts frontend/src/types/category.types.ts frontend/src/types/city.types.ts frontend/src/types/content.types.ts frontend/src/types/order.types.ts frontend/src/types/product.types.ts frontend/src/utils/assets.ts frontend/src/utils/format.ts frontend/src/utils/session.ts frontend/src/utils/storage.ts frontend/src/vite-env.d.ts frontend/tsconfig.app.json frontend/tsconfig.json frontend/tsconfig.node.json frontend/vite.config.ts
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.