AAYMA
RU
Войти

EKT Store

Демо-интернет-магазин электрооборудования: синтетический каталог, цены по городам, остатки на складах, корзина и заказы.

Рабочий MVP
Команда «Undefined» 3💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: 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-ассистент.

Қазақша · Русский · English

Node.js React Express PostgreSQL TypeScript


🇰🇿 Қазақша

Жоба туралы

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 ішінде жұмыс істейді.

Қолданылған технологиялар

БөлікТехнологиялар
FrontendReact 18, TypeScript 5, Vite 6, React Router, Axios
BackendNode.js 20+, Express 5, CommonJS
DatabasePostgreSQL, 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 APIhttp://localhost:3000/api
Health checkhttp://localhost:3000/api/health
Swagger UIhttp://localhost:3000/api-docs

AI-ассистент

Ассистенттің негізгі endpoint-і:

POST /api/assistant/chat

Ассистент:

  • нақты каталогтан өнім іздейді;
  • актуалды баға мен қойма қалдығын оқиды;
  • балама тауарларды ұсынады;
  • қазақша және орысша жұмыс істейді;
  • пайдаланушы жіберген баға немесе stock мәніне сенбейді;
  • себетті пайдаланушының нақты растауынсыз өзгертпейді.

Себетке қосу екі кезеңнен тұрады:

  1. Ассистент ұсыныс дайындап, растау сұрайды.
  2. Пайдаланушы Иә, қос немесе Да, добавь деп нақты растағаннан кейін ғана себет өзгереді.

Мысал:

$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-ассистент на казахском и русском языках.

Технологии

СлойТехнологии
FrontendReact 18, TypeScript, Vite, React Router, Axios
BackendNode.js 20+, Express 5
DatabasePostgreSQL, Prisma 6
SecurityJWT, bcrypt, Helmet, CORS, rate limiting
TestsJest, Supertest, jsdom
DocumentationOpenAPI 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

После запуска:

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, and ADMIN roles;
  • 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

AreaStack
FrontendReact 18, TypeScript 5, Vite 6, React Router, Axios
BackendNode.js 20+, Express 5
DatabasePostgreSQL, Prisma 6
SecurityJWT, bcrypt, Helmet, CORS, rate limiting
TestingJest, Supertest, jsdom
API documentationOpenAPI 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:

ServiceURL
Web applicationhttp://localhost:5173
REST APIhttp://localhost:3000/api
Health checkhttp://localhost:3000/api/health
Swagger UIhttp://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:

  1. The assistant creates an expiring proposal.
  2. It asks the customer for confirmation.
  3. 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

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.

Звёзды
⭐ 0
Форки
0
Язык
TypeScript
Последний push
в прошлом месяце
Коммиты
13
Авторы
2
Файлы
289
Ветки
1

Авторы коммитов

Nurlybek 11Cabinetckate 2

История коммитов

  • 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 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.