5.5 KiB
5.5 KiB
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
База при этом не теряется, миграции применяются сами.
Если что-то не работает
- Служба не запустилась:
journalctl -u demo.service -n 50покажет ошибку. - Сайт не открывается снаружи:
nginx -tпроверит настройки,systemctl reload nginxперезагрузит их. - Ошибка про базу: удалите файл DemoDB.db рядом с запуском и перезапустите, база создастся заново (все данные пропадут).