Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
345 commits
Select commit Hold shift + click to select a range
f4f03cf
fixed error when getting last item from chat response
Reyno256 Nov 18, 2024
5fd85b6
fixed error when getting last item from chat response
Reyno256 Nov 18, 2024
dc9f7bc
Update all user story files, can now work on API
Nov 18, 2024
c7cad9f
Fixing merge issues from main
Nov 18, 2024
1608488
Merge branch 'main' into descriptionSearch
Reyno256 Nov 19, 2024
94ff1c8
Merge pull request #13 from DimitriosGkiokmema/descriptionSearch
eulogizee Nov 19, 2024
1071208
Updated the mention of username into accesstoken.
yankicer Nov 20, 2024
2b381b6
Updated the mention of username into accesstoken.
yankicer Nov 20, 2024
14f5d10
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Nov 21, 2024
90684f0
updated prepareFailView method
KseniaTk Nov 21, 2024
6e793d5
updated SimilarListenersState import statements
KseniaTk Nov 21, 2024
e2f2fde
added javadoc
KseniaTk Nov 21, 2024
d060ba5
added javadoc
KseniaTk Nov 21, 2024
0bcc43b
added javadoc
KseniaTk Nov 21, 2024
f7ad05c
changed parameter name
KseniaTk Nov 21, 2024
4365e5b
changed parameter name
KseniaTk Nov 21, 2024
3d3e249
added instance variable
KseniaTk Nov 21, 2024
22c0fda
implemented execute method
KseniaTk Nov 21, 2024
40a72af
updated execute method
KseniaTk Nov 21, 2024
5321f37
updated execute method
KseniaTk Nov 21, 2024
e559c9c
added javadoc
KseniaTk Nov 21, 2024
c92bf35
Merge pull request #14 from DimitriosGkiokmema/UpdatedLoginMenu
Reyno256 Nov 22, 2024
02e2378
made go home button functional
Reyno256 Nov 22, 2024
d6ba6fb
Began working on recommendUserDataInterface
Nov 22, 2024
13f7252
Merging with main
Nov 22, 2024
06570a3
Merge pull request #16 from DimitriosGkiokmema/returnHome
eulogizee Nov 22, 2024
ec9c52a
begun implementation of search use case
Reyno256 Nov 22, 2024
f8f7e69
begun implementation of search use case
Reyno256 Nov 22, 2024
7332760
added parameters to constructor
Reyno256 Nov 22, 2024
9914d20
Created functional search use case
Reyno256 Nov 22, 2024
ce1927a
Merge remote-tracking branch 'origin/search_LLM_interactions' into se…
Reyno256 Nov 22, 2024
56ab707
Created functional search use case
Reyno256 Nov 22, 2024
fc60b1f
updated pom file with Spotify Wrapper dependency
KseniaTk Nov 22, 2024
0d1e1ab
added helper methods to get info from spotify api
KseniaTk Nov 22, 2024
947d351
added helper methods to get info from spotify api
KseniaTk Nov 22, 2024
8cb905a
updated instance variables
KseniaTk Nov 23, 2024
81497e2
created test for interactor
KseniaTk Nov 23, 2024
6459f83
updated paramters
KseniaTk Nov 23, 2024
ab087aa
created access object for testing
KseniaTk Nov 23, 2024
f75d14b
updated
KseniaTk Nov 23, 2024
95ccb26
tests for two methods
KseniaTk Nov 23, 2024
d342eec
Updated recommend files, still need to get data from the spotify api …
Nov 23, 2024
a255036
Completed the majority of the code for this use case, still need to a…
Nov 23, 2024
b992ddc
added java doc
KseniaTk Nov 23, 2024
b3ebccb
added java doc
KseniaTk Nov 23, 2024
70d6747
added success test
KseniaTk Nov 23, 2024
e655754
created access object for testing
KseniaTk Nov 23, 2024
6e805ce
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Nov 23, 2024
fc3d30f
updated execute method
KseniaTk Nov 23, 2024
7f50bf6
updated javadoc for getFollowedArtists method
KseniaTk Nov 23, 2024
9b59c1a
fixed checkStyle
KseniaTk Nov 23, 2024
d8d112e
updated
KseniaTk Nov 23, 2024
22dcecf
updated
KseniaTk Nov 23, 2024
5b3f04e
Merge branch 'main' into eulogizee-patch-1
yankicer Nov 24, 2024
96f8a68
Merge pull request #9 from DimitriosGkiokmema/eulogizee-patch-1
yankicer Nov 24, 2024
64afe2c
added constant
KseniaTk Nov 24, 2024
1e0d6f3
Removed the time variable from the TopItems implementation.
yankicer Nov 24, 2024
fdcf5b3
updated constructor
KseniaTk Nov 24, 2024
03402fe
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Nov 24, 2024
531386b
imported ActionListener and ActionEvent class
eulogizee Nov 24, 2024
04d0c6f
Merged main to recommendation branch
Nov 24, 2024
a345a2e
search by keyword implementation
eulogizee Nov 24, 2024
6814578
added KeywordUserDataAccessObject
eulogizee Nov 24, 2024
426081e
Merge pull request #17 from DimitriosGkiokmema/TopItems
Reyno256 Nov 25, 2024
aa06805
Updated README image for recommend screen
Nov 25, 2024
014a12f
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
Nov 25, 2024
2eea4e0
Merge pull request #15 from DimitriosGkiokmema/SimilarListenersUseCase
DimitriosGkiokmema Nov 25, 2024
9ccf226
updated keyword view
eulogizee Nov 25, 2024
99cb4b5
made the song section scrollable
eulogizee Nov 25, 2024
004d60a
Created a setTrackGraph method that updates the dataset for the Top T…
yankicer Nov 25, 2024
786d031
Created a dummy DataAccessObject constructor to be able to test wheth…
yankicer Nov 25, 2024
9b28851
Added docstring to explain what the TopItemsOutputData class does.
yankicer Nov 25, 2024
bc5c787
Renamed The UseCase for addTopItemsUseCase and addTopArtistView.
yankicer Nov 25, 2024
92c5111
Updated the constructor call for topItemsController variable in Logge…
yankicer Nov 25, 2024
a08a88d
Updated the constructor for TopItemsState
yankicer Nov 25, 2024
a6c6de9
Renamed the TopItemsInputBoundary variables to topItemsUseCaseInterac…
yankicer Nov 25, 2024
d8e846d
Commented out the prepareFailView in TopItemsPresenter since it is no…
yankicer Nov 25, 2024
d60f64a
Changed calls to userDataAccessObject in TopItemsInteractor
yankicer Nov 25, 2024
f1c00d5
Merge pull request #18 from DimitriosGkiokmema/TopItems
DimitriosGkiokmema Nov 25, 2024
67fcb4b
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Nov 25, 2024
496261b
Deleted the unused commented out methods, constructors, variables and…
yankicer Nov 25, 2024
4e41894
added instance variables
KseniaTk Nov 25, 2024
80447cf
Merge pull request #20 from DimitriosGkiokmema/search_LLM_interactions
yankicer Nov 25, 2024
0d42235
Merge pull request #19 from DimitriosGkiokmema/CodeCleanUp
Reyno256 Nov 25, 2024
5cadc53
added instance variables
KseniaTk Nov 25, 2024
5a14d3d
show error message if the input is not valid
eulogizee Nov 25, 2024
f84037e
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Nov 25, 2024
fdf3b3f
added instance variables
KseniaTk Nov 25, 2024
3395975
Merge branch 'main' into keyword1
eulogizee Nov 25, 2024
0afe0ff
Done some refactoring for the TopItems usecase, view, and interface a…
yankicer Nov 25, 2024
0439525
Done some refactoring for the TopItems view.
yankicer Nov 25, 2024
767d5a9
updated instance variables, added method to set similarListeners cont…
KseniaTk Nov 25, 2024
c1aa1b8
Done some refactoring for the TopItems view.
yankicer Nov 25, 2024
0490b37
updated, added similarListeners view and usecase
KseniaTk Nov 25, 2024
88dcd27
Rename Keyword.java to KeywordView.java
eulogizee Nov 25, 2024
067e8d9
Merge pull request #23 from DimitriosGkiokmema/TopItems
KseniaTk Nov 25, 2024
9481145
Merge pull request #22 from DimitriosGkiokmema/keyword1
DimitriosGkiokmema Nov 25, 2024
b960efa
updated, added similarListeners view and usecase
KseniaTk Nov 25, 2024
42c453e
added property change listener
KseniaTk Nov 25, 2024
4997481
Changed wording in View
Nov 25, 2024
7aa6777
Create spotify_api
eulogizee Nov 25, 2024
3234edb
Rename spotify_api to spotify_api.java
eulogizee Nov 25, 2024
2a1c32f
implemented propertyChange method
KseniaTk Nov 25, 2024
3c8c8d5
implemented propertyChange method
KseniaTk Nov 25, 2024
71535a8
Create spotify_api.java
eulogizee Nov 25, 2024
b4d8187
Update KeywordView.java, change class and method name Keyword to Keyw…
eulogizee Nov 25, 2024
2967ec6
Update LoggedInView.java, rename Keyword to KeywordView
eulogizee Nov 25, 2024
cf41ae1
added action listener for similarListeners button
KseniaTk Nov 25, 2024
f9c71bd
Updated readme to reflect ACCEU standards and added image explaining …
Reyno256 Nov 25, 2024
0f45086
added action listener for similarListeners button
KseniaTk Nov 25, 2024
86b4c87
Merge branch 'main' into readme_update
yankicer Nov 25, 2024
d441e89
Merge pull request #24 from DimitriosGkiokmema/readme_update
yankicer Nov 25, 2024
b908e82
Merge branch 'main' into spotifyAccessObject
Reyno256 Nov 25, 2024
7a9cf6d
added instance variable for spotifyAccessObject
KseniaTk Nov 25, 2024
7133c35
Merge pull request #21 from DimitriosGkiokmema/spotifyAccessObject
Reyno256 Nov 25, 2024
7a83257
added method for recommendations
KseniaTk Nov 25, 2024
1e10bf7
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Nov 25, 2024
3771891
added instance variable for spotify access object
KseniaTk Nov 25, 2024
f9286e3
added a folder spotify_api and a file SpotifyService.java
eulogizee Nov 25, 2024
a94ed0e
Update LoggedInView.java, the actionlistener of keyword
eulogizee Nov 25, 2024
099cf07
Update and rename spotify_api.java to SpotifyService.java
eulogizee Nov 25, 2024
87f66c2
Update LoggedInView.java, made the right import statement
eulogizee Nov 25, 2024
b9dcbf4
Fixed issues from previous merge
eulogizee Nov 25, 2024
d1bad7c
Merge branch 'main' into keyword1
eulogizee Nov 25, 2024
040f1dd
Merge pull request #25 from DimitriosGkiokmema/keyword1
DimitriosGkiokmema Nov 26, 2024
c41d357
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Nov 26, 2024
ac9b0b1
added instance variable for spotify access object
KseniaTk Nov 26, 2024
d0dc616
added instance variable for spotify access object
KseniaTk Nov 26, 2024
44d2028
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Nov 26, 2024
e3e3c99
added dependency
KseniaTk Nov 26, 2024
b08a7fc
added dependency
KseniaTk Nov 26, 2024
61ce9aa
added spotify access object
KseniaTk Nov 26, 2024
2cb1a1f
updated constructor and methods
KseniaTk Nov 26, 2024
1bca5c6
added dependency
KseniaTk Nov 26, 2024
63548b4
updated constructor and methods
KseniaTk Nov 26, 2024
5089ef0
Merge pull request #26 from DimitriosGkiokmema/spotifyAccessObject
yankicer Nov 26, 2024
f55d677
Added the artists variable into the TopItemsState to work on the Top …
yankicer Nov 27, 2024
f4b270b
Added the setArtistGraph to update the dataset for the TopArtists Graph.
yankicer Nov 27, 2024
f130051
Done some refactoring.
yankicer Nov 27, 2024
e6c33bf
updated constructor
KseniaTk Nov 27, 2024
5ffd231
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Nov 27, 2024
c01a3f0
Updated the controller calls in the presenter class.
yankicer Nov 27, 2024
cff3349
Added some dummmy tests.
yankicer Nov 27, 2024
d596ba0
Updated the View Class.
yankicer Nov 27, 2024
10d023b
Merge pull request #27 from DimitriosGkiokmema/TopItems
KseniaTk Nov 27, 2024
2c6195c
Created a seperate list for the execution in topItems.
yankicer Nov 27, 2024
efc2fd2
Updated the Data Access class for the graph menu.
yankicer Nov 27, 2024
4d0bbda
Update
yankicer Nov 27, 2024
413e146
Merge pull request #28 from DimitriosGkiokmema/TopItems
KseniaTk Nov 27, 2024
57a92af
Created recommend test file
Nov 27, 2024
af00c85
added temp values to test
Nov 27, 2024
b1e9f30
Merged with main
Nov 27, 2024
5957896
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Nov 27, 2024
f849775
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Nov 27, 2024
e5d082f
updated constructor
KseniaTk Nov 27, 2024
2b56442
updated instance variables
KseniaTk Nov 27, 2024
0a399aa
updated prepare fail view
KseniaTk Nov 27, 2024
d41a11c
added action listener to similar listeners button
KseniaTk Nov 27, 2024
ce737d8
updated prepare fail view
KseniaTk Nov 27, 2024
122af74
updated set list of artists method
KseniaTk Nov 27, 2024
2073bcf
updated
KseniaTk Nov 27, 2024
a69b857
added similarListeners view and usecase
KseniaTk Nov 27, 2024
0ceec59
updated
KseniaTk Nov 27, 2024
c3cd0a8
Implemented back button functionality
Nov 27, 2024
dadf0d5
Changed user story to use the spotify api. Before I was hardcoding du…
Nov 27, 2024
ca5057b
Removed deprecated tests
Reyno256 Nov 27, 2024
c9dd850
Removed deprecated use case and refactored methods to remove referenc…
Reyno256 Nov 27, 2024
0c9964e
Added an ActionListener for homeButton to make it functional.
yankicer Nov 27, 2024
07bf689
Added accessToken into the TopItemsState. Updated the constructor and…
yankicer Nov 27, 2024
4287e8c
Revised the prepareSuccessView in order to make it functional for the…
yankicer Nov 27, 2024
8581c9e
Added the accessToken variable into the Output class and added get se…
yankicer Nov 27, 2024
06ab63d
Revised the interactor to make it functional for the home button.
yankicer Nov 27, 2024
9f19bec
Added the accessToken variable into the input class and made a get me…
yankicer Nov 27, 2024
a3d0277
Updated the controller class to make it functional for the home button.
yankicer Nov 27, 2024
7ed4db2
Updated the LoggedInView to pass the accessToken into the topItems co…
yankicer Nov 27, 2024
dcf34d6
Updated the AppBuilder.
yankicer Nov 27, 2024
a18016d
Created SearchInteractor test with 100% coverage and a dummy language…
Reyno256 Nov 27, 2024
a5805d4
Merge pull request #30 from DimitriosGkiokmema/descriptionSearchTest
yankicer Nov 27, 2024
a8dc98d
Merge pull request #29 from DimitriosGkiokmema/TopItems
Reyno256 Nov 27, 2024
489f1d5
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Nov 27, 2024
2a88ff6
updated
KseniaTk Nov 27, 2024
c216e6a
updated
KseniaTk Nov 28, 2024
326465c
updated
KseniaTk Nov 28, 2024
34c9cab
updated
KseniaTk Nov 28, 2024
dfeee99
updated
KseniaTk Nov 28, 2024
94f865c
updated
KseniaTk Nov 28, 2024
f0d5da7
updated addSimilarUseCase method
KseniaTk Nov 28, 2024
be16aab
updated
KseniaTk Nov 28, 2024
6408078
updated test to get 100 percent coverage
KseniaTk Nov 28, 2024
65f558e
Added top artists in recommendationView description
Nov 28, 2024
048e566
Merge branch 'main' into recommendations
Nov 28, 2024
a23c235
Changed formating of Chat GPT response
Nov 28, 2024
7d894ae
Fixed issue in logging in
Nov 28, 2024
8419428
Deleted hard-coded data to use api
Nov 28, 2024
196797b
Updated spotify api
Nov 28, 2024
fc39fed
Changed button location in home screen, updated views
Nov 28, 2024
94517c2
created user output for the case where there's no valid openAI key.
Reyno256 Nov 29, 2024
28352eb
Merge pull request #31 from DimitriosGkiokmema/similarListenersView
Reyno256 Nov 29, 2024
5e19173
Created tests and passed all of them
Nov 29, 2024
4fc5b4d
Merging main to branch
Nov 29, 2024
f244e37
Fixed merge issue
Nov 29, 2024
1675ed4
Implemented spotify api usage, removed hard-coded data
Nov 29, 2024
b2e000b
Merge pull request #32 from DimitriosGkiokmema/searchFailOutput
DimitriosGkiokmema Nov 29, 2024
bac05de
Merge pull request #33 from DimitriosGkiokmema/recommendations
eulogizee Nov 29, 2024
dca27e3
Created the tests necessary for the TopTracks use case.
yankicer Nov 29, 2024
c918c90
Changed the constructor for the test file and updated the method calls.
yankicer Nov 29, 2024
ae9168a
Created a FailView for the Top Items use case.
yankicer Nov 29, 2024
58975c2
Updated the interactor because it had some wrong implementations.
yankicer Nov 29, 2024
335c234
Updated the TopItemsInputData because Tracks and Artists are not need…
yankicer Nov 29, 2024
0ade2f1
Updated the TopItemsInputData call.
yankicer Nov 29, 2024
9070846
Did some refactoring.
yankicer Nov 29, 2024
65d6868
Did some refactoring.
yankicer Nov 29, 2024
1d10ed5
Did some refactoring.
yankicer Nov 29, 2024
e69446b
Made keyword search in clean architecture
Reyno256 Nov 29, 2024
f691543
documentation modify
eulogizee Nov 29, 2024
2d6050f
polished keywordview
eulogizee Nov 30, 2024
c1c7753
Merge pull request #35 from DimitriosGkiokmema/TopItemsTest
eulogizee Nov 30, 2024
0dd403a
Create accessibility-report.md
eulogizee Dec 1, 2024
9448be5
Update accessibility-report.md
eulogizee Dec 1, 2024
39d0d25
Update accessibility-report.md
eulogizee Dec 1, 2024
c87ade0
updated gitignore
Reyno256 Dec 1, 2024
998edab
Merge remote-tracking branch 'origin/main'
Reyno256 Dec 1, 2024
66584a8
added test for keyword use_case
eulogizee Dec 1, 2024
2987a26
added test and resolve merging conflicts for keyword use_case
eulogizee Dec 1, 2024
ae66831
Merge branch 'main' of https://github.com/DimitriosGkiokmema/CSC207-P…
KseniaTk Dec 1, 2024
f821be7
fixed some null pointer exceptions
KseniaTk Dec 1, 2024
ece51e0
resolved merging conflicts
eulogizee Dec 1, 2024
c3c3ce5
Merge pull request #36 from DimitriosGkiokmema/cleanup
Reyno256 Dec 1, 2024
63c8d4a
Merge remote-tracking branch 'origin/main'
Reyno256 Dec 1, 2024
97237a6
finished refactor to top items Data Access to remove refences to a user
Reyno256 Dec 1, 2024
7b29f20
Merge branch 'main' into spotifyAccessObject
Reyno256 Dec 1, 2024
90f2447
Merge pull request #37 from DimitriosGkiokmema/spotifyAccessObject
Reyno256 Dec 1, 2024
5150916
Merge pull request #38 from DimitriosGkiokmema/rename
eulogizee Dec 1, 2024
3146eb8
renamed variables
Reyno256 Dec 2, 2024
c170814
Merge pull request #40 from DimitriosGkiokmema/updateSearchHomeButton
yankicer Dec 2, 2024
9ea4553
removed access token passing in top items use case
Reyno256 Dec 2, 2024
050738a
added new login execute implementation
Reyno256 Dec 2, 2024
9bbb7c6
prevented null access token being passed from keyword
Reyno256 Dec 2, 2024
8edd3e1
made back buttons functional
Reyno256 Dec 2, 2024
2769136
Merge branch 'main' into noInput
Reyno256 Dec 2, 2024
51f088a
Merge pull request #41 from DimitriosGkiokmema/noInput
DimitriosGkiokmema Dec 2, 2024
23dae54
Deleted token reference in related files and cleaned up some codes
eulogizee Dec 2, 2024
48d8599
finalize keyword use case failview
eulogizee Dec 2, 2024
46925e4
added test for keyword use case
eulogizee Dec 2, 2024
84f6b0a
fixed checkstyle error
eulogizee Dec 2, 2024
fa706ae
fixed checkstyle error
eulogizee Dec 2, 2024
ca1aa35
fixed checkstyle error
eulogizee Dec 2, 2024
b2d7f79
fixed checkstyle error
eulogizee Dec 2, 2024
f86def9
fixed issues from refactoring
eulogizee Dec 2, 2024
812e9db
refactor
eulogizee Dec 2, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ out/
!**/src/main/**/out/
!**/src/test/**/out/
.idea/easycode.ignore
.idea/
homework-5.iml

