DemO/README.md

126 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 рядом с запуском
и перезапустите, база создастся заново (все данные пропадут).