IPAY plan.md
Software Requirements Specification
Amazon Clone — Платформа електронної комерції
| Версія документа | 1.0 |
| Статус | Draft for Review |
| Дата | 13 серпня 2026 |
| Автор | IPAY (Incredible Project Aspnet Yes) |
| Затверджує | Олександр Загоруйко |
| Класифікація | Internal / Academic |
| Стандарт | IEEE 830-1998 / ISO/IEC/IEEE 29148 |
Історія змін
| Версія | Дата | Автор | Опис змін |
|---|---|---|---|
| 1.0 | 13.08.2026 | IPAY | Початкова версія SRS: функціональні та нефункціональні вимоги, Use Cases, ризики, метрики |
Зміст
- Вступ
- Загальний опис
- Межі проєкту
- Функціональні вимоги
- Use Cases
- Нефункціональні вимоги
- Ризики
- Метрики успіху проєкту
- Додатки
1. Вступ
1.1. Мета документа
Цей документ визначає повний набір функціональних та нефункціональних вимог до веб-платформи Amazon Clone — системи електронної комерції, розробленої в рамках курсового командного проєкту з дисципліни ASP.NET Core. Документ слугує єдиним джерелом правди для команди розробки, QA та керівництва на всіх етапах життєвого циклу проєкту: планування, реалізація (Scrum-спринти), тестування (NUnit), документування (DocFX/OpenAPI) та захист.
1.2. Обсяг продукту
Amazon Clone — це повнофункціональна веб-платформа електронної комерції, що дозволяє користувачам переглядати товари, формувати кошик, оформлювати замовлення з онлайн-оплатою, залишати відгуки, а адміністраторам — керувати каталогом, замовленнями та користувачами. Проєкт реалізується як командний проєкт із застосуванням методології Scrum, системи контролю версій Git та архітектури Clean / Onion.
1.3. Аудиторія документа
Команда розробників (Backend, Frontend, Full-stack), керівник проєкту, члени комісії з захисту, QA-інженери (в рамках навчального процесу).
1.4. Визначення, акроніми, скорочення
| Термін | Визначення |
|---|---|
| SRS | Software Requirements Specification |
| MVP | Minimum Viable Product |
| MoSCoW | Пріоритизація Must / Should / Could / Won't have |
| JWT | JSON Web Token |
| EF Core | Entity Framework Core |
| CQRS | Command Query Responsibility Segregation |
| SOLID | Принципи об'єктно-орієнтованого проєктування |
| CI/CD | Continuous Integration / Continuous Deployment |
| SKU | Stock Keeping Unit (артикул товару) |
| PCI DSS | Payment Card Industry Data Security Standard |
| PWA | Progressive Web App |
1.5. Референси
- Методичні вказівки щодо виконання курсового командного проєкту з .NET (2026)
- ISO/IEC/IEEE 29148:2018 — Requirements Engineering
- OWASP Top 10 (2025 edition)
- Microsoft .NET Architecture Guides: Clean Architecture, eShopOnWeb
- Закон України «Про захист персональних даних» № 2297-VI
2. Загальний опис
2.1. Перспектива продукту
Amazon Clone розробляється як самостійний навчальний продукт з нуля, проте архітектурні та UX-рішення базуються на кращих практиках сучасних e-commerce платформ. Система складається з клієнтської частини (React SPA), серверної частини (ASP.NET Core Web API) та шару даних (SQL Server / Firebase).
2.2. Класи користувачів та привілеї
| Роль | Опис | Ключові дозволи |
|---|---|---|
| Гість | Неавторизований відвідувач | Перегляд каталогу, пошук, фільтрація, перегляд деталей товару |
| Покупець (Customer) | Авторизований користувач | Кошик, оформлення замовлення, історія покупок, відгуки, обране, профіль |
| Адміністратор | Менеджер платформи | CRUD товарів, категорій, замовлень, користувачів; доступ до аналітики |
| Система | Автоматизовані процеси | Модерація, сповіщення, очищення кошика, архівація |
2.3. Операційне середовище
| Компонент | Специфікація |
|---|---|
| Клієнт | Браузери Chrome, Firefox, Safari, Edge (2 останні версії); роздільна здатність від 320 px |
| Сервер | ASP.NET Core 8/9, хостинг на IIS / Azure / AWS / VPS |
| Клієнтський фреймворк | React 18+ (Vite / Next.js за бажанням), Axios, React Router |
| Серверний фреймворк | ASP.NET Core Web API, ASP.NET Core Identity |
| База даних | SQL Server (основна реляційна СУБД) або Firebase Firestore (для real-time фіч, як альтернатива) |
| ORM / Доступ до даних | EF Core (основний), Dapper (для складних звітів / raw SQL) |
| Real-time | SignalR (сповіщення про статус замовлення, чат підтримки) |
| Архітектура | Clean Architecture / Onion Architecture |
| Мови інтерфейсу | Українська (uk-UA), Англійська (en-US) |
2.4. Обмеження дизайну та реалізації
| Шар | Технологія | Обґрунтування |
|---|---|---|
| Frontend | React 18+ | Компонентний підхід, великий ком'юніті, швидкий рендеринг |
| Backend | ASP.NET Core Web API | Кросплатформеність, інтеграція з Identity, EF Core, LINQ |
| БД (основна) | SQL Server | Повна підтримка EF Core, транзакції, складні зв'язки (orders-products-users) |
| БД (допоміжна) | Firebase Firestore | Опціонально для real-time сповіщень або кешування сесій |
| Auth | JWT Bearer + ASP.NET Core Identity | Stateless-аутентифікація, зручна інтеграція з React |
| Документація API | Swagger / OpenAPI 3.0 | Автоматична генерація, тестування ендпоінтів |
| Тестування | NUnit + Moq | Вимога методичних вказівок |
| Документація коду | DocFX / Doxygen | Генерація HTML-сторінок з коментарів XML |
2.5. Припущення та залежності (Assumptions & Dependencies)
| № | Опис | Тип | Вплив у разі порушення |
|---|---|---|---|
| A-01 | Команда використовує Git (GitHub) із feature-branch workflow та Pull Request reviews | Внутрішня | Порушення контролю версій, складнощі зі звітом |
| A-02 | LiqPay / Fondy / Stripe надають sandbox для тестування оплати | Зовнішня | Блокування FR-08 (оплата) |
| A-03 | SQL Server доступний локально (LocalDB) та на хостингу | Технічна | Затримка розробки, необхідність міграції на SQLite |
| A-04 | Команда дотримується Scrum: 2-тижневі спринти, щоденні stand-up, Kanban-дошка | Методологічна | Неможливість надати звіт по Scrum |
| A-05 | Всі члени команди мають базові знання C#, React та SQL | Компетенційна | Необхідність додаткового навчання, ризик зриву термінів |
3. Межі проєкту
3.1. У межах проєкту (In Scope)
- Повний життєвий цикл e-commerce платформи: каталог, кошик, замовлення, оплата, адмін-панель
- Реєстрація, аутентифікація, авторизація на ролях (Customer, Admin)
- Система відгуків та рейтингів товарів
- Пошук з фільтрацією та пагінацією (Elasticsearch або SQL Full-Text опціонально)
- Адміністративна панель з аналітикою
- Адаптивний UI (mobile-first)
- Unit-тести (NUnit) для бізнес-логіки
- Документація API (Swagger) та кодова документація (DocFX)
- Деплой на хостинг (Azure, AWS або VPS)
3.2. Поза межами проєкту (Out of Scope)
- Нативні мобільні застосунки (iOS/Android) — лише веб-версія (адаптивна)
- Власний платіжний шлюз (еквайринг) — лише інтеграція зі сторонніми провайдерами
- ML-рекомендації товарів (можна додати як stretch-goal, але не в MVP)
- Багатомовність понад uk/en
- Інтеграція зі службами доставки (Nova Poshta API) — лише імітація статусів
- Мікросервісна архітектура — використовується модульний моноліт (Clean Architecture)
4. Функціональні вимоги
Формат: [Пріоритет MoSCoW] ID — Опис → Критерій прийняття (Acceptance Criteria)
4.1. Авторизація та реєстрація
[Must] FR-01 — Реєстрація користувача через email + пароль або OAuth 2.0 (Google). → AC: Пароль: мін. 8 символів, 1 цифра, 1 спецсимвол; підтвердження email; дублікати email заборонені; inline-валідація.
[Must] FR-02 — Авторизація з розподілом ролей (Customer / Admin). → AC: JWT-токен видається терміном 24 год; роль передається в claims; доступ до адмін-роутів захищений політикою [Authorize(Roles = "Admin")].
[Must] FR-03 — Відновлення пароля через email. → AC: Токен скидання дійсний 15 хв, одноразовий; лист надсилається через SMTP (SendGrid/MailKit).
4.2. Каталог товарів
[Must] FR-04 — Перегляд списку товарів з пагінацією (12 товарів на сторінку). → AC: Підтримка server-side пагінації; час відповіді ≤ 300 мс при 1000+ товарах.
[Must] FR-05 — Перегляд деталей товару: назва, опис, ціна, зображення (до 5 фото), категорія, рейтинг, наявність (SKU). → AC: Галерея зображень з навігацією; відображення пов'язаних товарів з тієї ж категорії.
[Must] FR-06 — Пошук та фільтрація товарів за назвою, категорією, ціновим діапазоном, брендом, рейтингом. → AC: Пошук нечутливий до регістру; комбінація фільтрів через LINQ / EF Core; пустий результат — коректне повідомлення.
[Should] FR-07 — Сортування товарів (ціна за зростанням/спаданням, новіші, популярні, рейтинг). → AC: Сортування виконується на рівні запиту до БД (LINQ OrderBy / OrderByDescending).
4.3. Кошик та оформлення замовлення
[Must] FR-08 — Додавання/видалення товарів у кошик зі зміною кількості. → AC: Кошик зберігається в localStorage для гостей та в БД для авторизованих користувачів; оновлення кількості — без перезавантаження; розрахунок загальної суми в реальному часі.
[Must] FR-09 — Оформлення замовлення з вказівкою адреси доставки та контактних даних. → AC: Валідація обов'язкових полів (ПІБ, місто, адреса, телефон); замовлення створюється зі статусом «Pending».
[Must] FR-10 — Оплата замовлення через інтеграцію з LiqPay / Fondy / Stripe (sandbox). → AC: При успішній оплаті статус змінюється на «Paid»; при відхиленні — «Payment Failed» з можливістю повтору; дані картки не зберігаються на сервері (PCI DSS SAQ A).
[Must] FR-11 — Історія замовлень у особистому кабінеті з деталями та статусами. → AC: Список замовлень сортований за датою (новіші перші); детальний перегляд позицій замовлення.
4.4. Відгуки та рейтинги
[Should] FR-12 — Залишення відгуку та оцінки (1–5 зірок) лише після покупки товару. → AC: Перевірка наявності завершеного замовлення з цим товаром; один відгук на товар від користувача; середній рейтинг перераховується автоматично.
[Should] FR-13 — Перегляд відгуків на сторінці товару з пагінацією. → AC: Відображення імені автора, дати, оцінки, тексту; сортування за датою / оцінкою.
4.5. Адміністративна панель
[Must] FR-14 — CRUD категорій товарів (ієрархічна структура: батьківська / дочірня). → AC: Заборона видалення категорії, якщо вона містить товари; деревоподібне відображення.
[Must] FR-15 — CRUD товарів (назва, опис, ціна, зображення, кількість на складі, категорія). → AC: Завантаження зображень на сервер / хмару; валідація формату (JPEG, PNG) та розміру (≤ 5 МБ); м'яке видалення (soft delete).
[Must] FR-16 — Управління замовленнями: перегляд списку, зміна статусу (Pending → Paid → Shipped → Delivered / Cancelled). → AC: Історія зміни статусів зберігається; сповіщення користувачеві при зміні статусу (email / SignalR).
[Must] FR-17 — Управління користувачами: перегляд, блокування/розблокування, призначення ролей. → AC: Блокований користувач не може авторизуватися; збереження причини блокування.
4.6. Особистий кабінет
[Must] FR-18 — Редагування профілю (ПІБ, email, телефон, адреса доставки, аватар). → AC: Email унікальний; валідація телефону за regex; завантаження аватара ≤ 2 МБ.
[Should] FR-19 — Список обраного (Wishlist). → AC: Додавання/видалення товарів; збереження для авторизованих користувачів; можливість перенесення з Wishlist у кошик.
[Could] FR-20 — Push-сповіщення про зміну статусу замовлення (SignalR / Firebase Cloud Messaging). → AC: Real-time оновлення статусу в особистому кабінеті; badge-лічильник нових сповіщень.
5. Use Cases
UC-01: Оформлення покупки
| Актор | Покупець (Customer) |
| Передумови | Користувач авторизований; товари в кошику |
| Основний потік | 1. Користувач переходить у кошик → 2. Перевіряє товари та кількість → 3. Натискає «Оформити замовлення» → 4. Заповнює/підтверджує адресу доставки → 5. Оберає спосіб оплати → 6. Підтверджує оплату через LiqPay → 7. Отримує підтвердження та номер замовлення |
| Альтернативний потік | 6a. Платіж відхилено → відображення помилки, повернення до вибору способу оплати |
| Постумови | Замовлення збережено в БД зі статусом «Paid»; кількість товарів на складі зменшено; історія оновлена |
UC-02: Додавання товару адміністратором
| Актор | Адміністратор |
| Передумови | Адміністратор авторизований з роллю Admin |
| Основний потік | 1. Вхід у адмін-панель → 2. Перехід до «Товари» → 3. Натискає «Додати товар» → 4. Заповнює форму (назва, опис, ціна, категорія, кількість) → 5. Завантажує зображення → 6. Зберігає |
| Альтернативний потік | 5a. Невірний формат зображення → inline-помилка, блокування збереження |
| Постумови | Товар доступний у каталозі; відображається у списку товарів адмін-панелі |
UC-03: Блокування користувача
| Актор | Адміністратор |
| Передумови | Виявлено порушення (спам, шахрайство) |
| Основний потік | 1. Адміністратор переглядає профіль користувача → 2. Натискає «Заблокувати» → 3. Вказує причину → 4. Підтверджує |
| Постумови | Користувач не може увійти; отримує email із поясненням; його оголошення/товари приховані |
6. Нефункціональні вимоги
6.1. Продуктивність
| ID | Вимога | Ціль | Метод перевірки |
|---|---|---|---|
| NFR-01 | Час відповіді API | p95 < 300 мс для CRUD-операцій | K6 / Postman / Swagger |
| NFR-02 | Час завантаження сторінки каталогу | < 2 с на broadband | Lighthouse CI |
| NFR-03 | Пропускна здатність | 100 одночасних користувачів без деградації | Навантажувальне тестування (k6) |
6.2. Надійність та доступність
| ID | Вимога |
|---|---|
| NFR-04 | Uptime 99.5% (навчальний проєкт, не production-SLA) |
| NFR-05 | Graceful degradation: при недоступності платіжного провайдера — замовлення може бути оформлене з оплатою «при отриманні» |
| NFR-06 | Soft delete для всіх критичних сутностей (користувачі, товари, категорії) — можливість відновлення |
6.3. Безпека
| ID | Вимога |
|---|---|
| NFR-07 | Захист від OWASP Top 10: XSS (валідація вводу, санітизація), CSRF (JWT у заголовку), SQL Injection (EF Core / параметризовані запити), Broken Access Control (Policy-based authorization) |
| NFR-08 | Хешування паролів ASP.NET Core Identity (PBKDF2 / bcrypt) |
| NFR-09 | JWT-токени з коротким терміном життя (access: 15 хв, refresh: 7 днів) або sliding expiration 24 год |
| NFR-10 | Rate limiting: не більше 5 спроб входу за хвилину з одного IP |
| NFR-11 | HTTPS (TLS 1.2+) обов'язково для всіх комунікацій |
6.4. Масштабованість
| ID | Вимога |
|---|---|
| NFR-12 | Архітектура Clean / Onion дозволяє замінити SQL Server на іншу СУБД без змін бізнес-логіки (Repository + Unit of Work патерни) |
| NFR-13 | Використання async/await та IQueryable для оптимізації запитів до БД |
6.5. Інтерфейс та доступність
| ID | Вимога |
|---|---|
| NFR-14 | Адаптивний дизайн: mobile (320px), tablet (768px), desktop (1920px) |
| NFR-15 | Відповідність базовим принципам UX: читабельні шрифти, контрастність, зрозумілі повідомлення про помилки |
6.6. Якість і тестування
| ID | Вимога |
|---|---|
| NFR-16 | Покриття unit-тестами (NUnit) ≥ 60% критичних бізнес-шляхів (реєстрація, кошик, замовлення, оплата) |
| NFR-17 | Інтеграційні тести для API-контролерів (TestServer / WebApplicationFactory) |
| NFR-18 | Кодова документація: XML-коментарі для всіх публічних класів та методів; генерація DocFX / Swagger |
| NFR-19 | Єдина система найменування (CamelCase для методів, PascalCase для класів, snake_case для БД за бажанням) — зафіксована в CONTRIBUTING.md |
6.7. Архітектурні вимоги (специфічні для курсового проєкту)
| ID | Вимога |
|---|---|
| NFR-20 | Застосування патернів проєктування: Repository, Unit of Work, CQRS (опціонально з MediatR), Specification |
| NFR-21 | Дотримання SOLID: Single Responsibility для сервісів, Dependency Injection, інверсія залежностей |
| NFR-22 | Використання LINQ та Fluent API у EF Core |
| NFR-23 | Багатопоточність: async/await для I/O-bound операцій (запити до БД, зовнішні API) |
| NFR-24 | Логування: Serilog / NLog з записом у файл та консоль; рівні Information / Warning / Error |
| NFR-25 | Кешування: In-Memory Cache або Redis для часто запитуваних даних (категорії, топ-товари) |
7. Ризики
| ID | Ризик | Ймовірність | Вплив | Стратегія мітигації |
|---|---|---|---|---|
| R-01 | Недостатній досвід команди з React / ASP.NET Core | Середня | Високий | Раннє прототипування; розподіл ролей за сильними сторонами; консультації з керівником |
| R-02 | Затримка з інтеграцією платіжного провайдера (sandbox недоступний) | Середня | Середній | Розробка mock-сервісу оплати на ранніх етапах; fallback на «оплату при отриманні» |
| R-03 | Перевищення обсягу функціональності (scope creep) | Висока | Середній | Жорстке дотримання MoSCoW; фокус на Must-have для MVP |
| R-04 | Конфлікти при merge у Git через відсутність чіткого розподілу доменів | Середня | Середній | Розподіл backend/frontend відповідальності; code review перед merge |
| R-05 | Низьке покриття тестами до дедлайну | Середня | Високий | Включення написання тестів у Definition of Done кожного спринту; CI-гейт |
8. Метрики успіху проєкту
| Метрика | Ціль | Термін |
|---|---|---|
| Функціональність MVP | Реалізовано 100% Must-have (FR-01..FR-11, FR-14..FR-18) | До захисту |
| Покриття тестами | ≥ 60% unit-тестів (NUnit) | До захисту |
| Документація | Swagger UI доступний; DocFX зібраний | До захисту |
| Деплой | Сайт задеплоєний та доступний публічно | До захисту |
| Презентація | 7–15 слайдів, відео-демо ≤ 2 хв | До захисту |
| Git-звіт | Історія комітів, гілки, merge requests | Протягом усього проєкту |
| Scrum-звіт | 3+ спринти, беклог, Kanban-дошка | Протягом усього проєкту |
9. Додатки
9.1. Словник термінів
| Термін | Визначення |
|---|---|
| Soft Delete | Логічне видалення (прапорець IsDeleted), фізичне видалення не виконується |
| SKU | Унікальний артикул товару для обліку на складі |
| Mock | Імітація зовнішнього сервісу для тестування без реальних запитів |
| Clean Architecture | Багатошарова архітектура з ізоляцією бізнес-логіки від інфраструктури |
9.2. Діаграми (для наступної ітерації документа)
- Use Case Diagram (всі актори та сценарії)
- ER-діаграма сутностей (User, Product, Category, Order, OrderItem, Review, Payment)
- Sequence Diagram для флоу оплати (FR-10)
- Component Diagram: React → ASP.NET Core Web API → SQL Server / Firebase
- Deployment Diagram: Azure/AWS/VPS
9.3. Матриця трасування вимог (Traceability Matrix) — шаблон
| Вимога | Бізнес-ціль | Use Case | Тест-кейс (NUnit) | Статус |
|---|---|---|---|---|
| FR-01 | Реєстрація користувачів | — | AuthTests.Register_ValidUser_ReturnsOk | Заплановано |
| FR-08 | Оформлення замовлення | UC-01 | CartTests.AddItem_UpdatesTotal | Заплановано |
| FR-10 | Оплата | UC-01 | PaymentTests.ProcessPayment_Success | Заплановано |
| FR-15 | Управління товарами | UC-02 | ProductTests.CreateProduct_Admin_ReturnsCreated | Заплановано |
Матрицю рекомендується вести в GitHub Projects / Jira з живим синхронізуванням.
9.4. Рекомендований розподіл ролей у команді (2–4 особи)
| Роль | Обов'язки | Технології |
|---|---|---|
| Backend Lead | Архітектура API, БД, бізнес-логіка, інтеграція оплати | C#, ASP.NET Core, EF Core, SQL Server |
| Frontend Lead | UI/UX, React-компоненти, state management, інтеграція з API | React, Axios, React Router, CSS/SCSS |
| Full-stack / DevOps | Auth, SignalR, деплой, CI/CD, тестування | JWT, SignalR, GitHub Actions, Azure |
| QA / Аналітик | NUnit-тести, SRS, презентація, Scrum-звіти | NUnit, Moq, Swagger, PowerPoint |