src/keys
target/

### Eclipse ###
Expand Down
40 changes: 32 additions & 8 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/checkstyle-idea.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

265 changes: 84 additions & 181 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,181 +1,84 @@
# Lab 5: Logout

## Preamble

In the current homework, you added code to the login use case to save the currently-logged-in
user by saving the user in the Data Access Layer. You also added a unit test for this.

In this lab, you will complete a logout use case as a team. You will also begin to discuss your project
and the use cases that need to be implemented.

We have created all the Clean Architecture classes necessary for the logout use case.

By Friday, your team will submit:
- your completed lab code [for credit]
- a draft of your project blueprint proposal. [required, but not for credit]

# Phase 2 [for credit]
_(recall, Phase 1 was your solo task of adding the storage of the currently-logged-in user)_

## Task 0: Fork this repo on GitHub
**To get started, one team member should fork this repo on GitHub and share it with the team.
All of you should then clone it.**

* * *

Suggested logistics: One of you should invite the others to collaborate on their fork of the
original repo on GitHub. You can do this in your repo on GitHub under `Settings -> Collaborators`.
This will allow you to push branches to a common repo and then use pull requests to contribute
your code and review. To prevent others from pushing directly to the main branch,
we recommend you set branch protection rules on GitHub. Below are how the settings might look if you
add branch protection rules:

