@mashka818/exam-de-template 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/exam-guides/EXAM_COMMANDS.txt +1 -1
  2. package/exam-guides/commented-code/client/index.html +7 -0
  3. package/exam-guides/commented-code/client/package-lock.json +541 -6
  4. package/exam-guides/commented-code/client/package.json +1 -0
  5. package/exam-guides/commented-code/client/public/images/README.txt +4 -24
  6. package/exam-guides/commented-code/client/public/images/about-cleaning.png +0 -0
  7. package/exam-guides/commented-code/client/public/images/admin-banner.png +0 -0
  8. package/exam-guides/commented-code/client/public/images/empty-requests.png +0 -0
  9. package/exam-guides/commented-code/client/public/images/footer-photo-1.png +0 -0
  10. package/exam-guides/commented-code/client/public/images/footer-photo-2.png +0 -0
  11. package/exam-guides/commented-code/client/public/images/footer-photo-3.png +0 -0
  12. package/exam-guides/commented-code/client/public/images/home-hero.png +0 -0
  13. package/exam-guides/commented-code/client/public/images/login-banner.png +0 -0
  14. package/exam-guides/commented-code/client/public/images/logo.png +0 -0
  15. package/exam-guides/commented-code/client/public/images/new-request-banner.png +0 -0
  16. package/exam-guides/commented-code/client/public/images/register-banner.png +0 -0
  17. package/exam-guides/commented-code/client/public/images/requests-banner.png +0 -0
  18. package/exam-guides/commented-code/client/public/images/slide-1.png +0 -0
  19. package/exam-guides/commented-code/client/public/images/slide-2.png +0 -0
  20. package/exam-guides/commented-code/client/public/images/slide-3.png +0 -0
  21. package/exam-guides/commented-code/client/src/App.jsx +14 -0
  22. package/exam-guides/commented-code/client/src/api.js +16 -2
  23. package/exam-guides/commented-code/client/src/components/FormField.jsx +7 -0
  24. package/exam-guides/commented-code/client/src/components/Layout.jsx +8 -0
  25. package/exam-guides/commented-code/client/src/components/PageImage.jsx +7 -0
  26. package/exam-guides/commented-code/client/src/components/ProtectedRoute.jsx +7 -0
  27. package/exam-guides/commented-code/client/src/components/UserNav.jsx +7 -0
  28. package/exam-guides/commented-code/client/src/components/landing/HeroSlider.jsx +7 -0
  29. package/exam-guides/commented-code/client/src/components/landing/LandingLayout.jsx +7 -0
  30. package/exam-guides/commented-code/client/src/components/landing/SiteFooter.jsx +7 -0
  31. package/exam-guides/commented-code/client/src/config/images.js +26 -28
  32. package/exam-guides/commented-code/client/src/constants/services.js +7 -0
  33. package/exam-guides/commented-code/client/src/context/AuthContext.jsx +8 -0
  34. package/exam-guides/commented-code/client/src/index.css +8 -0
  35. package/exam-guides/commented-code/client/src/main.jsx +8 -0
  36. package/exam-guides/commented-code/client/src/pages/AdminPage.jsx +59 -24
  37. package/exam-guides/commented-code/client/src/pages/LandingPage.jsx +7 -0
  38. package/exam-guides/commented-code/client/src/pages/LoginPage.jsx +8 -0
  39. package/exam-guides/commented-code/client/src/pages/RegisterPage.jsx +8 -0
  40. package/exam-guides/commented-code/client/src/pages/RequestFormPage.jsx +7 -0
  41. package/exam-guides/commented-code/client/src/pages/RequestsPage.jsx +7 -0
  42. package/exam-guides/commented-code/client/src/utils/validation.js +8 -0
  43. package/exam-guides/commented-code/client/vite.config.js +7 -0
  44. package/exam-guides/commented-code/server/.env.example +8 -0
  45. package/exam-guides/commented-code/server/db/init.js +7 -0
  46. package/exam-guides/commented-code/server/db/pool.js +7 -0
  47. package/exam-guides/commented-code/server/db/schema.sql +5 -0
  48. package/exam-guides/commented-code/server/db/seed.sql +5 -0
  49. package/exam-guides/commented-code/server/index.js +7 -0
  50. package/exam-guides/commented-code/server/middleware/auth.js +7 -0
  51. package/exam-guides/commented-code/server/routes/admin.js +23 -3
  52. package/exam-guides/commented-code/server/routes/auth.js +7 -0
  53. package/exam-guides/commented-code/server/routes/requests.js +7 -0
  54. package/exam-guides/commented-code/server/routes/services.js +7 -0
  55. package/exam-guides/commented-code/server/utils/validation.js +7 -0
  56. package/exam-project/EXAM_COMMANDS.txt +47 -0
  57. package/exam-project/README.md +4 -7
  58. package/exam-project/THEME_BANQUETAM_NET.md +106 -0
  59. package/exam-project/client/index.html +7 -0
  60. package/exam-project/client/package-lock.json +541 -6
  61. package/exam-project/client/package.json +1 -0
  62. package/exam-project/client/public/images/README.txt +4 -24
  63. package/exam-project/client/public/images/about-cleaning.png +0 -0
  64. package/exam-project/client/public/images/admin-banner.png +0 -0
  65. package/exam-project/client/public/images/empty-requests.png +0 -0
  66. package/exam-project/client/public/images/footer-photo-1.png +0 -0
  67. package/exam-project/client/public/images/footer-photo-2.png +0 -0
  68. package/exam-project/client/public/images/footer-photo-3.png +0 -0
  69. package/exam-project/client/public/images/home-hero.png +0 -0
  70. package/exam-project/client/public/images/login-banner.png +0 -0
  71. package/exam-project/client/public/images/logo.png +0 -0
  72. package/exam-project/client/public/images/new-request-banner.png +0 -0
  73. package/exam-project/client/public/images/register-banner.png +0 -0
  74. package/exam-project/client/public/images/requests-banner.png +0 -0
  75. package/exam-project/client/public/images/slide-1.png +0 -0
  76. package/exam-project/client/public/images/slide-2.png +0 -0
  77. package/exam-project/client/public/images/slide-3.png +0 -0
  78. package/exam-project/client/src/App.jsx +35 -1
  79. package/exam-project/client/src/api.js +37 -2
  80. package/exam-project/client/src/components/FormField.jsx +22 -1
  81. package/exam-project/client/src/components/Layout.jsx +34 -4
  82. package/exam-project/client/src/components/PageImage.jsx +24 -1
  83. package/exam-project/client/src/components/ProtectedRoute.jsx +23 -1
  84. package/exam-project/client/src/components/UserNav.jsx +20 -0
  85. package/exam-project/client/src/components/landing/HeroSlider.jsx +23 -2
  86. package/exam-project/client/src/components/landing/LandingLayout.jsx +23 -1
  87. package/exam-project/client/src/components/landing/SiteFooter.jsx +20 -0
  88. package/exam-project/client/src/config/images.js +45 -26
  89. package/exam-project/client/src/constants/services.js +20 -1
  90. package/exam-project/client/src/context/AuthContext.jsx +26 -1
  91. package/exam-project/client/src/index.css +28 -1
  92. package/exam-project/client/src/main.jsx +20 -1
  93. package/exam-project/client/src/pages/AdminPage.jsx +65 -7
  94. package/exam-project/client/src/pages/LandingPage.jsx +23 -0
  95. package/exam-project/client/src/pages/LoginPage.jsx +28 -2
  96. package/exam-project/client/src/pages/RegisterPage.jsx +29 -1
  97. package/exam-project/client/src/pages/RequestFormPage.jsx +28 -3
  98. package/exam-project/client/src/pages/RequestsPage.jsx +26 -1
  99. package/exam-project/client/src/utils/validation.js +26 -1
  100. package/exam-project/client/vite.config.js +22 -1
  101. package/exam-project/scripts/unpack-template.js +2 -1
  102. package/exam-project/server/.env.example +8 -0
  103. package/exam-project/server/db/init.js +27 -3
  104. package/exam-project/server/db/pool.js +20 -1
  105. package/exam-project/server/db/schema.sql +17 -0
  106. package/exam-project/server/db/seed.sql +8 -0
  107. package/exam-project/server/index.js +24 -1
  108. package/exam-project/server/middleware/auth.js +22 -1
  109. package/exam-project/server/routes/admin.js +44 -4
  110. package/exam-project/server/routes/auth.js +27 -1
  111. package/exam-project/server/routes/requests.js +27 -4
  112. package/exam-project/server/routes/services.js +21 -1
  113. package/exam-project/server/utils/validation.js +27 -2
  114. package/package.json +1 -1
  115. package/scripts/unpack-template.js +2 -1
  116. package/exam-guides/commented-code/client/public/images/about-cleaning.svg +0 -4
  117. package/exam-guides/commented-code/client/public/images/admin-banner.svg +0 -1
  118. package/exam-guides/commented-code/client/public/images/empty-requests.svg +0 -1
  119. package/exam-guides/commented-code/client/public/images/footer-photo-1.svg +0 -4
  120. package/exam-guides/commented-code/client/public/images/footer-photo-2.svg +0 -4
  121. package/exam-guides/commented-code/client/public/images/footer-photo-3.svg +0 -4
  122. package/exam-guides/commented-code/client/public/images/home-hero.svg +0 -4
  123. package/exam-guides/commented-code/client/public/images/login-banner.svg +0 -1
  124. package/exam-guides/commented-code/client/public/images/logo.svg +0 -4
  125. package/exam-guides/commented-code/client/public/images/new-request-banner.svg +0 -1
  126. package/exam-guides/commented-code/client/public/images/register-banner.svg +0 -1
  127. package/exam-guides/commented-code/client/public/images/requests-banner.svg +0 -1
  128. package/exam-guides/commented-code/client/public/images/slide-1.svg +0 -6
  129. package/exam-guides/commented-code/client/public/images/slide-2.svg +0 -5
  130. package/exam-guides/commented-code/client/public/images/slide-3.svg +0 -5
  131. package/exam-project/client/public/images/about-cleaning.svg +0 -4
  132. package/exam-project/client/public/images/admin-banner.svg +0 -1
  133. package/exam-project/client/public/images/empty-requests.svg +0 -1
  134. package/exam-project/client/public/images/footer-photo-1.svg +0 -4
  135. package/exam-project/client/public/images/footer-photo-2.svg +0 -4
  136. package/exam-project/client/public/images/footer-photo-3.svg +0 -4
  137. package/exam-project/client/public/images/home-hero.svg +0 -4
  138. package/exam-project/client/public/images/login-banner.svg +0 -1
  139. package/exam-project/client/public/images/logo.svg +0 -4
  140. package/exam-project/client/public/images/new-request-banner.svg +0 -1
  141. package/exam-project/client/public/images/register-banner.svg +0 -1
  142. package/exam-project/client/public/images/requests-banner.svg +0 -1
  143. package/exam-project/client/public/images/slide-1.svg +0 -6
  144. package/exam-project/client/public/images/slide-2.svg +0 -5
  145. package/exam-project/client/public/images/slide-3.svg +0 -5
