owned this note
owned this note
Published
Linked with GitHub
# 1. Class Diagrams
_by Kristina, Mutti, Berkay, Yigit Kaan, Ozgur, Eray, Ceylin, Taha, Emin_
```mermaid
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_
```mermaid
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 Emin_
### 2.2.1 Profile
```mermaid
flowchart
User --> DeleteAccount;
User --> SeeProfilePicture;
User --> ListQuestions;
User --> ListComments;
User --> ListBookmarks;
User --> EditProfileInfo;
EditQuestions -."extend".-> ListQuestions;
DeleteQuestions -."extend".-> ListQuestions;
EditComments -."extend".-> ListComments;
DeleteComments -."extend".-> ListComments; Unbookmark -."extend".-> ListBookmarks;
EditPassword -."extend".-> EditProfileInfo;
EditName -."extend".-> EditProfileInfo;
EditProfilePicture -."extend".-> EditProfileInfo;
RemovePicture -."extend".-> EditProfilePicture;
```
### 2.2.1 Other Users' Profile
```mermaid
flowchart
User --> Follow;
User --> Unfollow;
User --> RemoveFollower;
User --> DisplayProfilePic;
User --> DisplayFollowers;
User --> DisplayFollowing;
```
## 2.3 Route Creation
_by Burak_
```mermaid
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
```mermaid
flowchart
User --> SignUp;
RegisteredUser --> Login;
RegisteredUser --> Logout;
```
## 2.5 Route Details
_by Emin_
```mermaid
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_
```mermaid
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_
```mermaid
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_
```mermaid
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_
```mermaid
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_
```mermaid
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_
```mermaid
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_
```mermaid
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_
```mermaid
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
```
------------------------------------------