![image of branch protection rules for main with the
requirement of two approvers to merge in pull requests.
](images/branch_protection_rules.png)

* * *

Open the project in IntelliJ and make sure you can successfully run `app/Main.java`.
Note: you may need to set the Project SDK in the `Project Structure...` menu, and possibly
also manually link the Maven project, as you did in Phase 1.

## Task 1: Understanding the Program

You may notice that we have refactored the CA engine code _slightly_ since Phase 1, but the
way we build the engine is drastically different: we have switched from using Factories to
using the Builder design pattern, which we'll be discussing in lecture soon.

Open up `app.Main` and read it as a team.
- What are the Views and what are the current Use Cases?
- Which Uses Cases are triggered from each View?
- Which version of the DAO is `app.Main` using?

The major change since Phase 1 is that we have added the `app.AppBuilder` class which makes
it easier to understand how our CA engine is being constructed — it also makes `app.Main` nice and concise!
- Why do all those `addX` methods end in `return this;`?

Run the program and make sure the signup and login Use Cases work.

Currently, you'll notice that the "Log Out" button still doesn't actually log you out. It's time to fix
that button, which is part of the `LoggedInView`.
We have created all the classes for you, but some of the code is missing.
As a team, your task is to fill in the missing code so that the Logout Use Case is implemented.
**The next part of the readme describes how your team will do this.**

