Rewrite chapter 2
This commit is contained in:
@ -109,6 +109,14 @@ state-machines:
|
||||
|
||||
# ===== EXAMPLES ==== #
|
||||
|
||||
aurweb:
|
||||
type: Web
|
||||
title: Arch Linux / aurweb · GitLab
|
||||
author: GitLab
|
||||
url:
|
||||
value: https://gitlab.archlinux.org/archlinux/aurweb
|
||||
date: 2025-02-06
|
||||
|
||||
aur:
|
||||
type: Web
|
||||
title: AUR (en) - Home
|
||||
@ -159,6 +167,14 @@ archlinux: # I use Arch btw!
|
||||
|
||||
# ===== TOOLS ==== #
|
||||
|
||||
argon2:
|
||||
type: Web
|
||||
title: "GitHub - P-H-C/phc-winner-argon2: The password hash Argon2, winner of PHC"
|
||||
author: GitHub
|
||||
url:
|
||||
value: https://github.com/P-H-C/phc-winner-argon2
|
||||
date: 2025-02-09
|
||||
|
||||
neovim:
|
||||
type: Web
|
||||
title: Neovim
|
||||
|
@ -123,7 +123,7 @@
|
||||
|
||||
= Аналіз та концептуальне моделювання предметної області //{{{1
|
||||
#v(-spacing)
|
||||
== Аналіз предметної області //
|
||||
== Аналіз предметної області //{{{2
|
||||
Дослідження предметної області є ключовим етапом у розробці інформаційної системи "Репозиторій пакунків. Колаборація над пакунками". Основною метою даного аналізу є визначення функціональних вимог та технічних особливостей системи, необхідних для ефективного управління програмними пакунками та забезпечення продуктивної співпраці розробників.
|
||||
|
||||
Репозиторій пакунків являє собою централізоване сховище інформації про програмне забезпечення, що забезпечує зберігання, версіонування та розповсюдження програмних компонентів. В сучасних умовах критично важливою є автоматизація таких процесів як управління залежностями, контроль версій, перевірка сумісності та забезпечення безпеки пакунків. Це дозволяє значно підвищити ефективність розробки програмного забезпечення та мінімізувати ризики, пов'язані з використанням сторонніх компонентів.
|
||||
@ -162,7 +162,7 @@
|
||||
|
||||
Особлива увага буде приділена реалізації механізмів забезпечення якості та безпеки пакунків, оскільки ці аспекти є критичними для створення надійної екосистеми програмного забезпечення. Система також передбачатиме можливості для масштабування та інтеграції з іншими інструментами розробки.
|
||||
|
||||
== Концептуальне моделювання предметної області //
|
||||
== Концептуальне моделювання предметної області //{{{2
|
||||
Інформаційна система передбачає взаємодію як для читачів (незареєстрованих користувачів), так і для зареєстрованих користувачів. Система автоматизує процеси пов'язані з відстеженням залежностей пакунків, прав користувачів, пошуком пакунків і генеруванням статистик.
|
||||
|
||||
Кожний незареєстрований користувач повинен мати можливість ефективно:
|
||||
@ -205,7 +205,7 @@
|
||||
- об'єкт ролі користувача буде прив'язувати користувачів до баз пакунків, та визначати їх ролі в цих базах. Містить групу пакунків, користувача, тип ролі, а також коментар від користувача. Ця інформація дозволяє визначити, хто, чому, і які права має в кожній групі пакунків;
|
||||
- об'єкт пакунку буде зберігати інформацію про окремі пакунки. Містить групу пакунків, назву пакунку, версію, опис, веб-покликання на ресурс пакунку, час позначення, створення та останнього оновлення. Ця інформація є основною для ідентифікації та опису кожного пакунку;
|
||||
- об'єкт виду залежності буде визначати типи залежностей пакунків (наприклад: проста залежність, залежність для збірки пакунку, опціональна залежність). Містить номер типу залежності та її назву. Цей об'єкт дозволить класифікувати залежності пакунків;
|
||||
- об'єкт залежностей пакунку буде зберігати інформацію про залежності пакунків. Він буде містити архітектуру, умову, опис, пакунок, тип залежності та назву пакунку який є залежністю. Ця інформація дозволяє визначити, від яких інших назв пакунків залежить даний пакунок.
|
||||
- об'єкт залежностей пакунку буде зберігати інформацію про залежності пакунків. Він буде містити архітектуру, умову, опис, пакунок, тип залежності та назву пакунку який є залежністю. Ця інформація дозволяє визначити, від яких інших назв пакунків залежить даний пакунок;
|
||||
- об'єкт виду відносин буде визначати типи відносин між пакунками (наприклад: конфліктує, надає, замінює). Містить номер типу відношення та його назву. Цей об'єкт дозволяє класифікувати відносини між пакунками;
|
||||
- об'єкт відносин пакунків буде зберігати інформацію про відносини пакунків. Містить архітектуру, вимоги, пакунок, тип відношення та назву пакунку до якого формується відношення. Ця інформація дозволяє визначити, які пакунки конфліктують з даним пакунком, які функції він надає, і які пакунки він замінює.
|
||||
|
||||
@ -239,38 +239,201 @@
|
||||
На основі аналізу діаграми варіантів використання можна також визначити пріоритетність розробки різних функціональних модулів системи, що особливо важливо при обмежених ресурсах та часових рамках проекту. Це забезпечує раціональний розподіл ресурсів та дозволяє сконцентруватися на реалізації найбільш критичних функцій системи в першу чергу.
|
||||
|
||||
= Постановка задачі //{{{1
|
||||
Потрібно розробити інформаційну систему "Репозиторій пакунків. Колаборація над пакунками", яка забезпечить ефективне зберігання, пошук, управління та спільну розробку програмних пакунків. Після аналізу предметної області та виявлених інформаційних потреб, було визначено наступні вимоги щодо функціоналу інформаційної системи.
|
||||
|
||||
Метою курсової роботи є розробка інформаційної системи "Репозиторій пакунків. Колаборація над пакунками", яка забезпечить ефективне зберігання, пошук, управління та спільну розробку програмних пакунків. Після аналізу предметної області було виділено наступні вимоги щодо функціоналу інформаційної системи:
|
||||
// Data storage rules {{{2
|
||||
Інформаційна система повинна зберігати інформацію про наступні об'єкти та дотримуватись вказаних правил:
|
||||
+ облікові записи користувачів обов'язково мають:
|
||||
+ унікальний юзернейм не довше 31 символу;
|
||||
+ унікальну пошту не довше 255 символів;
|
||||
+ надійно збережений пароль за допомогою використання алгоритму argon2@argon2;
|
||||
+ останній час використання облікового запису.
|
||||
+ бази пакунків мають:
|
||||
+ обов'язкову унікальну назву не довше 127 символів;
|
||||
+ опціональний опис не довше 510 символів.
|
||||
+ мусить існувати як мінімум 4 типи ролі для бази пакунків:
|
||||
+ submitter -- власник бази пакунку котрий може редагувати базу пакунків;
|
||||
+ packager -- пакувальник котрий збирає пакунки для баз пакунків;
|
||||
+ maintainer -- супроводжуючий бази пакунку, той хто може редагувати пакунки цієї бази;
|
||||
+ flagger -- мітчик, будь-який користувач який відмітив проблему у базі пакунку коментарем.
|
||||
+ кожен обліковий запис може мати багато типів ролей як до однієї так і до багатьох баз пакунку. Для кожної прив'язки облікового запису до типу ролі і бази пакунку може бути коментар не довше 255 символів;
|
||||
+ пакунок має:
|
||||
+ обов'язкову прив'язку до бази пакунку;
|
||||
+ обов'язкову унікальну назву не довше 127 символів;
|
||||
+ обов'язкову версію не довше 127 символів;
|
||||
+ опціональний опис не довше 255 символів;
|
||||
+ опціональне веб-покликання на ресурс пакунку не довше 510 символів;
|
||||
+ опціональний час помітки пакунку.
|
||||
+ мусить існувати 3 типи відносин для пакунків:
|
||||
+ provides -- надає залежність;
|
||||
+ conflicts -- конфліктує з залежністю;
|
||||
+ replaces -- замінює залежність.
|
||||
+ кожен пакунок може мати багато відношень. Кожне відношення пакунку має:
|
||||
+ опціональну архітектуру, не довше 63 символів;
|
||||
+ опціональну вимогу, не довше 255 символів;
|
||||
+ обов'язкову прив'язку до пакунку;
|
||||
+ обов'язкову прив'язку до типу відношення;
|
||||
+ обов'язкову назву пакунку-відношення, не довше 127 символів.
|
||||
+ мусить існувати 4 типи залежності для пакунків:
|
||||
+ depends -- обов'язкова залежність;
|
||||
+ makedepends -- залежність під час встановлення пакунку;
|
||||
+ checkdepends -- залежність під час перевірки встановленого пакунку;
|
||||
+ optdepends -- опціональна залежність для розширення функціоналу пакунку.
|
||||
+ кожен пакунок може мати багато залежностей. Кожна залежність пакунку має:
|
||||
+ опціональну архітектуру, не довше 63 символів;
|
||||
+ опціональну вимогу, не довше 255 символів;
|
||||
+ опціональний опис, не довше 127 символів;
|
||||
+ обов'язкову прив'язку до пакунку;
|
||||
+ обов'язкову прив'язку до типу залежності;
|
||||
+ обов'язкову назву пакунку-залежності, не довше 127 символів.
|
||||
|
||||
+ підтримка основних процесів управління пакунками та їх метаданими:
|
||||
+ створення пакунків, їх оновлення та видалення;
|
||||
+ керування метаданими пакунків, включаючи назву, версію, веб-покликання на ресурс, ліцензію, опис та групу;
|
||||
+ додання, оновлення та видалення залежностей між пакунками, а саме: обов'язкова залежність, опціональна залежність, та залежність під час збірки пакунку;
|
||||
+ додання, оновлення та видалення відносин пакунків таких як: надання залежності, конфлікт з залежністю та заміна залежності.
|
||||
// Statistics {{{2
|
||||
Інформаційна система повинна надавати наступні статистики:
|
||||
+ статистика облікових записів:
|
||||
+ загальна кількість облікових записів;
|
||||
+ кількість активних облікових записів;
|
||||
+ кількість неактивних облікових записів;
|
||||
+ кількість користувачів котрі є творцями хоча б однієї бази пакунку;
|
||||
+ кількість користувачів котрі супроводжують хоча б одну базу пакунку.
|
||||
+ статистика репозиторію:
|
||||
+ загальна кількість пакунків;
|
||||
+ загальна кількість баз пакунків;
|
||||
+ кількість пакунків у яких немає власника і які ніхто не супроводжує;
|
||||
+ кількість пакунків доданих за останній тиждень;
|
||||
+ кількість пакунків оновлених за останній тиждень;
|
||||
+ кількість пакунків які ніколи не оновлювалися;
|
||||
|
||||
+ забезпечення системи користувацьких акаунтів:
|
||||
+ надійний механізм реєстрації та автентифікації користувачів;
|
||||
+ можливість видалення свого акаунту та передачі пакунків іншому користувачеві;
|
||||
+ механізм блокування недобросовісних користувачів.
|
||||
// Search {{{2
|
||||
Інформаційна система повинна надавати наступні функції пошуку:
|
||||
+ пошук пакунків, який фільтрується за допомогою текстової інформації з пошукового вводу, повинен мати наступні режими пошуку:
|
||||
+ точний та загальний пошук за веб-покликанням;
|
||||
+ точний та загальний пошук за назвою пакунку;
|
||||
+ точний та загальний пошук за назвою бази пакунку;
|
||||
+ загальний пошук за описом пакунку;
|
||||
+ загальний пошук за описом бази пакунку;
|
||||
+ загальний пошук за назвою та описом пакунку;
|
||||
+ точний та загальний пошук за користувачем у якого є будь-яка роль до бази пакунку;
|
||||
+ точний та загальний пошук за мітчиком бази пакунку;
|
||||
+ точний та загальний пошук за пакувальником бази пакунку;
|
||||
+ точний та загальний пошук за власником бази пакунку;
|
||||
+ точний та загальний пошук за супроводжуючим бази пакунку.
|
||||
+ можливість вибору ліміту кількості результатів пошуку для покращення швидкості процесів пошуку та сортування результатів;
|
||||
+ можливість вибору вихідного або низхідного порядку сортування результатів;
|
||||
+ сортування результатів за наступними параметрами:
|
||||
+ назва пакунку;
|
||||
+ версія пакунку;
|
||||
+ назва бази пакунку;
|
||||
+ час створення пакунку;
|
||||
+ час останнього оновлення пакунку.
|
||||
|
||||
+ система прав користувачів над пакунками:
|
||||
+ мітчик пакунку -- будь-який користувач котрий знаходить проблему в пакунку та помічає його з коментарем який описує цю проблему;
|
||||
+ автор пакунку -- користувач який створив пакунок, він володіє пакунком та може здійснювати всі процеси управління пакунком, в тому числі надавати права іншим користувачам;
|
||||
+ пакувальник пакунку -- користувач котрий має дозвіл на завантаження нових збірок пакунку до репозиторію;
|
||||
+ супроводжуючий пакунку -- користувач котрий був назначений автором як його заступник який може здійснювати всі процеси управління пакунком окрім назначення нових авторів і супроводжуючих та видалення пакунку.
|
||||
// Info retrieval {{{2
|
||||
Інформаційна система повинна надавати можливість перегляду наступної інформації:
|
||||
+ інформація пакунку:
|
||||
+ назва пакунку;
|
||||
+ версія пакунку;
|
||||
+ база пакунку;
|
||||
+ опис пакунку;
|
||||
+ веб-покликання на веб-ресурс пакунку;
|
||||
+ час помітки пакунку;
|
||||
+ час створення пакунку;
|
||||
+ час оновлення пакунку;
|
||||
+ перелік залежностей пакунку згрупованих за їх типами;
|
||||
+ перелік відносин пакунку згрупованих за їх типами.
|
||||
+ інформація бази пакунку:
|
||||
+ назва бази пакунку;
|
||||
+ опис бази пакунку;
|
||||
+ час створення бази пакунку;
|
||||
+ час оновлення бази пакунку;
|
||||
+ перелік пакунків з цією базою;
|
||||
+ перелік користувачів які володіють базою пакунку;
|
||||
+ перелік користувачів які супроводжують базу пакунку;
|
||||
+ перелік користувачів які є пакувальниками бази пакунку;
|
||||
+ перелік користувачів які відмітили базу пакунку.
|
||||
+ інформація облікових записів:
|
||||
+ юзернейм користувача;
|
||||
+ пошта користувача;
|
||||
+ час останнього використання облікового запису;
|
||||
+ час створення облікового запису;
|
||||
+ час оновлення облікового запису;
|
||||
+ перелік баз пакунків якими володіє обліковий запис;
|
||||
+ перелік баз пакунків які супроводжує обліковий запис;
|
||||
+ перелік баз пакунків для яких користувач пакує пакунки;
|
||||
+ перелік баз пакунків які користувач відмітив.
|
||||
+ інформація індивідуальної залежності пакунку:
|
||||
+ архітектура для якої призначена залежність;
|
||||
+ умова яка необхідна для залежності;
|
||||
+ опис залежності;
|
||||
+ пакунок;
|
||||
+ тип залежності пакунку;
|
||||
+ назва пакунку-залежності.
|
||||
+ інформація індивідуального відношення пакунку:
|
||||
+ архітектура для якої призначене відношення;
|
||||
+ умова яка необхідна для відношення;
|
||||
+ пакунок;
|
||||
+ тип відношення пакунку;
|
||||
+ назва пакунку-відношення.
|
||||
|
||||
+ функції пошуку та категоризації: // TODO: більше категоризації
|
||||
+ пошук та фільтрація пакунків за веб-покликанням, назвою, групою, описом пакунку, описом групи, навзвою та описом пакунку, користувачем, помітчиком, пакувальником, подавачем та супроводжуючим пакунку;
|
||||
+ можливість точного та довільного пошуку пакунків в іформаційній системі;
|
||||
+ можливість вибору ліміту кількості результатів пошуку;
|
||||
+ сортування результатів за назвою пакунку, його версією, назвою групи, часом створення та часом останнього оновлення.
|
||||
// User accounts {{{2
|
||||
Інформаційна система повинна забезпечити користувачів повним циклом керування своїми обліковими записами:
|
||||
+ створення нового облікового запису за допомогою реєстрації з наступними даними:
|
||||
+ унікальний юзернеймом;
|
||||
+ унікальна пошта;
|
||||
+ пароль довше 7 символів, який буде надійно збережений системою за допомогою алгоритму argon2@argon2.
|
||||
+ використання існуючого облікового запису за допомогою автентифікації з наступними даними:
|
||||
+ юзернейм або електрона пошта, система повинна зрозуміти що користувач використовує;
|
||||
+ пароль котрий при пропуску через argon2 буде однаковим з збереженим паролем облікового запису.
|
||||
+ редагування власного облікового запису при якому оновиться час зміни облікового запису:
|
||||
+ редагування юзернейму облікового запису;
|
||||
+ редагування пошти облікового запису (для виконання цієї операції також потрібно ввести поточний пароль);
|
||||
+ редагування паролю облікового запису (для виконання цієї операції також потрібно ввести поточний пароль).
|
||||
+ видалення облікового запису. При видаленні облікового запису всі ролі користувача мають бути видаленими.
|
||||
|
||||
+ надання аналітичної інформації:
|
||||
+ статистика користувачів: загальна кількість користувачів, кількість активних та неактивних користувачів;
|
||||
+ статистика репозиторію: загальна кількість пакунків, кількість осиротілих пакунків, кількість пакунків доданих та оновлених за останній тиждень та кількість пакунків котрі ніколи не оновлювалися;
|
||||
+ інформація про залежності та відносини кожного пакунку з іншими пакунками;
|
||||
+ інформація про пакунки кожного користувача та рівень прав який цей користувач має для цих пакунків.
|
||||
// User roles {{{2
|
||||
Інформаційна система повинна забезпечити користувачів системою ролей для баз пакунків які забезпечують різні рівні доступу:
|
||||
+ користувачі мають мати змогу видалити свої ролі для баз пакунків;
|
||||
+ користувачі мають мати змогу отримати будь-який набір ролей для своєї бази пакунків;
|
||||
+ роль автора бази пакунку "submitter" дозволяє користувачам виконувати будь-яку дію з їх базою пакунку та пакунками прив'язаними до цієї бази, а також давати будь-які ролі, окрім ролі мітчика "flagger", іншим користувачам;
|
||||
+ роль супроводжуючого бази пакунку "maintainer" схожа на роль автора "submitter", але забороняє видалення бази пакунку та надання ролі автора іншим користувачам;
|
||||
+ роль пакувальника бази пакунку "packager" не дає жодних прав, а лише позначає облікові записи відповідальні за збірку пакунків для бази даних пакунків;
|
||||
+ роль мітчика бази пакунку "flagger" не дає жодних прав, а лише дає змогу користувачам сповістити авторів та супроводжуючих бази пакунку про проблеми у базі пакунку або пакунку з цією базою;
|
||||
|
||||
// Package and package base operations {{{2
|
||||
Інформаційна система повинна забезпечити автентифікованих користувачів повним циклом керування пакунками та їх базами:
|
||||
+ створення нової бази пакунків може виконуватись як під час створення пакунку, так і як самостійний процес для якого треба вказати:
|
||||
+ унікальну назву бази пакунків;
|
||||
+ опціональний опис бази пакунків.
|
||||
+ створення пакунку здійснюється за допомогою:
|
||||
+ унікальної назви пакунку;
|
||||
+ обрання існуючої, або створення нової бази пакунків за допомогою унікальної назви та опціонального опису;
|
||||
+ обов'язкової версії пакунку;
|
||||
+ опціонального опису пакунку;
|
||||
+ опціонального веб-покликання на веб-ресурс пакунку.
|
||||
+ редагування інформації бази пакунку та пакунку;
|
||||
+ отримання ролей до бази пакунку, або додання ролей іншим користувачам за правилами рівня доступу ролей вище;
|
||||
+ створення, видалення та редагування залежностей для існуючого пакунку. Для створення залежності потрібно вказати:
|
||||
+ опціональну архітектуру залежності;
|
||||
+ опціональну умову залежності;
|
||||
+ опціональний опис залежності;
|
||||
+ вид залежності пакунків;
|
||||
+ назву пакунку-залежності.
|
||||
+ створення, видалення та редагування відношень для існуючого пакунку. Для створення відношення потрібно вказати:
|
||||
+ опціональну архітектуру відношення;
|
||||
+ опціональну умову відношення;
|
||||
+ вид відношення пакунків;
|
||||
+ назву пакунку-відношення.
|
||||
+ видалення пакунку. При цьому кроці всі відносини та залежності пакунку мають бути видалені;
|
||||
+ видалення бази пакунків. При цьому кроці всі пакунки з їх залежностями та відносинами, а також всі ролі користувачів для цієї бази пакунків мають бути видалені.
|
||||
|
||||
// Alerts & confirmations {{{2
|
||||
Інформаційна система повинна мати систему зворотного зв'язку з користувачем:
|
||||
+ система запитів підтвердження користувача при видаленні інформації та опис критичності дії. Приклади дуже критичних випадків:
|
||||
+ при видаленні бази пакунків система має сповістити користувача що ця діє зітре всі пов'язані ролі та пакунки з їх залежностями і відносинами. Для підтвердження цієї дії користувач має ввести назву бази пакунків у форму підтвердження;
|
||||
+ при видаленні облікового запису користувач має бути сповіщений що його ролі будуть повністю видалені з системи. У випадку, якщо користувач має бази пакунків без співавторів, система має заборонити видалення облікового запису до моменту знаходження співавторів (або передачі авторства супроводжуючому) або видалення баз пакунків.
|
||||
+ система сповіщення користувача про помилки в системі, наприклад:
|
||||
+ перебої з'єднання до сховища даних;
|
||||
+ нестачу ресурсів комп'ютеру;
|
||||
+ знаходження аномалій в даних.
|
||||
+ система візуального відображення некоректних полів у формах даних та опису причини некоректності.
|
||||
|
||||
= Проектування бази даних //{{{1
|
||||
#v(-spacing)
|
||||
|
Reference in New Issue
Block a user