Go to file
2026-09-09 04:17:00 +05:00
DEMO Сиды ролей Admin и Client при старте 2026-09-09 04:10:33 +05:00
.gitignore Переход на SQLite + автомиграция для сервера 2026-09-09 04:07:27 +05:00
DEMO.slnx DEMO shop: simplified project with comments 2026-09-09 03:57:03 +05:00
README.md Добавлен README с описанием проекта 2026-09-09 04:17:00 +05:00

DEMO Shop

Простой учебный проект: магазин с товарами, складами и заказами. Сайт + серверная часть (API) в одном проекте.

Рабочий сайт: https://demo.triron.ru

Что умеет

  • Вход и регистрация. Новому человеку дается роль Client.
  • 6 разделов: Товары, Категории, Склады, Остатки, Пользователи, Заказы.
  • Везде можно добавлять, изменять и удалять записи.
  • В заказе можно смотреть товары и добавлять новые.
  • Внизу экрана всплывают короткие сообщения (что сохранилось, где ошибка).

Что внутри

DEMO/
  Controllers/      серверные адреса (API), по одному файлу на таблицу
    AuthController.cs       вход и регистрация
    ProductsController.cs   товары
    CategoriesController.cs категории
    WarehousesController.cs склады
    StocksController.cs     остатки
    UsersController.cs      пользователи
    OrdersController.cs     заказы
    OrderItemsController.cs товары внутри заказов
    RolesController.cs      роли
  Data/
    AppDbContext.cs        список всех таблиц базы
    AppDbContextFactory.cs подключение для миграций
  Models/           классы таблиц: Product, Category, Warehouse,
                    Stock, User, Role, Order, OrderItem
  Migrations/       история создания базы (одна общая миграция)
  wwwroot/          сайт, который видит человек
    index.html      разметка: вход, меню, таблицы, окно формы
    style.css       простые стили, светлый дизайн
    script.js       весь код сайта с понятными комментариями
  Program.cs        главный файл: запускает все и создает базу
  appsettings.json  настройки, там строка подключения к базе

База данных: SQLite, файл DemoDB.db. Создается сам при первом запуске, ничего ставить не надо. При старте сами добавляются роли Admin и Client.

Как запустить у себя

Нужен только .NET 10 SDK.

cd DEMO
dotnet restore
dotnet run

Открыть в браузере: http://localhost:5000 (точный адрес покажет само окно запуска).

База создастся сама. Дальше нажмите "Зарегистрироваться" на сайте.

Адреса API

Все адреса начинаются одинаково, дальше свое для каждой таблицы.

Что сделать Как вызвать Что отдать
Войти POST /api/auth/login логин и пароль
Зарегистрироваться POST /api/auth/register логин и пароль
Список товаров GET /api/products ничего
Добавить товар POST /api/products название, цена, categoryId
Изменить товар PUT /api/products/5 то же самое (5 это номер)
Удалить товар DELETE /api/products/5 ничего

Точно так же работают остальные таблицы, только адрес другой:

  • /api/categories (поле name)
  • /api/warehouses (поля name, address)
  • /api/stocks (поля productId, warehouseId, quantity)
  • /api/users (поля login, password, roleId)
  • /api/orders (поля userId, date, status)
  • /api/orderitems (поля orderId, productId, quantity, price)
  • /api/roles (поле name)

Статусы заказа: New, Processing, Completed, Cancelled.

Как это стоит на сервере

  • Сервер: Ubuntu 24.04, стоит .NET 10 SDK.
  • Код лежит в /opt/demo (копия этого репозитория).
  • Собранный проект лежит в /opt/demo/publish.
  • Служба называется demo, смотрит на 127.0.0.1:5001.
  • Снаружи сайт отдает nginx через https://demo.triron.ru.
  • Сертификат от Let's Encrypt, продлевается сам.

Проверить что служба жива:

systemctl status demo.service
curl http://127.0.0.1:5001/api/roles

Как обновить сайт на сервере

cd /opt/demo
git pull origin master
cd DEMO
dotnet publish -c Release -o /opt/demo/publish
systemctl restart demo.service

База при этом не теряется, миграции применяются сами.

Если что-то не работает

  1. Служба не запустилась: journalctl -u demo.service -n 50 покажет ошибку.
  2. Сайт не открывается снаружи: nginx -t проверит настройки, systemctl reload nginx перезагрузит их.
  3. Ошибка про базу: удалите файл DemoDB.db рядом с запуском и перезапустите, база создастся заново (все данные пропадут).