No description
  • C# 47.6%
  • Vue 46.6%
  • JavaScript 5%
  • CSS 0.3%
  • Dockerfile 0.3%
  • Other 0.1%
Find a file
2026-05-11 00:45:43 +03:00
.branding@9c1a222971 Ребрендинг 2026-05-05 18:00:20 +03:00
.forgejo/workflows Фикс CI/CD 2026-05-05 21:18:45 +03:00
CaviCode-WorkshopCRM.Api Запрещаем менять права своей же роли или администратора + чиним загрузку .gcode.3mf файлов для принтера 2026-05-11 00:45:43 +03:00
CaviCode-WorkshopCRM.Frontend Запрещаем менять права своей же роли или администратора + чиним загрузку .gcode.3mf файлов для принтера 2026-05-11 00:45:43 +03:00
docs Диаграмки + БД 2026-05-05 21:06:16 +03:00
.dockerignore Поддержка пользователей и ролей 2026-05-05 18:40:34 +03:00
.env.example Swagger 2026-05-07 00:41:33 +03:00
.gitignore Ребрендинг 2026-05-05 18:00:20 +03:00
API.md Запрещаем менять права своей же роли или администратора + чиним загрузку .gcode.3mf файлов для принтера 2026-05-11 00:45:43 +03:00
CaviCode-WorkshopCRM.slnx Поддержка пользователей и ролей 2026-05-05 18:40:34 +03:00
Development.md Запрещаем менять права своей же роли или администратора + чиним загрузку .gcode.3mf файлов для принтера 2026-05-11 00:45:43 +03:00
docker-compose.yml Swagger 2026-05-07 00:41:33 +03:00
README.md Swagger 2026-05-07 00:41:33 +03:00

CaviCode Workshop CRM

CaviCode Workshop CRM — CRM-система для мастерской 3D-печати. Она помогает вести заказы, клиентов, парк принтеров, склад расходников и каталог 3D-моделей в одном интерфейсе.

Зачем нужен проект

Проект закрывает типичный рабочий поток небольшой 3D-печатной мастерской: принять заказ, выбрать клиента, модель, принтер и материал, провести заказ по статусам, списать расходники, сохранить отзывы и файлы моделей.

Что умеет

  • Канбан заказов: New → Slicing → Printing → PostProcessing → Ready → Shipped.
  • CRUD для клиентов, проектов, заказов, принтеров, расходников, категорий и 3D-моделей.
  • Клиентские проекты: единый заказчик, несколько сборок, множество позиций моделей и связанных производственных заказов.
  • Сборки моделей в каталоге: переиспользуемые комплекты из нескольких 3D-моделей с количеством и заметками по деталям.
  • Склад FDM/SLA-материалов с остатками, цветами и быстрым списанием.
  • Каталог моделей с превью, STL/G-Code/project-файлами и требованиями к материалам.
  • GCODE-файлы можно привязывать к целевому принтеру и отправлять на печать прямо из карточки модели.
  • Перед отправкой на печать CRM показывает окно подтверждения с камерой принтера.
  • Интеграция с Klipper/Moonraker: live-статус, телеметрия, прокси камеры, загрузка GCODE и очередь для принтеров с меткой Конвеерный.
  • PWA-интерфейс на Vue 3 для работы с десктопа и мобильных устройств.
  • Авторизация через ZITADEL или демо-режим без авторизации.
  • Локальные пользователи и роли, синхронизируемые с ZITADEL.
  • Настраиваемые права ролей, блокировка пользователей и назначение исполнителей на заказы.
  • Swagger UI / OpenAPI JSON для ручной проверки REST API.

Быстрый запуск через Docker

cp .env.example .env
nano .env
docker compose up -d --build

После запуска откройте приложение на порту из APP_PORT, например http://localhost:80. Если нужно открыть Swagger в Docker, включите SWAGGER_ENABLED=true в .env и перейдите на http://localhost:<APP_PORT>/swagger.

Для запуска без ZITADEL включите демо-режим:

DEMO_MODE=true

В демо-режиме frontend не отправляет пользователя на страницу входа, а API принимает встроенного demo-пользователя. Этот режим удобен для локального просмотра и тестовых стендов, но не предназначен для production.

Для production-режима с ZITADEL дополнительно настройте:

ZITADEL_AUTHORITY=https://auth.example.com
ZITADEL_CLIENT_ID=...
ZITADEL_PROJECT_ID=...
ZITADEL_ORGANIZATION_ID=...
ZITADEL_API_TOKEN=...

ZITADEL_PROJECT_ID нужен для role claims и синхронизации ролей проекта. ZITADEL_ORGANIZATION_ID опционален, но полезен для self-hosted/мультиорганизационного ZITADEL: backend передаёт его в x-zitadel-orgid при API-синхронизации. ZITADEL_API_TOKEN используется только backend-ом для чтения пользователей, ролей и назначений ролей из ZITADEL.

Локальный запуск для разработки

docker run -d \
  --name workshop-db \
  -e POSTGRES_DB=workshopdb \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=postgres \
  -p 5432:5432 \
  postgres:17-alpine

cd CaviCode-WorkshopCRM.Api
ASPNETCORE_URLS=http://localhost:5000 dotnet run --no-launch-profile

Во втором терминале:

cd CaviCode-WorkshopCRM.Frontend
cp .env.example .env.local
npm install --legacy-peer-deps
npm run dev

Frontend будет доступен на http://localhost:5173, API — на http://localhost:5000. Swagger UI в development-режиме доступен на http://localhost:5000/swagger; через Vite proxy также можно открыть http://localhost:5173/swagger.

Документация

  • Development.md — архитектура, конфигурация, запуск, Docker, auth, внутренняя структура.
  • API.md — REST API, модели, payload-ы, загрузка файлов и форматы ответов.