Design Diagrams - bounswe/bounswe2024group9 GitHub Wiki
This page will hold our design diagrams and ideas. Enjoy!
The link to our work in progress is here.
1. Class Diagrams
by Kristina, Mutti, Berkay, Yigit Kaan, Ozgur, Eray, Ceylin, Taha, Emin
classDiagram
class User {
-user_id: int
-username: string
-password: string
-profilePicture: Image
-Routes: Route[]
-Followers: User[]
-Following: User[]
+login(username: String, password: String): boolean
+signup(username: String, email: String, password: String): boolean
+logout()
+deleteProfile()
+forgotPassword()
+getUserId() : int
+getUsername() : string
+getPassword() : string
+getName() : string
+getRoutes() : Route[]
+setUsername(username: String)
+setPassword(password: String)
+setName(name: String)
+search(query:string)
+view_results():WikiResult[], Route[]
}
class HomePage {
+search(query: string)
}
class FeedPage {
+displayFeed(routes: Route[])
+search(query: string)
}
class UserPage{
-Profile: ProfileController
-visibility: Boolean
+displayProfile(user: User)
+displayProfilePic(user: User)
+displayFollowing(user: User)
+displayFollowers(user: User)
+updateProfilePicture(img: Image)
+followUser(userToFollow: User)
+unfollowUser(userToUnfollow: User)
+changeVisibility(user: User)
}
class ResultPage {
+displayResults(result: WikiResult[])
+displayDetails(result:WikiResult)
+displayRelatedRoutes(result:Route[])
}
class RouteCreationPage{
+displayOnSidebar(result: WikiResult[])
+displayOnMap(result: WikiResult[])
}
class RouteDetailsPage{
-Route: RouteDetailsController
+displayProfilePic(user: User)
+displayWikiData(result: WikiResult[])
+displayTitle(route: Route)
+displayDescription(route: Route)
+displayPhotos(route: Route)
+displayRating(route: Route)
+displayLikes(route: Route)
+displayComments(route: Route)
+displayMapView(route: Route)
}
class WikiResult {
-itemID: string
-name: string
-description: string
-photo: string
-inceptionYear: int
-longitude: float
-latitude: float
-top_5_nearby: WikiResult[]
-top_5_period: WikiResult[]
}
class PrivateDatabase {
-userData:UserData
-route:Route
+fetchRelatedRoutes(): Route
+fetchFollowers(): User[]
+fetchFollowing(): User[]
+fetchProfileData(user:User): String[][]
+updateTable(table: String, value: String)
}
class WikidataAPI {
+search(query: string): WikiResult[]
+getDetails(WikiResult): WikiResult
}
class PageController{
-wikidataAPI: WikidataAPI
-privateDatabase: PrivateDatabase
+search(query: string): WikiResult[]
+addPOI(result: WikiResult)
+addDescription(description: string)
+saveRoute(route: Route)
+rateRoute(route: Route)
+likeRoute(route: Route)
+commentRoute(route: Route)
+shareRoute(route: Route)
+updateRoute(route: Route)
+fetchFeed(user: User): Route[]
}
class POI{
-name: string
-poi_id: int
-photo: string
}
class Route {
-route_id: int
-title: string
-description: string
-photos: string[]
-rating: number
-likes: number
-comments: string[]
-saves: number
-pois: POI[]
-duration: int[]
-duration_between: int[]
-mapView: string
+getTitle(): string
+getDescription(): string
+getPhotos(): string[]
+getRating(): number
+getLikes(): number
+getComments(): string[]
+getSaves(): number
+getPOIs(): POI[]
+getMapView(): string
}
class LoginPage {
+displayLoginPage()
}
class SignupPage {
+displaySignupPage()
}
class AuthenticationController {
-privateDatabase: PrivateDatabase
-rememberMe: boolean
+login(username: String, password: String): boolean
+signup(username: String, email: String, password: String): boolean
+forgotPassword(email: String): boolean
+setRememberMe(enabled: boolean): void
+isRememberMeEnabled(): rememberMe
}
class GmailAuthenticationController {
-privateDatabase: PrivateDatabase
-gmailToken: String
-isGmailTokenValid(gmailToken: String): boolean
+signInWithGmail(gmailToken: String): boolean
}
class LoginController {
-authenticationController: AuthenticationController
-gmailAuthenticationController: GmailAuthenticationController
}
class SignupController {
-authenticationController: AuthenticationController
-isCredentialsValid(username: String, password: String): boolean
-gmailAuthenticationController: GmailAuthenticationController
}
User --> PageController
PageController --> LoginPage : displays_login_page
PageController --> SignupPage : displays_signup_page
PageController --> HomePage : searches
PageController --> ResultPage: views results
PageController --> UserPage : views_profile
PageController --> FeedPage : views_feed
PageController --> RouteCreationPage : creates_route
PageController --> RouteDetailsPage : views_route
UserPage -- UserPage : take_action
LoginPage -- LoginController : contains login controller
SignupPage -- SignupController : contains signup controller
LoginController -- AuthenticationController : authenticates
SignupController -- AuthenticationController : authenticates
LoginController -- GmailAuthenticationController : authenticates Gmail
SignupController -- GmailAuthenticationController : authenticates Gmail
PageController --> WikidataAPI : fetch_wiki_results
PageController --> PrivateDatabase : fetch_data
PrivateDatabase --> User : contains_details
AuthenticationController --> PrivateDatabase: get_data
GmailAuthenticationController --> PrivateDatabase: get_data
WikidataAPI --> WikiResult : contains details
PrivateDatabase --> Route : contains details
Route --> POI : includes
2. Use Case Diagrams
2.1 Search Result and Feed Diagrams
by Kristina, Mutti
flowchart
User --> InitiateSearch;
InitiateSearch --> RetrieveSearchResults;
RetrieveSearchResults -. "include" .-> DisplaySearchResults;
DisplaySearchResults --> ViewDetails;
ViewDetails-. "extend" .-> Save;
ViewDetails-. "extend" .-> Like;
ViewDetails-. "extend" .-> Comment;
ViewDetails-. "extend" .-> Reroute;
ViewDetails -. "extend" .-> ViewRelatedResults;
ViewRelatedResults --> RetrieveSearchResults;
User --> ViewFeed
ViewFeed -. "include" .-> DisplayFeedResults
DisplayFeedResults -. "extend" .-> Like
DisplayFeedResults -. "extend" .-> Comment
DisplayFeedResults -. "extend" .-> Save
DisplayFeedResults -. "extend" .-> Reroute
2.2 Profile Diagrams
by Yigit Kaan, Ozgur
2.2.1 Home User Profile
flowchart
User --> DeleteAccount;
User --> EditProfileInfo;
User --> SeeFollowers;
User --> SeeFollowing;
User --> SeeProfilePic;
ChangePassword -."extend".-> EditProfileInfo;
ChangeUsername -."extend".-> EditProfileInfo;
ChangeName -."extend".-> EditProfileInfo;
ChangeProfilePic -."extend".-> EditProfileInfo;
ChangeVisibility -."extend".-> EditProfileInfo;
RemovePic -."extend".-> ChangeProfilePic;
2.2.1 Other Users' Profile
flowchart
User --> Follow;
User --> Unfollow;
User --> RemoveFollower;
User --> DisplayProfilePic;
User --> DisplayFollowers;
User --> DisplayFollowing;
2.3 Route Creation
by Burak
flowchart
User --> CreateRoute;
CreateRoute --> InitiateSearch;
InitiateSearch--> RetrieveSearchResults;
RetrieveSearchResults -. "include" .-> DisplaySearchResults;
DisplaySearchResults-. "extend" .-> ViewDetails;
DisplaySearchResults-. "extend" .-> AddToRoute;
CreateRoute-. "extend" .-> SaveAsDraft;
CreateRoute-. "extend" .-> Save;
2.4 Signup and Login
flowchart
User --> SignUp;
User --> Login;
SignUp-. "extend" .-> signUpWithGoogle;
Login --> EnterLoginCredentials;
SignUp --> EnterSignUpCredentials;
EnterSignUpCredentials --> SignUpValidate;
SignUpValidate --> EditProfileInfo;
EnterLoginCredentials --> LoginValidate;
LoginValidate --> Feed;
2.5 Route Details
by Emin
flowchart
User -. "includes" .-> DisplayWikiData
User -. "includes" .-> DisplayComments
User -. "includes" .-> DisplayLikes
User -. "includes" .-> DisplayRoute
User -. "extends" .-> ViewProfilePage
DisplayRoute -. "extends" .-> Reroute
DisplayRoute -. "extends" .-> OpenMaps
DisplayRoute -. "extends" .-> Like
DisplayRoute -. "extends" .-> Comment
DisplayRoute -. "extends" .-> Save
DisplayRoute -. "extends" .-> Share
3. Sequence Diagrams
3.1 Search Result Diagram
By Kristina
sequenceDiagram
participant User
participant PageController
participant Database
participant WikidataAPI
participant ResultController
participant ResultPage
User->>PageController: search(query)
PageController->>PageController: search(query)
par SearchDatabase
PageController->>Database: search(query)
Database->>Database: search(query)
Database-->>Database: RouteResults
Database->>ResultController: fetchRelatedRoutes(RouteResults)
end
par SearchWikidata
PageController->>WikidataAPI: search(query)
WikidataAPI->>WikidataAPI: search(query)
WikidataAPI-->>WikidataAPI: WikiResults
WikidataAPI->>PageController: fetchResults(WikiResults)
end
PageController->>ResultPage: displayResults(WikiResults), displayRelatedRoutes(RouteResults)
ResultPage-->>User: status
User->>ResultPage: view_all_results
ResultPage-->>User: displayed results
3.2 Feed Diagram
by Mutti, Eray
sequenceDiagram
participant User
participant PageController
participant Database
participant FeedPage
User->>PageController: viewFeed()
PageController->>Database: getFollowing(User)
Database-->>PageController: FollowingUsers
PageController->>Database: fetchFeed(FollowingUsers)
Database-->>PageController: FeedRoutes
PageController->>FeedPage: displayFeed(FeedRoutes)
FeedPage-->>User: displayFeedResults
3.3 ^Follow(er|ing) Display Diagram
by Ozgur, Yigit Kagan
sequenceDiagram
participant User
participant UserPage
participant UserFollows
participant PrivateDatabase
participant UserData
User ->> UserPage: viewProfile(User)
alt
UserPage ->> UserFollows: displayFollowers(User)
UserFollows ->> PrivateDatabase: getFollowers(User)
PrivateDatabase ->> UserData: fetchFollowers(User)
UserData-->> UserPage:Followers
end
alt
UserPage ->> UserFollows: displayFollowing(User)
UserFollows ->> PrivateDatabase: getFollowing(User)
PrivateDatabase ->> UserData: fetchFollowing(User)
UserData-->> UserPage:Following
end
UserPage-->> User: status
Following Display Diagram is quite similar.
3.3.1 Display Profile
by Ozgur, Yigit Kagan
sequenceDiagram
participant User
participant UserPage
participant PageController
participant PrivateDatabase
User ->> UserPage: viewProfile()
alt DisplayProfile
UserPage ->> UserPage : displayProfile()
UserPage ->> PrivateDatabase: fetchProfileData(User)
PrivateDatabase -->> UserPage: ProfileData
UserPage -->> User: status
end
alt EditProfile
UserPage ->> PrivateDatabase: updateTable(Table, Value)
PrivateDatabase -->> UserPage: status
end
alt EditPfp
UserPage ->> PageController: updateProfilePicture()
PageController ->> PrivateDatabase: updateTable(ProfilePicture, image)
PrivateDatabase -->> PageController: status
PageController -->> UserPage: status
end
3.3.2 Follow/Unfollow
by Ozgur, Yigit Kagan
sequenceDiagram
participant User
participant UserPage
participant PageController
participant PrivateDatabase
User ->> UserPage: viewProfile()
UserPage ->> PageController: take_action(User)
alt Follow
PageController->>PrivateDatabase: follow(User)
end
alt Unfollow
PageController->>PrivateDatabase: unfollow(User)
end
PrivateDatabase-->>PageController: status
PageController-->>UserPage: status
3.4 Route Creation Diagram
by Burak
sequenceDiagram
participant User
participant RouteCreationPage
participant PageController
participant Database
participant SearchResults
User->>RouteCreationPage: CreateRoute()
RouteCreationPage->>PageController: search(query)
PageController->>Database:FetchDestination(query)
SearchResults->>User:ViewResults
Database->>Database:search(query)
Database->>PageController:Destinations
PageController->>SearchResults:Destinations
SearchResults-->>User:DisplayResults
User-->>RouteCreationPage:Save(query)
RouteCreationPage-->>Database:Insert(query)
3.5 SignUp and Login
by Taha & Ceylin
sequenceDiagram
participant User
participant UserInterface
participant Database
alt SignUp
User->>UserInterface:EnterSignUpCredentials()
UserInterface-->Database:SignUpValidate()
end
alt Login
User-->UserInterface:EnterLoginCredentials()
UserInterface-->Database:LoginValidate()
end
alt Logout
User-->UserInterface:Logout()
UserInterface-->Database:setUserNull()
end
3.6 Route Details
by Emin
sequenceDiagram
participant User
participant RoutePage
participant PageController
participant PrivateDatabase
User ->> RoutePage: viewRoute(RouteId)
RoutePage ->> PageController: take_action(RouteId)
alt Comment
PageController->>PrivateDatabase: comment(RouteId)
end
alt Like
PageController->>PrivateDatabase: like(RouteId)
end
alt Save
PageController->>PrivateDatabase: save(RouteId)
end
alt Share
PageController->>PrivateDatabase: share(RouteId)
PrivateDatabase-->>PageController: shareLink
end
PrivateDatabase-->>PageController: status
PageController-->>RoutePage: status
RoutePage ->> PageController: take_action(RouteId, object)
alt Reroute
PageController->>PrivateDatabase: update(RouteId, object)
end
PrivateDatabase-->>PageController: status
PageController-->>RoutePage: status