* * *

**Your team will know when you are done when:**

- Clicking the "Log Out" button takes the user back to the Login View when you use the program.
- The provided `LogoutInteractorTest` test passes.

The "Log Out" button is an instance variable in class `LoggedInVew`. Go find it.
Also look at the `interface_adapter.change_password.LoggedInViewModel`, which contains any
data showing on the `LoggedInVew`.

* * *

## Task 2: Dividing up the work

There are `TODO` comments left in the files
Recall that you can use the TODO tool window to conveniently pull up a complete list.

Once the TODOs are all complete, the "Log Out" button _should_ work!

As a team, split up the TODOs (see below) between the members of your team.

There are TODOs in seven of the files.
Make sure each member has at least one TODO which they will be responsible for completing.
If your team prefers to work in pairs, that is fine too. Your individual branches
will not be graded for this — only the final, working version.

The TODOs are summarized below (by file) to help your team decide how to split them up:

* * *

- `Main.java`

- [ ] TODO: add the Logout Use Case to the app using the appBuilder

* * *

- `LoggedInView.java` (tip: refer to the other views for similar code)

- [ ] TODO: save the logout controller in the instance variable.
- [ ] TODO: execute the logout use case through the Controller

* * *

- `LogoutController.java` (tip: refer to the other controllers for similar code)

