PRPA lb-3
This commit is contained in:
163
semester-4/ПрПА/lb-3/uml/class.pu
Normal file
163
semester-4/ПрПА/lb-3/uml/class.pu
Normal 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
|
1
semester-4/ПрПА/lb-3/uml/class.svg
Normal file
1
semester-4/ПрПА/lb-3/uml/class.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 50 KiB |
110
semester-4/ПрПА/lb-3/uml/object.pu
Normal file
110
semester-4/ПрПА/lb-3/uml/object.pu
Normal 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
|
1
semester-4/ПрПА/lb-3/uml/object.svg
Normal file
1
semester-4/ПрПА/lb-3/uml/object.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 19 KiB |
225
semester-4/ПрПА/lb-3/uml/uc.pu
Normal file
225
semester-4/ПрПА/lb-3/uml/uc.pu
Normal 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
|
1
semester-4/ПрПА/lb-3/uml/uc.svg
Normal file
1
semester-4/ПрПА/lb-3/uml/uc.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 98 KiB |
Reference in New Issue
Block a user