Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-ca-cd:teme:proiect:etapa3 [2023/12/26 14:15]
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:​** ​26.12.2023, ora 14:13 replaced topPodcasts and recalculted mostProfitableSong+     * 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 - fixed createPlaylist in test 12
     * 24.12.2023, ora 13:25 - removed field from test 10 and fixed message for notifications     * 24.12.2023, ora 13:25 - removed field from test 10 and fixed message for notifications
Line 21: 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 322: 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 429: 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 454: 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 490: 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 497: 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 532: 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 587: Line 598:
   "​username":​ "​alice22",​   "​username":​ "​alice22",​
   "​timestamp":​ 15,   "​timestamp":​ 15,
-  "result": [+  "notificarions": [
     {     {
       "​name":​ "New Album",​       "​name":​ "New Album",​
Line 608: 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 632: 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 850: 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
poo-ca-cd/teme/proiect/etapa3.1703592901.txt.gz · Last modified: 2023/12/26 14:15 by robert.grancsa
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0