- [ ] TODO: Save the interactor in the instance variable.
- [ ] TODO: run the use case interactor for the logout use case

* * *

- `LogoutInputData.java` (should be done with the LogoutInteractor TODOs below)

- [ ] TODO: save the current username in an instance variable and add a getter.

- `LogoutInteractor.java` (tip: refer to `ChangePasswordInteractor.java` for similar code)

- [ ] TODO: save the DAO and Presenter in the instance variables.
- [ ] TODO: implement the logic of the Logout Use Case

* * *

- `LogoutOutputData.java`

- [ ] TODO: save the parameters in the instance variables.

* * *

- `LogoutPresenter.java` (tip: refer to `SignupPresenter.java` for similar code)

- [ ] TODO: assign to the three instance variables.
- [ ] TODO: have prepareSuccessView update the LoggedInState
- [ ] TODO: have prepareSuccessView update the LoginState

* * *

1. Make a branch named the first part of your UofT email address, everything before the `@`.
For example, if your email address is `paul.gries@mail.utoronto.ca`, then the branch name would
be `paul.gries`.

Make sure you switch to the new branch.

In the terminal, this would look like below, but replaced with your own information:
```
git branch paul.gries
git switch paul.gries
```

2. Complete your assigned TODOs and make a pull request on GitHub. In your pull request,
briefly describe what your TODOs were and how you implemented them. If you aren't sure
about part of it, include this in your pull request so everyone knows what to look
for when reviewing — or you can of course discuss with your team before making your
pull request since you are physically working in the same space.
- **Important: don't push any changes to the `.idea` folder, as that
may cause issues for your other teammates, as some files contain
configurations specific to your individual IntelliJ projects.**

