This shows you the differences between two versions of the page.
poo-ca-cd:teme:proiect:etapa3 [2023/12/24 13:31] robert.grancsa |
poo-ca-cd:teme:proiect:etapa3 [2024/01/14 14:39] (current) robert.grancsa |
||
---|---|---|---|
Line 6: | Line 6: | ||
* **Colaboratori:** [[sorinabuf@gmail.com | Sorina-Anamaria Buf]], [[stefancocioran@gmail.com | Ștefan Cocioran]], [[miculuis1@gmail.com | Florian-Luis Micu]] | * **Colaboratori:** [[sorinabuf@gmail.com | Sorina-Anamaria Buf]], [[stefancocioran@gmail.com | Ștefan Cocioran]], [[miculuis1@gmail.com | Florian-Luis Micu]] | ||
* **Data publicarii: ** 18.12.2023, ora 13:30 | * **Data publicarii: ** 18.12.2023, ora 13:30 | ||
- | * **Deadline HARD: ** 14.01.2024, ora 23:55 | + | * **Deadline HARD: ** <del>14.01.2024</del> 16.01.2024, ora 23:55 |
- | * **Ultima modificare a enuntului:** 24.12.2023, ora 13:25 - clarifications for wrapped | + | * **Ultima modificare a enuntului:** |
- | * **Ultima modificare a testelor:** 24.12.2023, ora 13:25 - removed field from test 10 and fixed message for notifications | + | * 11.01.2024, ora 23:23 - added details for design patterns |
+ | * 06.01.2024, ora 14:25 - details for updateRecommendations | ||
+ | * | ||
+ | * **Ultima modificare a testelor:** 29.12.2023, ora 14:54 - removed all songs from the library | ||
* ** Schelet: ** [[https://github.com/oop-pub/oop-project-2023/tree/main/etapa3 | GitHub]] | * ** Schelet: ** [[https://github.com/oop-pub/oop-project-2023/tree/main/etapa3 | GitHub]] | ||
* **History** | * **History** | ||
+ | * 28.12.2023, ora 02:37 - simplified complex tests (6, 15, 16) and other fixes for date, recommandation and duplicate songs | ||
+ | * 27.12.2023, ora 11:05 - fixed index for random song | ||
+ | * 26.12.2023, ora 14:13 - replaced topPodcasts and recalculted mostProfitableSong | ||
+ | * 24.12.2023, ora 13:25 - clarifications for wrapped | ||
+ | * 24.12.2023, ora 13:25 - fixed createPlaylist in test 12 | ||
+ | * 24.12.2023, ora 13:25 - removed field from test 10 and fixed message for notifications | ||
* 23.12.2023, ora 14:10 - updated notifications info | * 23.12.2023, ora 14:10 - updated notifications info | ||
* 23.12.2023, ora 14:10 - updated notifications messages | * 23.12.2023, ora 14:10 - updated notifications messages | ||
Line 19: | Line 28: | ||
* **Atenție!** Pentru partea de citire / afișare nu este necesară folosirea adnotărilor din librăria Jackson. Puteți utiliza o metodă similară cu cea prezentată de noi în schelet, și anume să vă folosiți de clasa ObjectMapper. **Nu există o metodă corectă sau greșită de a lucra cu input-ul / output-ul.** Scopul nostru în cadrul acestui proiect nu este să vă testăm abilitatea de a lucra cu fișierele, ci să vă testăm atât înțelegerea cunoștințelor de bază dobândite în cadrul cursurilor și a laboratoarelor, cât și modul de gândire într-un limbaj de programare orientat obiect. | * **Atenție!** Pentru partea de citire / afișare nu este necesară folosirea adnotărilor din librăria Jackson. Puteți utiliza o metodă similară cu cea prezentată de noi în schelet, și anume să vă folosiți de clasa ObjectMapper. **Nu există o metodă corectă sau greșită de a lucra cu input-ul / output-ul.** Scopul nostru în cadrul acestui proiect nu este să vă testăm abilitatea de a lucra cu fișierele, ci să vă testăm atât înțelegerea cunoștințelor de bază dobândite în cadrul cursurilor și a laboratoarelor, cât și modul de gândire într-un limbaj de programare orientat obiect. | ||
* **Este obligatoriu să folosiți cel puțin 4 design pattern-uri.** Trebuie sa precizati in README ce design pattern ati folosit, si motivatia & locatia unde a fost folosita | * **Este obligatoriu să folosiți cel puțin 4 design pattern-uri.** Trebuie sa precizati in README ce design pattern ati folosit, si motivatia & locatia unde a fost folosita | ||
+ | * **Depunctari lipsa design pattern-uri**: Pentru fiecare design pattern lipsa (din cele 4), veti avea o depunctare de -2.5p, astfel pentru: | ||
+ | * 0 design pattern-uri - **-10p** | ||
+ | * 1 design pattern-uri - **-7.5p** | ||
+ | * 2 design pattern-uri - **-5p** | ||
+ | * 3 design pattern-uri - **-2.5p** | ||
<note important> | <note important> | ||
Line 73: | Line 87: | ||
* topSongs - melodiile dupa numarul de listen-uri | * topSongs - melodiile dupa numarul de listen-uri | ||
* topAlbums - albumele dupa numarul de listen-uri | * topAlbums - albumele dupa numarul de listen-uri | ||
- | * topPodcasts - podcast-urile dupa numarul de listen-uri | + | * topEpisodes - episoadele de podcast dupa numarul de listen-uri |
Mesaje posibile pentru aceasta comanda: | Mesaje posibile pentru aceasta comanda: | ||
Line 127: | Line 141: | ||
"Led Zeppelin IV": 1 | "Led Zeppelin IV": 1 | ||
}, | }, | ||
- | "topPodcasts": { | + | "topEpisodes": { |
"The Power of Design": 2, | "The Power of Design": 2, | ||
"The Science of Us": 1 | "The Science of Us": 1 | ||
Line 320: | Line 334: | ||
"username": "alice22", | "username": "alice22", | ||
"timestamp": 5, | "timestamp": 5, | ||
- | "message": "Ed Sheeran has added new merch successfully." | + | "message": "alice22 has added new merch successfully." |
} | } | ||
</code> | </code> | ||
Line 400: | Line 414: | ||
* ''%%"The username ${username} doesn't exist."%%'' | * ''%%"The username ${username} doesn't exist."%%'' | ||
* ''%%"${username} is not a premium user."%%'' | * ''%%"${username} is not a premium user."%%'' | ||
- | * ''%%"${username} canceled the subscription successfully."%%'' | + | * ''%%"${username} cancelled the subscription successfully."%%'' |
<spoiler Click pentru input cancel premium> | <spoiler Click pentru input cancel premium> | ||
Line 418: | Line 432: | ||
"username": "alice22", | "username": "alice22", | ||
"timestamp": 15, | "timestamp": 15, | ||
- | "message": "alice22 canceled the subscription successfully." | + | "message": "alice22 cancelled the subscription successfully." |
} | } | ||
</code> | </code> | ||
Line 427: | Line 441: | ||
<note important>Un user premium nu poate fi scos niciodata de pe platforma</note> | <note important>Un user premium nu poate fi scos niciodata de pe platforma</note> | ||
- | Un utilizator poate cumpara subscriptie premium la pretul unic de **1.000.000**, care va semnifica cat credit are pentru a plati artisti. Formula pentru a afla cat primeste fiecare artist este urmatoarea: | + | Un utilizator poate cumpara subscriptie premium la pretul unic de **1.000.000**, care va semnifica cat credit are pentru a plati artisti. La finalul fiecarei rularii, toti utilizatori care sunt premium vor adauga bani in contul artistilor de la care a ascultat. Formula pentru a afla cat primeste fiecare artist este urmatoarea: |
<html><img src="https://latex.codecogs.com/svg.image?val = \frac{10^6}{song_{total}}*song_{artist}" alt=""/></html> | <html><img src="https://latex.codecogs.com/svg.image?val = \frac{10^6}{song_{total}}*song_{artist}" alt=""/></html> | ||
Line 452: | Line 466: | ||
Pentru ca un utilizator free nu plateste deloc ca sa foloseasca aplicatia, va primi la momente predefinite ad-uri. Acestea vor fi adaugate in coada userului atunci cand va aparea comanda "adBreak" de la input. In acest caz, dupa terminarea melodiei curente, utilizatorul va avea de ascultat obligatoriu un ad care este unskippable. | Pentru ca un utilizator free nu plateste deloc ca sa foloseasca aplicatia, va primi la momente predefinite ad-uri. Acestea vor fi adaugate in coada userului atunci cand va aparea comanda "adBreak" de la input. In acest caz, dupa terminarea melodiei curente, utilizatorul va avea de ascultat obligatoriu un ad care este unskippable. | ||
- | Ad-ul este un cantec definite in library, si ar trebui sa functioneaza la fel ca un cantec normal doar ca nu se poate da skip la el. Totusi, un load il va suprascrie mereu. | + | Ad-ul este un cantec definite in library, si ar trebui sa functioneaze la fel ca un cantec normal doar ca nu se poate da skip la el. Totusi, un load il va suprascrie mereu. |
<note important>Ad-urile nu vor contribui la spotify wrapped</note> | <note important>Ad-urile nu vor contribui la spotify wrapped</note> | ||
Line 488: | Line 502: | ||
== Calcul monetizare == | == Calcul monetizare == | ||
- | Dupa ce asculta ad-ul, se vor calcula ultimele melodii ascultate intre ad-ul curent, si ultimul ad primit (sau inceputul istoricului), si artistii ai caror melodii a ascultat acel user vor primii valoarea urmatoare: | + | Atunci cand ad-ul intra in player, se vor calcula ultimele melodii ascultate intre ad-ul curent, si ultimul ad primit (sau inceputul istoricului), si artistii ai caror melodii a ascultat acel user vor primii valoarea urmatoare: |
<html><img src="https://latex.codecogs.com/svg.image?val = \frac{price_{ad}}{song_{last}}*song_{artist}" alt=""/></html> | <html><img src="https://latex.codecogs.com/svg.image?val = \frac{price_{ad}}{song_{last}}*song_{artist}" alt=""/></html> | ||
Line 495: | Line 509: | ||
* $val$ = valoarea de bani care se duce la **artistul respectiv** | * $val$ = valoarea de bani care se duce la **artistul respectiv** | ||
* $price_{ad}$ = cat valoareaza ad-ul respectiv | * $price_{ad}$ = cat valoareaza ad-ul respectiv | ||
- | * $song_{last}$ = numarul de cantece ascultate de catre userul premium | + | * $song_{last}$ = numarul de cantece ascultate de catre user de la ultimul adBreak pana la adBreak-ul curent |
* $song_{artist}$ = numarul de cantece ascultate de la artist | * $song_{artist}$ = numarul de cantece ascultate de la artist | ||
Line 530: | Line 544: | ||
* ''%%"The username ${username} doesn't exist."%%'' | * ''%%"The username ${username} doesn't exist."%%'' | ||
- | * ''%%"You can subscribe only to artists and hosts."%%'' | ||
* ''%%"To subscribe you need to be on the page of an artist or host."%%'' | * ''%%"To subscribe you need to be on the page of an artist or host."%%'' | ||
* ''%%"${username} (subscribed/unsubscribed) (to/from) ${artist/host} successfully."%%'' | * ''%%"${username} (subscribed/unsubscribed) (to/from) ${artist/host} successfully."%%'' | ||
Line 585: | Line 598: | ||
"username": "alice22", | "username": "alice22", | ||
"timestamp": 15, | "timestamp": 15, | ||
- | "result": [ | + | "notificarions": [ |
{ | { | ||
"name": "New Album", | "name": "New Album", | ||
Line 606: | Line 619: | ||
Fiecare utilizator normal va primii recomandari pentru melodii si playlist-uri, care vor fi afisate pe HomePage-ul acestuia. Pentru a le reda, utilizatorul trebuie sa primeasca comanda de //loadRecommendations//. | Fiecare utilizator normal va primii recomandari pentru melodii si playlist-uri, care vor fi afisate pe HomePage-ul acestuia. Pentru a le reda, utilizatorul trebuie sa primeasca comanda de //loadRecommendations//. | ||
+ | |||
+ | <note important>Se poate ca pentru utilizatorul pentru care s-a cerut recomandari sa nu se gaseasca nicio recomandare.</note> | ||
+ | |||
Output-ul pentru printarea HomePage-ului utilizatorului va avea urmatorul format:<html><br></html> | Output-ul pentru printarea HomePage-ului utilizatorului va avea urmatorul format:<html><br></html> | ||
Line 630: | Line 646: | ||
* alegerea random se va baza pe un **seed** reprezentat de cat a ascultat utilizatorul din melodia curenta | * alegerea random se va baza pe un **seed** reprezentat de cat a ascultat utilizatorul din melodia curenta | ||
- | <note important>Cand se cere o recomandare de tipul random song, se considera ca utilizatorul asculta o melodie si nu alt tip de fisier/colectie audio. Idem si pentru celelalte tipuri de recomandari. </note> | + | <note important>Cand se cere o recomandare, se considera ca utilizatorul asculta o melodie/playlist. </note> |
=== Adaugare recomandare Random Song === | === Adaugare recomandare Random Song === | ||
Line 848: | Line 864: | ||
<note important>Intr-o succesiune de comenzi back/foward, daca apare o comanda de ChangePage, atunci istoricul pentru foward va fi resetat.</note> | <note important>Intr-o succesiune de comenzi back/foward, daca apare o comanda de ChangePage, atunci istoricul pentru foward va fi resetat.</note> | ||
+ | |||
+ | <note tip>Noile optiuni pentru comanda changePage de ''%%Host%%''/''%%Artist%%'', te vor directiona catre pagina host-ului, respectiv artistului al carui fisier este la acel moment in playerul userului.</note> | ||
Cand se primeste comanda de | Cand se primeste comanda de |