Skip to content

Design Diagrams

Eray Eroğlu edited this page May 3, 2024 · 5 revisions

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
Loading

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

Loading

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;
Loading

2.2.1 Other Users' Profile

    flowchart
    User --> Follow;
    User --> Unfollow;
    User --> RemoveFollower;
    User --> DisplayProfilePic;
    User --> DisplayFollowers;
    User --> DisplayFollowing;
Loading

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;
   
Loading

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;
    
Loading

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

Loading

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


Loading

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


Loading

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
        
   
        

        
       
Loading

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
 
    
Loading

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
Loading

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)

Loading

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
Loading

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
Loading

🏡 Home

🧑‍💻 Team Members
📍 Project
💎 Customer Requirements Milestone
👑 Design and Implementation
Testing 🔬
📓 Meeting Notes

📆 Planning

📑 Templates

Clone this wiki locally