@@ -1,3 +1,10 @@
1
+ /**
2
+ * =============================================================================
3
+ * ФАЙЛ: server/routes/admin.js
4
+ * GET /requests?status= — фильтр. PATCH /requests/:id/status
5
+ * =============================================================================
6
+ */
7
+
1
8
  /**
2
9
  * =============================================================================
3
10
  * ADMIN — /api/admin (только role=admin, логин adminka)
@@ -27,16 +34,29 @@ const router = Router();
27
34
 
28
35
  const ALLOWED_STATUSES = ['in_progress', 'completed', 'cancelled']; // БАНКЕТАМ.НЕТ: убрать 'cancelled'
29
36
 
30
- // GET /api/admin/requests — все заявки для панели администратора
31
- router.get('/requests', authRequired, adminRequired, async (_req, res) => {
37
+ // GET /api/admin/requests — все заявки; ?status=new|in_progress|completed|cancelled (без all)
38
+ const FILTER_STATUSES = ['new', 'in_progress', 'completed', 'cancelled'];
39
+
40
+ router.get('/requests', authRequired, adminRequired, async (req, res) => {
32
41
  try {
42
+ const { status } = req.query;
43
+ const params = [];
44
+ let where = 'WHERE 1=1';
45
+
46
+ if (status && status !== 'all' && FILTER_STATUSES.includes(status)) {
47
+ params.push(status);
48
+ where += ` AND r.status = $${params.length}`;
49
+ }
50
+
33
51
  const { rows } = await pool.query(
34
52
  `SELECT r.*, st.name AS service_name, u.full_name AS user_full_name,
35
53
  u.phone AS user_phone, u.email AS user_email
36
54
  FROM requests r
37
55
  LEFT JOIN service_types st ON st.id = r.service_type_id
38
56
  JOIN users u ON u.id = r.user_id
39
- ORDER BY r.created_at DESC`
57
+ ${where}
58
+ ORDER BY r.created_at DESC`,
59
+ params
40
60
  );
41
61
  res.json(
42
62
  rows.map((row) => ({
@@ -1,3 +1,10 @@
1
+ /**
2
+ * =============================================================================
3
+ * ФАЙЛ: server/routes/auth.js
4
+ * POST /register, POST /login, GET /me
5
+ * =============================================================================
6
+ */
7
+
1
8
  /**
2
9
  * =============================================================================
3
10
  * AUTH — /api/auth
@@ -1,3 +1,10 @@
1
+ /**
2
+ * =============================================================================
3
+ * ФАЙЛ: server/routes/requests.js
4
+ * GET /mine, POST / — заявки пользователя. STATUS_LABELS — подписи статусов
5
+ * =============================================================================
6
+ */
7
+
1
8
  /**
2
9
  * =============================================================================
3
10
  * REQUESTS — /api/requests (только role=user)
@@ -1,3 +1,10 @@
1
+ /**
2
+ * =============================================================================
3
+ * ФАЙЛ: server/routes/services.js
4
+ * GET /api/services — справочник для select на форме п.4
5
+ * =============================================================================
6
+ */
7
+
1
8
  /**
2
9
  * =============================================================================
3
10
  * SERVICES — GET /api/services
@@ -1,3 +1,10 @@
1
+ /**
2
+ * =============================================================================
3
+ * ФАЙЛ: server/utils/validation.js
4
+ * Как client/src/utils/validation.js — те же правила!
5
+ * =============================================================================
6
+ */
7
+
1
8
  /**
2
9
  * =============================================================================
3
10
  * ВАЛИДАЦИЯ НА СЕРВЕРЕ (обязательно дублировать на клиенте)
@@ -0,0 +1,47 @@
1
+ ================================================================================
2
+ ЭКЗАМЕН — одна команда, две папки
3
+ ================================================================================
4
+ Нужны: Node.js, PostgreSQL, интернет, пакет на npm (см. NPM_PACKAGE.md)
5
+
6
+ Пакет: @mashka818/exam-de-template
7
+
8
+ --------------------------------------------------------------------------------
9
+ НА ЭКЗАМЕНЕ
10
+ --------------------------------------------------------------------------------
11
+
12
+ mkdir C:\DE\work
13
+ cd C:\DE\work
14
+ npx @mashka818/exam-de-template@1.0.1 init
15
+
16
+ Появятся:
17
+ exam-project\ — правите и запускаете ЗДЕСЬ
18
+ exam-guides\ — шпоры (удалить перед сдачей)
19
+
20
+ cd exam-project
21
+ copy server\.env.example server\.env
22
+ notepad server\.env
23
+ npm run db:init
24
+ npm run dev
25
+
26
+ Сайт: http://localhost:5173
27
+
28
+ --------------------------------------------------------------------------------
29
+ ПЕРЕД СДАЧЕЙ
30
+ --------------------------------------------------------------------------------
31
+
32
+ cd ..
33
+ rmdir /s /q exam-guides
34
+
35
+ (остаётся только exam-project — его и показываете)
36
+
37
+ --------------------------------------------------------------------------------
38
+ ДОМА (один раз)
39
+ --------------------------------------------------------------------------------
40
+
41
+ npm run sync:project
42
+ cd exam-project
43
+ npm publish --access public
44
+
45
+ Подробно: NPM_PACKAGE.md
46
+
47
+ ================================================================================
@@ -1,6 +1,7 @@
1
- # Проект для экзамена (сдаёте эту папку)
1
+ # exam-project работайте здесь
2
2
 
3
- Чистый рабочий шаблон без шпор в коде.
3
+ В каждом файле кода вверху блок **ФАЙЛ:** — что менять на экзамене.
4
+ Полная карта: **КАРТА_ЭКЗАМЕНА.md**
4
5
 
5
6
  ```powershell
6
7
  npm run install:all
@@ -9,8 +10,4 @@ npm run db:init
9
10
  npm run dev
10
11
  ```
11
12
 
12
- Сайт: http://localhost:5173
13
-
14
- **Перед сдачей:** удалите соседнюю папку **exam-guides** (целиком).
15
-
16
- Дома обновить из копии с комментариями: в корне репозитория `npm run sync:project`
13
+ Перед сдачей: удалите папку **exam-guides** (если рядом). При желании уберите лишние комментарии из кода.
@@ -0,0 +1,106 @@
1
+ # Тема «Банкетам.Нет» — что менять в шаблоне (только текст и логика по комментариям)
2
+
3
+ > **Подробный гайд** (как удалять/добавлять кнопки, картинки, секции, новую страницу): **[GUIDE_PAGES.md](GUIDE_PAGES.md)**
4
+
5
+ Сейчас в коде тема **«Мой Не Сам» (клининг)**. На экзамене ищите в файлах метку **`БАНКЕТАМ.НЕТ:`** — там подсказка, что заменить.
6
+
7
+ ---
8
+
9
+ ## Быстрая таблица замен
10
+
11
+ | Сейчас (клининг) | Банкетам.Нет |
12
+ |------------------|--------------|
13
+ | Мой Не Сам | **Банкетам.Нет** |
14
+ | Заявка / requests | **Бронирование / заявка на зал** |
15
+ | Вид услуги | **Помещение** (зал, ресторан, летняя веранда, закрытая веранда) |
16
+ | Дата и время уборки | **Дата начала банкета** (формат **ДД.ММ.ГГГГ**) |
17
+ | adminka / password | **Admin26 / Demo20** |
18
+ | Статус «В работе» | **Банкет назначен** |
19
+ | Статус «Выполнено» | **Банкет завершен** |
20
+ | Отменено | по заданию может не быть — убрать кнопку или оставить |
21
+ | Пароль ≥ 6 | **Пароль ≥ 8** |
22
+ | Логин | **латиница + цифры, ≥ 6**, уникальный |
23
+ | Слайдер 3 слайда, 5 сек | **4 слайда, 3 сек** (HeroSlider.jsx, images.js) |
24
+ | «Иная услуга» | обычно **не нужна** — убрать чекбокс |
25
+ | Личный кабинет п.3 | история + **отзывы** (только после смены статуса админом) |
26
+ | Админ-панель | **фильтры, сортировка, пагинация**, уведомления |
27
+
28
+ ---
29
+
30
+ ## Пункты задания → файлы
31
+
32
+ ### п.1 Регистрация (`/register`)
33
+ - `RegisterPage.jsx` — подписи полей, ссылка «Уже зарегистрированы?» → наоборот: на login «**Еще не зарегистрированы? Регистрация**»
34
+ - `client/src/utils/validation.js` + `server/utils/validation.js` — логин `[a-zA-Z0-9]{6,}`, пароль `min 8`
35
+ - `server/routes/auth.js` — INSERT users
36
+
37
+ ### п.2 Вход (`/login`)
38
+ - `LoginPage.jsx` — текст ошибок, ссылка на регистрацию
39
+ - `server/routes/auth.js` — POST /login
40
+
41
+ ### п.3 Личный кабинет (`/requests`)
42
+ - `RequestsPage.jsx` — «история бронирований», **слайдер** (можно вынести компонент с лендинга)
43
+ - **ДОБАВИТЬ:** таблица/поле `reviews` в БД, форма отзыва если статус ≠ `new` (после действия админа)
44
+ - `server/db/schema.sql` — комментарий про `reviews`
45
+
46
+ ### п.4 Оформление заявки (`/requests/form`)
47
+ - `RequestFormPage.jsx` — select помещений, дата **ДД.ММ.ГГГГ**, оплата
48
+ - `server/db/seed.sql` — 4 типа помещений
49
+ - убрать/не показывать «Иная услуга»
50
+
51
+ ### п.5 Админ (`/admin`)
52
+ - `server/db/init.js` — **Admin26** / **Demo20**
53
+ - `AdminPage.jsx` — статусы только «Банкет назначен», «Банкет завершен» (+ изначально «Новая»)
54
+ - **ДОБАВИТЬ:** фильтр по статусу, сортировка, пагинация (комментарии в AdminPage.jsx)
55
+
56
+ ### Лендинг (`/`)
57
+ - `LandingPage.jsx`, `HeroSlider.jsx` — тексты про банкеты, **4** картинки, интервал **3000** мс
58
+ - `client/public/images/` — slide-1…slide-4.png
59
+
60
+ ### Модуль 2
61
+ - HTML-макеты 390×844 в Figma, не обязательно в репозитории
62
+ - `RESPONSIVE.md` — мобильный дизайн
63
+
64
+ ### Модуль 3
65
+ - `schema.sql` — отзывы, при необходимости убрать `cancelled`
66
+ - `index.css` — микроанимации уже есть (animate-fade-up)
67
+
68
+ ---
69
+
70
+ ## Статусы в БД (schema.sql + routes)
71
+
72
+ ```
73
+ new → «Новая»
74
+ in_progress → «Банкет назначен» (переименовать LABEL, не обязательно ключ)
75
+ completed → «Банкет завершен»
76
+ cancelled → убрать из CHECK или не показывать в админке
77
+ ```
78
+
79
+ В `server/routes/requests.js` и `admin.js` — `STATUS_LABELS`.
80
+ В `RequestsPage.jsx` — `statusColors`.
81
+
82
+ ---
83
+
84
+ ## Помещения (seed.sql)
85
+
86
+ ```sql
87
+ ('Банкетный зал'),
88
+ ('Ресторан'),
89
+ ('Летняя веранда'),
90
+ ('Закрытая веранда')
91
+ ```
92
+
93
+ ---
94
+
95
+ ## Порядок работы на экзамене (≈30–60 мин только тексты)
96
+
97
+ 1. `Layout.jsx` + `LandingLayout.jsx` — название **Банкетам.Нет**
98
+ 2. `init.js` — Admin26 / Demo20 → `npm run db:init`
99
+ 3. `seed.sql` — помещения
100
+ 4. `validation.js` (×2) — логин/пароль
101
+ 5. Все `pages/*.jsx` — заголовки и кнопки
102
+ 6. `STATUS_LABELS` + админ-кнопки
103
+ 7. Картинки в `public/images/` + `images.js`
104
+ 8. По времени: отзывы, фильтры админа, 4-й слайд
105
+
106
+ Удачи на ДЭ.
@@ -1,3 +1,10 @@
1
+ /**
2
+ * =============================================================================
3
+ * ФАЙЛ: client/index.html
4
+ * <title> — название вкладки браузера
5
+ * =============================================================================
6
+ */
7
+
1
8
  <!DOCTYPE html>
2
9
  <html lang="ru">
3
10
  <head>