3. Review each other's pull requests to ensure each TODO is correctly implemented and that
there are no Checkstyle issues in the files that were modified.

4. Once all TODOs are completed, your team should debug as needed to ensure the
correctness of the code. Setting a breakpoint where the log-out use case
interactor starts its work will likely be a great place to start when debugging.

And that's it; you now have a working Logout Use Case! Instructions for
how to submit your work on MarkUs will be posted later.

Your team should spend the rest of the lab working on your project blueprint.

* * *

# Project Blueprint

See Quercus for details about the project blueprint! By the end of the week,
the goal is for your team to have a fully drafted blueprint so that your team
will be ready to get started on your project after Reading Week.
# CSC 207 Project: Spotify Companion

## Software Description
The software is made through Java Swing and acts as an extension of a user’s Spotify account.
The program visualizes user listening patterns,
suggests new or related songs for their preferences, search songs by certain
lyrics and keywords that the user gives, and can find users with similar preferences.
It is going to be a general extension to the overall Spotify experience.
<br />
<br />
The APIs we will use are Spotify (to access user data) and Azure OpenAI (to interpret data and recommend songs)

## Authors
Yanki Cer -> yankicer <br />
Dimitrios Gkiokmema -> DimitriosGkiokmema <br />
Quinn Reynolds -> Reyno256 <br />
Ksenia Tkaczyk -> KseniaTk <br />
Yicheng (Ethan) Wang -> eulogizee

