126 lines
6.1 KiB
Markdown
126 lines
6.1 KiB
Markdown
# DEMO Shop
|
||
|
||
Простой учебный проект: магазин с товарами, складами и заказами.
|
||
Сайт + серверная часть (API) в одном проекте.
|
||
|
||
Рабочий сайт: https://demo.triron.ru
|
||
|
||
## Что умеет
|
||
|
||
- Вход и регистрация. Новому человеку дается роль Client.
|
||
- Почта при регистрации обязательна, проверяется что там есть @ и точка.
|
||
- Пароль не короче 8 символов, логин не короче 2 букв. Почта и логин не повторяются.
|
||
- 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 | логин, пароль (от 8 символов), почта |
|
||
| Список товаров | 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 рядом с запуском
|
||
и перезапустите, база создастся заново (все данные пропадут).
|