From b403b1ea7c3c1f2b9c49146454a62f2ba2c7ce03 Mon Sep 17 00:00:00 2001 From: Anton Bilous Date: Tue, 11 Feb 2025 22:28:37 +0200 Subject: [PATCH] Project description --- bibl.yml | 17 ++ img/repo/project_structure.png | Bin 0 -> 52783 bytes img/repo/repo_login.png | Bin 0 -> 24855 bytes img/repo/repo_register.png | Bin 0 -> 30842 bytes main.typ | 286 ++++++++++++++++++++++++++++++++- 5 files changed, 295 insertions(+), 8 deletions(-) create mode 100644 img/repo/project_structure.png create mode 100644 img/repo/repo_login.png create mode 100644 img/repo/repo_register.png diff --git a/bibl.yml b/bibl.yml index dd13e15..787ddf9 100644 --- a/bibl.yml +++ b/bibl.yml @@ -62,6 +62,14 @@ iced-editor: # ===== DESIGN ==== # +elm: + type: Web + title: Elm - delightful language for reliable web applications. + author: Elm - delightful language for reliable web applications. + url: + value: https://elm-lang.org/ + date: 2025-02-11 + # Richard Feldman. Making Impossible States Impossible, 2016. YouTube. URL: https://www.youtube.com/watch?v=IcgmSRJHu_8 (date of access: 09.02.2025). elm-conf: type: Web @@ -73,6 +81,15 @@ elm-conf: date: 2025-02-09 hexagonal: + type: Web + title: Гексагональна архітектура (програмування) — Вікіпедія + author: Учасники проектів Вікімедіа + publisher: Вікіпедія + url: + value: https://uk.wikipedia.org/wiki/%D0%93%D0%B5%D0%BA%D1%81%D0%B0%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0_%D0%B0%D1%80%D1%85%D1%96%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F) + date: 2025-02-11 + +hexagonal-guide: type: Web title: How to apply hexagonal architecture to Rust author: Josip Benko-Đaković diff --git a/img/repo/project_structure.png b/img/repo/project_structure.png new file mode 100644 index 0000000000000000000000000000000000000000..03d5272b091b683da4603075efce455b427e317e GIT binary patch literal 52783 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 VzLG^oUpxt4y4w4-ay7_j{s+9+OfCQb literal 0 HcmV?d00001 diff --git a/img/repo/repo_login.png b/img/repo/repo_login.png new file mode 100644 index 0000000000000000000000000000000000000000..a725c6e12f4ae433295d2f25df1207d50a6b7930 GIT binary patch literal 24855 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 literal 0 HcmV?d00001 diff --git a/img/repo/repo_register.png b/img/repo/repo_register.png new file mode 100644 index 0000000000000000000000000000000000000000..922ed2cff6c38ea6870b9bf07448b158bc0d49d0 GIT binary patch literal 30842 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 FacKg&0ODo}EAbQOi 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 J3AR7|@^AA4o4Wu2 literal 0 HcmV?d00001 diff --git a/main.typ b/main.typ index a086c15..c7731f7 100644 --- a/main.typ +++ b/main.typ @@ -35,7 +35,28 @@ ) #let calendar_plan = ( - plan_table: [], + plan_table: [ + // thanks Yehor + #table( + columns: 4, + align: (center, left, center, center), + [Номер], [Назва етапів курсової роботи], [Строк виконання етапів роботи], [Примітки], + [1], [Аналіз предметної області], [15.09.24 – 24.09.24], [Виконано], + [2], [Концептуальне моделювання], [24.09.24-30.09.24], [~], + [2], [Постановка задачі], [28.09.24 – 2.10.24], [Виконано], + [3], [Побудова ER-діаграми та схеми БД], [2.10.24 – 18.10.24], [Виконано], + [4], [Оформлення розділів 1, 2 та 3.1, 3.2 пояснювальної записки], [10.10.24 - 18.10.24], [Виконано], + [5], [Перша контрольна точка з курсової роботи], [20.10.24], [Виконано], + [6], [Нормалізація бази даних], [20.10.24 - 15.11.24], [Виконано], + [7], [Створення програми], [20.10.24 – 20.11.24], [Виконано], + [8], [Тестування програми, наповнення бази даних], [20.11.24 - 5.12.24], [Виконано], + [9], [Друга контрольна точка з курсової роботи], [7.12.24], [Виконано], + [10], [Реалізація остаточної версії програми], [7.12.24-15.12.24], [Виконано], + [11], [Оформлення інших розділів пояснювальної записки], [1.11.24 – 25.12.24], [Виконано], + [12], [Третя контрольна точка з курсової роботи], [27.12.24], [Виконано], + ) + + ], approval_date: datetime(year: 2024, month: 12, day: 27), ) @@ -109,7 +130,7 @@ == Аналіз предметної області Дослідження предметної області є ключовим етапом у розробці інформаційної системи "Репозиторій пакунків. Колаборація над пакунками". Основною метою даного аналізу є визначення функціональних вимог та технічних особливостей системи, необхідних для ефективного управління програмними пакунками та забезпечення продуктивної співпраці розробників. -Пакунковий репозиторій являє собою централізоване сховище інформації про програмне забезпечення, що забезпечує зберігання, версіонування та розповсюдження програмних компонентів. В сучасних умовах критично важливою є автоматизація таких процесів як управління залежностями, контроль версій, перевірка сумісності та забезпечення безпеки пакунків. Це дозволяє значно підвищити ефективність розробки програмного забезпечення та мінімізувати ризики, пов'язані з використанням сторонніх компонентів. +Репозиторій пакунків являє собою централізоване сховище інформації про програмне забезпечення, що забезпечує зберігання, версіонування та розповсюдження програмних компонентів. В сучасних умовах критично важливою є автоматизація таких процесів як управління залежностями, контроль версій, перевірка сумісності та забезпечення безпеки пакунків. Це дозволяє значно підвищити ефективність розробки програмного забезпечення та мінімізувати ризики, пов'язані з використанням сторонніх компонентів. Для створення ефективної системи управління пакунками необхідно ретельно проаналізувати існуючі рішення та їх особливості. Такий аналіз допомагає виявити найбільш важливі функціональні можливості та уникнути потенційних проблем при проектуванні власної системи. @@ -187,6 +208,7 @@ Для ефективного відображення інформаційних потреб користувачів необхідно побудувати діаграму варіантів використання (Use Case). Ця діаграма /* @usecase_diagram */ демонструє взаємодію між різними акторами системи, такими як користувачі, адміністратори та інші учасники, та функціональними можливостями системи, такими як управління пакунками, їх створення, перегляд, отримання інформації та інші операції. Діаграма варіантів використання дозволяє визначити основні сценарії взаємодії користувачів з системою, ідентифікувати ключові функції та процеси, що відбуваються під час цієї взаємодії, та забезпечити розробку системи, яка відповідає реальним потребам користувачів. Крім того, діаграма варіантів використання може бути використана для визначення пріоритетів функціональних можливостей системи, виявлення потенційних проблем та слабких місць у процесах взаємодії з користувачами, а також для оптимізації архітектури системи для забезпечення максимальної ефективності та зручності використання. +// TODO //#img("img/usecase_diagram.png", "Use-Case діаграма (рисунок виконаний самостійно)") = Постановка задачі @@ -368,7 +390,10 @@ Відношення зберігають першу нормальну форму та не містять неповних функціональних залежностей, оскільки кожне з них має лише один ключовий атрибут. Таким чином, можна зробити висновок, що ці відношення відповідають вимогам другої нормальної форми. -#img("img/normal/normal_t_dep.png", "Універсальне відношення T із визначеними залежностями (рисунок виконаний самостійно)") +#img( + "img/normal/normal_t_dep.png", + "Універсальне відношення T із визначеними залежностями (рисунок виконаний самостійно)", +) #img("img/normal/normal_t12.png", "Універсальні відношення T1 та Т2 (рисунок виконаний самостійно)") @@ -385,7 +410,10 @@ Можна помітити, що відношення Т2 та Т3 мають спільне відношення "База пакунку id". Утворимо відношення "Пакунок" та "Роль" виділив з відношень Т2 та Т3 відповідно відношення "База пакунку", залишимо на його місці ключ "База пакунку id". -#img("img/normal/normal.png", [Відношення "Користувач", "Пакунок", "База пакунку", "Тип ролі" та "Роль" (рисунок виконаний самостійно)]) +#img( + "img/normal/normal.png", + [Відношення "Користувач", "Пакунок", "База пакунку", "Тип ролі" та "Роль" (рисунок виконаний самостійно)], +) Тепер необхідно перевірити отримані відношення на відповідність третій нормальній формі. @@ -401,16 +429,258 @@ = Опис програми #v(-spacing) == Загальні відомості -... +Для забеспечення простоти, ефективності та елегантності розробки інформаційної системи "Репозиторій пакунків. Колаборація над пакунками" було використано операційну систему Arch Linux@archlinux та текстовий редактор Neovim@neovim. + +Для реалізації всієї комп'ютерної програми було обрано сучасну мову програмування Rust@rust, яка є надзвичайно швидкою, надійною та продуктивною. За зберігання даних відповідає база даних MySQL@mysql, вона відома своєю стабільнітю, можливостями та швидкістю. Для взаємодії з базою даних було обрано бібліотеку SQLx@sqlx, вона є дуже гарно спроектованим проектом, розрахована на асинхроні операції та підтримку багатьох баз даних на низькому рівні. Для написання інтерфейсу комп'ютерної програми було обрано бібліотеку iced@iced, ця бібліотека фокусується на простоті та безпеці програм з графічним інтерфейсом за допомогю дотримання принципів проектування Elm@elm. + == Виклик і завантаження -... +Користувач може взаємодіяти з ком'ютерною програмою після встановки її до своєї операційної системи та запуску бази даних. + +Для зберігання даних використовується СУБД MySQL@mysql. База даних та комп'ютерна програма можуть знаходитись на різних пристроях. Перед тим як кінцевий користувач приступить до використання програми, системний адміністратор, котрий відповідає за роботу інформаційної системи, має налаштувати змінну середовища "DATABASE_URL" в котрій буде адреса до налаштованого екземпляру MySQL. Для максимальної зручності налаштування рекомендуєтсья використовувати контейнерізацю за допомогою Docker@docker, особливо рекомендується його інструмент Compose@compose. + +Інформаційна система була розроблена з використанням мови Rust@rust, тому результуюча програма не потребує залежностей під час виконання і може бути використана у вигляді самодостатнього файлу виконання. + == Призначення і логічна структура -... +Інформаційна система полегшує колаборацію над пакунками у репозиторії для розробників. Система забеспечує інтуїтивний інтерфейс для навігації по пакункам, їх залежностям з відносинами, та користувачам. Перелік основних функцій системи: +- управління пакунками та їх метаданими; +- система користувацьких акаунтів; +- система різних рівней доступу користувачей до пакунків; +- пошу та категоризація пакунків за багатьма факторами; +- надання аналітичної інформації про репозиторій, пакунки та користувачів. + +Під час розробки було використано гексагональну архітектуру@hexagonal, також відому як "архітектура портів та адаптерів". Структура проекту складаєтсья з кількох рівнів @project_structure: ++ Шар взаємодії з базою даних (тека data): + + декларація інтерфейсу взаємодії (тека ports); + + імплементації взаємодії (тека adapters). ++ Шар сервісів для бізенс логіки програми (тека service), cервіси мають: + + декларацію репозиторію який бере дані з задекларованого шару бази даних (файли з назвою repository); + + імплементацію адаптеру репозиторію який оперує отриманням даних з шару імплементації бази даних (файли з назвою adapter); + + декларацію контракту який будується на репозиторії і описує дані з котрими буде працювати сервіс (файли з назвою contract); + + імплеменацію сервісу котрий оперує над даними контракту та здійснює логічні операції з обчисленнями (файли з назвою service). ++ Шар графічного інтерфесу (тека src) використовує контракти з шару сервісів для валідації даних від користувача та надсилання запитів до логічної частини застосунку. ++ Головний файл проекту (тека src, файл main.rs) відповідає за конпонування всих шарів: + + встановлення підключення до бази даних; + + ініціалізацю адаптерів бази даних; + + ініціалізацію адаптерів репозиторіїв за допомогою створених підключень та адаптерів бази даних; + + запуск сервісів передаючи їм створені репозиторії; + + відображення та менеджмент графічних частин застосунку яким передаються сервіси. + +#img("img/repo/project_structure.png", "Побудована схема даних (рисунок виконаний самостійно)") + +Проєкт має всі використані під час розробки ресурси, такі як SQL скрипти та Compose@compose файли, за допомогою яких можна створити тестову базу даних та наповнити її даними. + == Опис фізичної моделі бази даних -... +Для інформаційної системи створено базу даних яка має дев’ять таблиць. Код для її створення яких описаний нижче. + +Таблиця "Users" містить інформацію про користувачів системи та має таку структуру: +- id - службове додатнє число, необхідне для ідентифікації таблиці та забезпечення надійної роботи бази даних; +- ім'я - унікальне текстове поле яке зберігає ім'я користувача (довжина до 31 символа), не може бути порожнім; +- пошта - унікальне текстове поле яке зберігає електронну пошту користувача (довжина до 255 символів), не може бути порожнім; +- пароль - текстове поле яке зберігає хеш пароля (довжина до 255 символів), не може бути порожнім; +- останній логін - зберігає дату останнього використання облікового запису, може бути порожнім; +- час створення - зберігає дату створення облікового запису не може бути порожнім; +- час оновлення - час оновлення даних в таблиці, автоматично оновлюється при зміні запису, не може бути порожнім. + +```sql +-- Required info for an account +CREATE TABLE Users ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(31) UNIQUE NOT NULL, + email VARCHAR(255) UNIQUE NOT NULL, + password VARCHAR(255) NOT NULL, + + last_used TIMESTAMP NULL, + + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL +); +``` + +Таблиця "PackageBases" містить інформацію про бази пакунків: +- id - службове додатнє число, необхідне для ідентифікації таблиці та забезпечення надійної роботи бази даних; +- назва - унікальне текстове поле, зберігає назву базового пакунку (до 127 символів), не може бути порожнім; +- опис - текстове поле (до 510 символів), може бути порожнім, зберігає опис пакунку; +- час створення - зберігає дату створення бази пакунку, не може бути порожнім; +- час оновлення - час оновлення даних в таблиці, автоматично оновлюється при зміні запису, не може бути порожнім. + +```sql +-- Enables multiple packages to have the same base yet different components +CREATE TABLE PackageBases ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(127) UNIQUE NOT NULL, + description VARCHAR(510) NULL, + + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); +``` + +Таблиця "PackageBaseRoles" визначає ролі користувачів для роботи з пакунками: +- id - службове додатнє число, необхідне для ідентифікації таблиці та забезпечення надійної роботи бази даних; +- назва - унікальне текстове поле, зберігає назву ролі (наприклад: submitter, packager; довжина до 31 символу), не може бути порожнім; +- опис - текстове поле яке описує роль (до 255 символів), може бути порожнім. + +```sql +-- User roles for working on packages: flagger, packager, submitter, maintainer, etc. +CREATE TABLE PackageBaseRoles ( + id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(31) UNIQUE NOT NULL, + description VARCHAR(255) NULL +); + +INSERT INTO PackageBaseRoles (id, name) VALUES +(1, 'submitter'), +(2, 'packager'), +(3, 'maintainer'), +(4, 'flagger'); +``` + +Таблиця "PackageBaseUserRoles" описує ролі користувачів для баз пакунків: +- база пакунку - числове поле (ціле додатнє число), зовнішній ключ на таблицю PackageBases; +- користувач - числове поле (ціле додатнє число), зовнішній ключ на таблицю Users; +- роль - числове поле (ціле додатнє число), зовнішній ключ на таблицю PackageBaseRoles; +- коментар - текстове поле для збереження приміток (до 255 символів), може бути порожнім; +- (base, user, role) - складний (композитний) первинний ключ, необхідний для ідентифікації таблиці та забезпечення надійної роботи бази даних; + +```sql +-- Roles that a user has for a package +CREATE TABLE PackageBaseUserRoles ( + base INT UNSIGNED, + user INT UNSIGNED, + role TINYINT UNSIGNED, + + comment VARCHAR(255) NULL, + + PRIMARY KEY (base, user, role), -- composite key + FOREIGN KEY (base) REFERENCES PackageBases(id) ON DELETE CASCADE, + FOREIGN KEY (user) REFERENCES Users(id) ON DELETE CASCADE, + FOREIGN KEY (role) REFERENCES PackageBaseRoles(id) ON DELETE CASCADE +); +``` + +Таблиця "Packages" містить інформацію про окремі пакунки: +- id - службове додатнє число, необхідне для ідентифікації таблиці та забезпечення надійної роботи бази даних; +- база - зовнішній ключ (ціле додатнє число) на таблицю PackageBases; +- назва - унікальне текстове поле для збереження назви пакунку (до 127 символів), не може бути порожнім; +- версія - текстове поле для збереження версії пакунку (до 127 символів), не може бути порожнім; +- опис - текстове поле для збереження опису пакунку (до 255 символів), може бути порожнім; +- веб-покликання - текстове поле, зберігає посилання на ресурс пакунку (до 510 символів); +- час позначення - час, коли пакунок був позначений, може бути порожнім; +- час створення - зберігає дату створення пакунку, не може бути порожнім; +- час оновлення - час оновлення даних в таблиці, автоматично оновлюється при зміні запису, не може бути порожнім. + +```sql +-- Information about the actual packages +CREATE TABLE Packages ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + base INT UNSIGNED NOT NULL, + name VARCHAR(127) UNIQUE NOT NULL, + version VARCHAR(127) NOT NULL, + description VARCHAR(255) NULL, + url VARCHAR(510) NULL, + + flagged_at TIMESTAMP NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + FOREIGN KEY (base) REFERENCES PackageBases (id) ON DELETE CASCADE +); +``` + +Таблиця "DependencyTypes" визначає типи залежностей: +- id - службове додатнє число, необхідне для ідентифікації таблиці та забезпечення надійної роботи бази даних; +- назва - унікальне текстове поле, зберігає назву типу залежності (наприклад: depends, makedepends; довжина до 31 символу), не може бути порожнім. + +```sql +-- depends, makedepends, optdepends, etc. +CREATE TABLE DependencyTypes ( + id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(31) UNIQUE NOT NULL +); + +INSERT INTO DependencyTypes (id, name) VALUES +(1, 'depends'), +(2, 'makedepends'), +(3, 'checkdepends'), +(4, 'optdepends'); +``` + +Таблиця "PackageDependencies" відображає залежності пакунків: +- id - службове додатнє число, необхідне для ідентифікації таблиці та забезпечення надійної роботи бази даних; +- архітектура - текстове поле, зберігає цільову архітектуру залежності (до 63 символів), може бути порожнім; +- умова - текстове поле, яке зберігає умову залежності (до 255 символів), може бути порожнім; +- опис - текстове поле, зберігає опис залежності (до 127 символів), може бути порожнім; +- пакунок - зовнішній ключ на таблицю Packages; +- тип залежності - зовнішній ключ на таблицю DependencyTypes; +- назва залежного пакунку - текстове поле яке зберігає назва залежного пакунку (до 127 символів), не може бути порожнім. + +```sql +-- Track which dependencies a package has +CREATE TABLE PackageDependencies ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + arch VARCHAR(63) NULL, + requirement VARCHAR(255) NULL, + description VARCHAR(127) NULL, + + package INT UNSIGNED NOT NULL, + dependency_type TINYINT UNSIGNED NOT NULL, + dependency_package_name VARCHAR(127) NOT NULL, -- Not an actual package, but an an alias. Allows for package substitution. + + FOREIGN KEY (package) REFERENCES Packages (id) ON DELETE CASCADE, + FOREIGN KEY (dependency_type) REFERENCES DependencyTypes (id) +); +``` + +Таблиця "RelationTypes" визначає типи зв'язків між пакунками: +- id - службове додатнє число, необхідне для ідентифікації таблиці та забезпечення надійної роботи бази даних; +- назва - унікальне текстове поле яке зберігає назву зв'яку (наприклад: conflicts, provides; довжина до 31 символу), не може бути порожнім. + +```sql +-- conflicts, provides, replaces, etc. +CREATE TABLE RelationTypes ( + id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(31) UNIQUE NOT NULL +); + +INSERT INTO RelationTypes (id, name) VALUES +(1, 'conflicts'), +(2, 'provides'), +(3, 'replaces'); +``` + +Таблиця "PackageRelations" описує зв'язки між пакунками: +- id - службове додатнє число, необхідне для ідентифікації таблиці та забезпечення надійної роботи бази даних; +- архітектура - текстове поле, зберігає цільову архітектуру зв'яку (до 63 символів), може бути порожнім; +- умова - текстове поле, яке зберігає умову зв'яку (до 255 символів), може бути порожнім; +- пакет - зовнішній ключ на таблицю Packages; +- тип зв'язку - зовнішній ключ на таблицю RelationTypes; +- тип зв'язку з пакетом - текстове поле, зберігає назву пакунку, з яким є зв'язок (до 127 символів), не може бути порожнім. + +```sql +-- Track which conflicts, provides and replaces a package has +CREATE TABLE PackageRelations ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + arch VARCHAR(63) NULL, + requirement VARCHAR(255) NULL, + + package INT UNSIGNED NOT NULL, + relation_type TINYINT UNSIGNED NOT NULL, + relation_package_name VARCHAR(127) NOT NULL, + + FOREIGN KEY (package) REFERENCES Packages (id) ON DELETE CASCADE, + FOREIGN KEY (relation_type) REFERENCES RelationTypes (id) +); +``` + == Опис програмної реалізації +#img("img/repo/repo_login.png", "Сторінка логіну") + + +#img("img/repo/repo_login.png", "Сторінка регістрації") + + #nheading("Висновки") В результаті виконання курсової роботи було розроблено інформаційну систему "Репозиторій пакунків" для організації ефективної колаборації над програмними пакунками. В процесі розробки було проведено ґрунтовний аналіз предметної області, визначено ключові вимоги до системи та спроектовано оптимальну структуру бази даних для зберігання інформації про пакунки, їх версії, залежності, користувачів та їхні ролі.