## Table of Contents
1. [Features](#Features)
2. [Installation Instructions](#Installation)
3. [Usage](#Usage)
4. [Feedback and Contributions](#Feedback)

## Features
There are six major features of the app; one for each of us to work on independently, and one to collaborate on as a team. Below is an image of the overall pages which a user can access. Below each feature is an image of the associated view in the software.![Project UI](images/CSC207%20Project%20Wireframe.png)
### Login Screen <br />
* Sign In/Out: The first is a user signing in and signing out(Team).

![Login Screen](images/login_screen.png) <br />
![Home Screen](images/home_screen.png) <br />

* Recommendations: The app can also get song recommendations based on a user's music preferences using the for you button. (Dimitrios)
![Recommendations Screen](images/csc207_progress1_dimitrios.png) <br />
* Search by Description: The user can enter the description of a song and have its title returned. (Quinn)

![Description Search Screen](images/csc207_progress1_quinn.png) <br />

* Search by Artist and Lyric: A user may want to see some songs based on a given keyword. They can enter the keyword into a search text box and get
suggestions. (Ethan)
![Keyword Search Screen](images/csc207_progress1_ethan.png) <br />

* Top Tracks: A user wants to see what their most listened to tracks are. (Yanki)
![Analytics Screen](images/csc207_progress1_yanki.png) <br />

* Similar Music: A user wants to find other individuals that have a similar music preference. (Ksenia)

![Similar Listeners Screen](images/csc207_progress1_ksenia.jpg) <br />


## Installation
As this app is written entirely in Java it runs well on a variety of devices.
Currently, it has been tested on Windows 11, macOS 14 and Ubuntu 24, although likely
many other operating systems would also work.
1. After installing the Java files the user must ensure all the Maven dependencies are properly installed. In IntelliJ IDEA this can be done by clicking on the m on the right side of the screen and clicking reload all maven projects incrementally as seen below.![Maven reload instructions.png](images/Maven%20reload%20instructions.png)
2. The other packages which Maven will download are Okhttp(https://square.github.io/okhttp/) version 4.12.0, JFreeChart(https://www.jfree.org/jfreechart/) version 1.5.4 and Azure openAI(https://learn.microsoft.com/en-us/java/api/overview/azure/ai-openai-readme?view=azure-java-preview) beta version 12.
3. To log in to the app you are required to have a spotify app access token. Getting this token is clearly explained in this link(https://developer.spotify.com/documentation/web-api/tutorials/getting-started), as well as below.
1. In the spotify app go to your Dashboard, click on the Create an app button and enter the following information: App Name: My App
App Description: This is my first Spotify app
Redirect URI: You won't need this parameter in this example, so let's use http://localhost:3000.
2. Check the Developer Terms of Service checkbox and tap on the Create button.
3. Click on the name of the app you have just created (My App)
4. Click on the Settings button
5. The Client ID can be found here, it is essential for the next part of the process so record it somewhere safe. The Client Secret can be found behind the View client secret link this is also required for the next step.
6. To request an access token navigate to https://hoppscotch.io/ and Send a POST request to the token endpoint URI.
7. Add the Content-Type header set to the application/x-www-form-urlencoded value.
8. Add an HTTP body containing the Client ID and Client Secret, along with the grant_type parameter set to client_credentials.
9. The response will be a spotify access token which is valid for 1 hour and can be used to log in to the app.
4. In order to access the other API used in this project you must add a file called keys(with no file type extension) to the src directory of the project.
5. Then you must paste in the Azure openAI api key used for the project, if you don't have this key, and you need access to it email quinn.reynolds@mail.utoronto.ca.
6. After these steps the app should work for you, keep in mind you will need to regenerate a Spotify API key every hour.


## Usage

## Feedback
This code was written for CSC207 in the fall of 2024 and if you are reading
this document after that point then the code will no longer be maintained.
If you would like access to this repository please email dimitrios.gkiokmema@mail.utoronto.ca. As this is a public project please be civil and send all emails related to the project with the subject line "Spotify Companion <your GitHub username>". You can expect a response within 5 days in general.
In terms of contribution, any pull requests which include changes to Interactor files must also
include updated tests for those files. It is expected that all code written for this project follow
the ACCEU framework for code documentation and commenting. Code reviews will be conducted by the
orignial authors of the repository based on adherence to the principles of Clean Architecture and SOLID principles of software design.
30 changes: 30 additions & 0 deletions accessibility-report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
Principles of Universal Design
1. Equitable Use:
• Our program adheres to equitable use by offering features such as “search songs by description” and “search songs by keyword and artist,” which allow users with diverse music preferences to easily find songs regardless of specific knowledge about artists or genres.
• Future enhancements could include adding a text-to-speech feature to ensure visually impaired users can interact with the program seamlessly.
2. Flexibility in Use:
• Features like “get song recommendations based on your music preferences” adapt to different user tastes and listening behaviors, offering personalized recommendations.
• We could add language options in the future to accommodate non-English speakers, ensuring the interface is accessible to a broader audience.
3. Simple and Intuitive Use:
• The program’s interface for “search songs by keyword and artist” is designed to be straightforward, so even first-time users can understand and interact with it effectively.
• Tooltips or brief explanations could be added to further improve intuitiveness, helping users unfamiliar with some features.
4. Perceptible Information:
• Users can clearly view and navigate their “top tracks” and “song recommendations” without requiring prior knowledge, thanks to a well-organized and readable display.
• To improve accessibility, we could implement audio cues for visually impaired users.
5. Tolerance for Error:
• If users make typos while using the “search songs by keyword and artist” feature, the program could provide suggestions for corrections or display close matches.
• Future updates could include an undo feature to revert accidental actions, such as removing a song from a playlist.
6. Low Physical Effort:
• The program minimizes physical effort by providing quick access to “top tracks” and “similar listeners” through single-click or tap actions.
• Voice command integration could be a future addition, further reducing physical interaction requirements.
7. Size and Space for Approach and Use:
• The program’s interface is responsive and designed for both desktop and mobile platforms, ensuring that it remains functional and accessible regardless of the user’s device or screen size.
• Future updates could optimize the app further for assistive devices, like screen readers or one-handed operation.

Target Market

If we were to market the program, our primary audience would include music enthusiasts and Spotify users who want to enhance their music discovery experience. This includes students seeking new music for studying or relaxation, casual listeners looking for recommendations, and advanced users who want insights like “similar listeners.” Additionally, our program could appeal to professionals in creative fields, like writers or designers, who use music to inspire their work. By focusing on personalization and intuitive search features, we aim to attract users who value ease of use and customization in their music experience.

Demographic Considerations

Our program is less likely to be used by people who do not use Spotify, as all features are designed around Spotify’s API and ecosystem. Additionally, some demographics may face barriers, such as those without internet access, non-English speakers, or users unfamiliar with digital music platforms. To mitigate this, we could add offline features or expand language support. Drawing from the ethics modules, we recognize the importance of accessibility for users with disabilities. As such, we plan to incorporate features like text-to-speech, voice commands, and screen reader compatibility to ensure that our program does not exclude these demographics. By addressing these considerations, we aim to create a more inclusive and universally appealing tool.
Binary file added images/CSC207 Project Wireframe.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/Maven reload instructions.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed images/branch_protection_rules.png
Binary file not shown.
Binary file added images/csc207_progress1_dimitrios.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/csc207_progress1_ethan.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/csc207_progress1_ksenia.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/csc207_progress1_quinn.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/csc207_progress1_yanki.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/home_screen.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/login_screen.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/recommendations_screen.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/refresh_arrow.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/spotify2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading