1
0

PRPA lb-3

This commit is contained in:
Sytnyk Yehor
2025-05-30 22:56:25 +03:00
parent e79109c81a
commit 84f7393e78
10 changed files with 851 additions and 0 deletions

View File

@ -0,0 +1,163 @@
@startuml
skin rose
skinparam backgroundColor #EEEBDC
/' left to right direction '/
enum AttachmentType {
+ Description
+ DueDate
+ File
+ Url
+ Text
+ Tip
+ Hint
+ Warning
+ Progress
+ Importance
}
enum RequestType {
+ Add
+ Update
+ Remove
}
enum AccessLevel {
+ View
+ AddSolutions
+ Edit
+ AddUsers
+ FullAccess
}
enum MembershipLevel {
+ View
+ AddTasks
+ Edit
+ AddUsers
+ FullAccess
}
enum TaskVisibility {
+ Private
+ Public
+ Paid
}
enum SolutionType {
+ File
+ Url
+ Text
}
hide AccessLevel methods
hide MembershipLevel methods
hide AttachmentType methods
hide TaskVisibility methods
hide SolutionType methods
hide RequestType methods
class User {
- id : int
+ name : String
+ email : String
+ password : String
+ register()
+ login()
+ changePassword()
}
class Access {
- userId : int
- taskId : int
+ accessLevel : AccessLevel
+ changeAccessLevel()
}
class Task {
- id : int
+ attachments : List<Attachment>
+ solutions : List<Solution>
+ requests : List<Request>
+ name : String
+ visibility : TaskVisibility
+ create()
+ remove()
+ fork()
+ changeVisibility()
+ transferOwnership()
}
class Attachment {
+ type : AttachmentType
+ data : Blob
+ isPrivate: boolean
+ description : String
}
class Solution {
+ description: String
+ type: SolutionType
+ data: blob
+ approve()
+ decline()
}
class TaskGroup {
+ tasks : List<Task>
+ name : String
+ description : String
+ addTask()
+ removeTask()
+ addUser()
+ removeUser()
}
class Membership {
- userId : int
+ taskGroupId : int
+ membershipLevel: MembershipLevel
+ changeMembershipLevel()
}
class Request {
- id : int
- userId : int
- attachmentId : int
+ type : RequestType
+ message : String
+ isApplied
+ isRejected
+ apply()
+ reject()
+ revoke()
}
hide Attachment methods
User -u.> Access : <<manages>>
User -u.> Membership : <<manages>>
User -u.> Attachment : <<owns>>
User -u.> Request : <<supervises>>
User -u.> Solution : <<supervises>>
Task -d.> Access : <<grants>>
TaskGroup -d.> Membership : <<grants>>
Task -d-> Attachment : contains
Task -d-> Request : associates
Task -d-> Solution : associates
Request <-u- Attachment : associates
TaskGroup -u-> Task : manages
AttachmentType --* Attachment
RequestType -r-* Request
AccessLevel --* Access
MembershipLevel --* Membership
TaskVisibility --* Task
SolutionType -u-* Solution
@enduml

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -0,0 +1,110 @@
@startuml
skin rose
skinparam backgroundColor #EEEBDC
object "user1: User" as user1 {
id = 1
name = "Alice Smith"
email = "alice@example.com"
}
object "user2: User" as user2 {
id = 2
name = "Bob Johnson"
email = "bob@example.com"
}
object "proj_team_alpha: TaskGroup" as taskGroup1 {
name = "Project Alpha Team"
description = "Tasks for Project Alpha"
}
object "task_design_ui: Task" as task1 {
id = 101
name = "Design UI Mockups"
visibility = Public
}
object "task_refactor_code: Task" as task2 {
id = 102
name = "Refactor Legacy Code"
visibility = Private
}
object "attach_new_icon: Attachment" as attach1 {
type = File
description = "New icon suggestion"
isPrivate = false
}
object "sol_ui_mockups: Solution" as sol1 {
description = "Figma link to mockups"
type = Url
}
object "req_add_icon: Request" as req1 {
id = 201
userId = 2
attachmentId = 301
type = Add
message = "Proposing new icon for homepage."
isApplied = false
isRejected = false
}
object "access_ui_task1: Access" as access1 {
userId = 1
taskId = 101
accessLevel = FullAccess
}
object "access_ui_task2: Access" as access2 {
userId = 2
taskId = 101
accessLevel = View
}
object "access_refactor_task1: Access" as access3 {
userId = 2
taskId = 102
accessLevel = FullAccess
}
object "memb_user1_proj: Membership" as memb1 {
userId = 1
taskGroupId = 1
membershipLevel = FullAccess
}
object "memb_user2_proj: Membership" as memb2 {
userId = 2
taskGroupId = 1
membershipLevel = View
}
taskGroup1 -r- memb1
taskGroup1 -u---- memb2
memb1 -u- user1
memb2 -u- user2
taskGroup1 -u-- task1
access1 -d- user1
access2 -u- user2
access3 -l- user2
access1 -l- task1
access2 -d- task1
access3 -r- task2
sol1 -u- task1
sol1 -- user1
attach1 -- req1
attach1 -l- task1
req1 -- task1
req1 -u- user2
@enduml

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1,225 @@
@startuml
skin rose
skinparam backgroundColor #EEEBDC
left to right direction
!define Cloud(name, description) usecase "description" as name [[name]] #DarkGray
!define Kite(name, description) usecase "description" as name [[name]] #Yellow
!define Sea(name, description) usecase "description" as name [[name]] #LightBlue
!define Fish(name, description) usecase "description" as name [[name]] #LightGray
!define Clam(name, description) usecase "description" as name [[name]] #Silver
<style>
package {
LineColor transparent
BackgroundColor transparent
Shadowing 0
FontColor transparent
}
</style>
<style>
.visiblePackage {
LineColor black
Shadowing 1
FontColor black
}
</style>
hide <<visiblePackage>> stereotype
/' package "TaskHub" <<visiblePackage>> { '/
package "TaskHub" {
actor User as user
actor Guest as guest
actor Admin as admin
' Auth
package "Auth" {
actor "Google Auth Provider" as google
/' Cloud(auth, "Authentication") '/
/' guest '1' -- '' auth '/
Kite(auth_login, "Login")
Kite(auth_register, "Registration")
guest "1" --- "0..1" auth_login
guest "1" --- "0..*" auth_register
Sea(register_email, "Register via Email")
auth_register ..> register_email : <<include>>
Fish(enter_email, "Enter Email without confirmation")
Fish(enter_email_confirm, "Enter Email with confirmation")
Fish(enter_password, "Enter Passwounrd")
Fish(enter_username, "Enter Username")
register_email ..> enter_email_confirm : <<include>>
register_email ..> enter_password: <<include>>
register_email ..> enter_username : <<include>>
Sea(login_google, "Login via Google OAuth")
auth_login <.. login_google : <<extend>>
Fish(choose_account, "Choose Google account")
login_google ..> choose_account : <<include>>
choose_account "0..*" -- "1" google
Sea(login_email, "Login via Email")
auth_login <.. login_email: <<extend>>
login_email ..> enter_email : <<include>>
login_email ..> enter_password: <<include>>
Sea(recover_password, "Password Recovery")
auth_login <.. recover_password : <<extend>>
Fish(enter_password_new, "Enter New Password")
recover_password ..> enter_email_confirm : <<include>>
recover_password ..> enter_password_new : <<include>>
}
package "Own Task Managment" {
Kite(own_task_create, "Create new Task")
user "1" --- "0..*" own_task_create
Sea(own_task_create_name, "Enter Task Name")
Sea(own_task_create_visibility, "Select Task Visibility")
own_task_create ..> own_task_create_name : <<include>>
own_task_create ..> own_task_create_visibility : <<include>>
Kite(own_task_delete, "Delete Task")
user "1" --- "0..*" own_task_delete
Sea(own_task_delete_confirm, "Enter Confirmation Code form Email")
own_task_delete ..> own_task_delete_confirm : <<include>>
Kite(own_task_update, "Update Task Attachments")
user "1" --- "0..*" own_task_update
Sea(own_task_update_type, "Select Attachment Type")
Sea(own_task_update_content, "Select Attachment Content")
Sea(own_task_update_visibility, "Select Attachment visibility")
own_task_update ..> own_task_update_type : <<include>>
own_task_update ..> own_task_update_content : <<include>>
own_task_update ..> own_task_update_visibility : <<include>>
Kite(own_task_visibility, "Change visibility of the Task")
user "1" --- "0..*" own_task_visibility
Sea(own_task_visibility_private, "Set Private Task Visibility")
Sea(own_task_visibility_public, "Set Public Task Visibility")
Sea(own_task_visibility_paid, "Set Paid Task Visibility")
own_task_visibility <.. own_task_visibility_private : <<extend>>
own_task_visibility <.. own_task_visibility_public : <<extend>>
own_task_visibility <.. own_task_visibility_paid : <<extend>>
Kite(own_task_requests, "Manage Tasks Requests")
user "1" --- "0..*" own_task_requests
Sea(own_task_request_approve, "Approve Task Request")
Sea(own_task_request_decline, "Decline Task Request")
own_task_requests <.. own_task_request_approve : <<extend>>
own_task_requests <.. own_task_request_decline : <<extend>>
Kite(own_task_access, "Manage Task Access Rights")
user "1" --- "0..*" own_task_access
Sea(own_task_access_add, "Give Access for User")
Sea(own_task_access_remove, "Remove Access of the User")
Sea(own_task_access_update, "Update Access of the User")
own_task_access <.. own_task_access_add : <<extend>>
own_task_access <.. own_task_access_remove : <<extend>>
own_task_access <.. own_task_access_update : <<extend>>
/' } '/
package "Other Tasks Interactions" {
actor "Payment Provider" as payment
Kite(task_fork, "Fork existing Task")
user "1" --- "0..*" task_fork
Sea(task_fork_options, "Select Fork Options")
task_fork ..> task_fork_options : <<include>>
Kite(other_task_request_managment, "Manage Task Requests")
user "1" --- "0..*" other_task_request_managment
Sea(request_add, "Add Attachment Request")
Sea(request_update, "Update Attachment Request")
Sea(request_remove, "Remove Attachment Request")
Sea(request_revoke, "Revoke existing Request")
other_task_request_managment <.. request_add : <<extend>>
other_task_request_managment <.. request_update: <<extend>>
other_task_request_managment <.. request_remove : <<extend>>
other_task_request_managment <.. request_revoke : <<extend>>
Kite(buy_task, "Buy Paid Task")
user "1" --- "0..*" buy_task
Sea(select_payment, "Select Payment Method")
buy_task ..> select_payment : <<include>>
select_payment "0..*" -- "1" payment
}
package "Admin Panel" {
Kite(manage_users, "Manage Users")
admin "1" --- "0..*" manage_users
Sea(review_users, "Review User Details")
manage_users ..> review_users : <<include>>
Fish(create_user, "Create New User")
Fish(view_user_profile, "View Private Data")
Fish(delete_user_admin, "Delete User")
Fish(block_user_admin, "Block User")
review_users <.. create_user : <<extend>>
review_users <.. view_user_profile : <<extend>>
review_users <.. delete_user_admin : <<extend>>
review_users <.. block_user_admin : <<extend>>
Kite(manage_content, "Manage Content")
admin "1" --- "0..*" manage_content
Sea(review_content, "Review Content Details")
manage_content ..> review_content : <<include>>
Fish(approve_content, "Approve Content")
Fish(remove_content, "Remove Content")
Fish(warn_user, "Warn Content Author")
review_content <.. approve_content : <<extend>>
review_content <.. remove_content : <<extend>>
review_content <.. warn_user : <<extend>>
}
package "Task Group Management" {
actor "Github Integration Provider" as github
Kite(manage_tasks_in_groups, "Manage Tasks in Groups")
Kite(manage_user_access, "Manage User's Access")
Kite(manage_users_tg, "Manage Users")
Kite(tg_manage_github, "Manage Github Integration")
user "1" --- "0..*" manage_users_tg
user "1" --- "0..*" manage_tasks_in_groups
user "1" --- "0..*" manage_user_access
user "1" --- "0..*" tg_manage_github
Sea(add_user, "Add User")
Sea(delete_user, "Delete User")
manage_users_tg ..> add_user : <<include>>
manage_users_tg ..> delete_user : <<include>>
Sea(set_user_access, "Change Access Level")
manage_user_access ..> set_user_access : <<include>>
Sea(tg_add_task, "Add Task to Group")
Sea(tg_create_task, "Create new Task in Group")
Sea(tg_remove_task, "Remove Task from Group")
manage_tasks_in_groups <.. tg_add_task : <<extend>>
manage_tasks_in_groups <.. tg_create_task : <<extend>>
manage_tasks_in_groups <.. tg_remove_task : <<extend>>
Sea(github_link_repository, "Link GitHub repository to the Group")
Sea(github_unlink_repository, "Unlink GitHub repository from the Group")
tg_manage_github <.. github_link_repository : <<extend>>
tg_manage_github <.. github_unlink_repository : <<extend>>
github_link_repository "0..*" -- "1" github
github_unlink_repository "0..*" -- "1" github
}
}
@enduml

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 98 KiB