{"id":26780990,"url":"https://github.com/radutul/smart-stream-recommendation-system","last_synced_at":"2025-06-22T22:35:27.856Z","repository":{"id":283249187,"uuid":"951144839","full_name":"RaduTul/Smart-Stream-Recommendation-System","owner":"RaduTul","description":"Design Pattern task","archived":false,"fork":false,"pushed_at":"2025-03-19T08:35:24.000Z","size":112,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-29T07:19:41.035Z","etag":null,"topics":["command-pattern","design-patterns","factory-pattern","java","singleton-pattern","stream"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RaduTul.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-19T08:24:41.000Z","updated_at":"2025-03-19T08:35:28.000Z","dependencies_parsed_at":"2025-03-19T09:40:38.071Z","dependency_job_id":null,"html_url":"https://github.com/RaduTul/Smart-Stream-Recommendation-System","commit_stats":null,"previous_names":["radutul/smart-stream-recommendation-system"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/RaduTul/Smart-Stream-Recommendation-System","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RaduTul%2FSmart-Stream-Recommendation-System","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RaduTul%2FSmart-Stream-Recommendation-System/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RaduTul%2FSmart-Stream-Recommendation-System/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RaduTul%2FSmart-Stream-Recommendation-System/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RaduTul","download_url":"https://codeload.github.com/RaduTul/Smart-Stream-Recommendation-System/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RaduTul%2FSmart-Stream-Recommendation-System/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261380138,"owners_count":23149930,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-pattern","design-patterns","factory-pattern","java","singleton-pattern","stream"],"created_at":"2025-03-29T07:19:30.966Z","updated_at":"2025-06-22T22:35:22.846Z","avatar_url":"https://github.com/RaduTul.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Smart Stream Recommendation System\n\nAcest proiect implementează un sistem de recomandări pentru o platformă de streaming care gestionează muzică, podcast-uri și cărți audio. Sistemul administrează utilizatori, creatori de conținut și stream-uri de conținut. Proiectul pune in aplicare Design Patterns si ajuta la intelegerea acestora.\n\n## Prezentare generală a proiectului\n\nAplicația simulează o platformă de streaming cu următoarele funcționalități principale:\n- Gestionarea creatorilor de conținut (muzicieni, gazde de podcast, autori de cărți audio)\n- Gestionarea stream-urilor (melodii, podcast-uri, cărți audio)\n- Urmărirea istoricului de ascultare al utilizatorilor\n- Recomandări de stream-uri bazate pe streamerii ascultați anterior\n\n## Arhitectură și Design Patterns\n\nProiectul urmează principiile programării orientate pe obiecte și încorporează următoarele design patterns:\n\n### 1. Singleton Pattern\nPattern-ul Singleton este utilizat pentru a menține un depozit central de date prin intermediul clasei `Singleton`. Acesta asigură că există o singură instanță a magazinului de date care gestionează listele de streameri, stream-uri și utilizatori în întreaga aplicație.\n\n```java\npublic static Singleton getInstance() {\n    if (instance == null) {\n        instance = new Singleton();\n    }\n    return instance;\n}\n```\n\n### 2. Factory Pattern\nClasa `Factory` implementează pattern-ul Factory pentru a crea diferite tipuri de obiecte muzicale (Streamer, Streams, User) în funcție de tipul specificat. Acest pattern centralizează crearea obiectelor.\n\n```java\npublic Music Create(String tip, String[] date) {\n    if (tip.equals(\"Stream\")) {\n        // Creează obiect Stream\n    } else if (tip.equals(\"Streamer\")) {\n        // Creează obiect Streamer\n    } else if (tip.equals(\"User\")) {\n        // Creează obiect User\n    }\n    return null;\n}\n```\n\n### 3. Command Pattern\nClasa abstractă `Command` definește un contract pentru operațiile care pot fi executate în sistem. Clasa `Execute` extinde această clasă abstractă și oferă implementări concrete. Acest pattern încapsulează cererile ca obiecte.\n\n```java\nabstract class Command {\n    public abstract void ADD(String[] data);\n    public abstract void LIST(int data);\n    public abstract void DELETE(String[] data);\n    public abstract void LISTEN(String[] data);\n    public abstract void RECOMMEND(String[] data);\n    public abstract void SURPRISE(String[] data);\n}\n```\n\n### 4. Moștenire\nProiectul utilizează moștenirea, cu o clasă de bază `Music` care este extinsă de clasele `Streamer`, `Streams` și `User`. Clasa `Music` servește ca tip de bază comun pentru ierarhia de obiecte muzicale.\n\n## Funcționalitate implementată\n\n### Gestionarea Streaming-ului\n- **ADD**: Adaugă noi stream-uri pe platformă\n- **LIST**: Listează stream-urile asociate unui streamer sau utilizator\n- **DELETE**: Elimină stream-uri de pe platformă\n\n### Interacțiunea utilizatorilor\n- **LISTEN**: Urmărește când utilizatorii ascultă stream-uri și actualizează contoarele de ascultări\n- **RECOMMEND**: Recomandă stream-uri bazate pe streamerii ascultați anterior de utilizator\n\n## Algoritm de recomandare\n\n### Recomandări standard (RECOMMEND)\nAlgoritmul de recomandare implementat în cod:\n1. Identifică streamerii ascultați de utilizator\n2. Colectează stream-urile neascultat de utilizator de la acești streameri\n3. Sortează aceste stream-uri după numărul de ascultări \n4. Prezintă top 5 stream-uri\n\n## Structura datelor\n\nAplicația utilizează trei clase principale pentru a reprezenta entitățile:\n- **Streamer**: Reprezintă creatorii de conținut (muzicieni, gazde de podcast sau autori de cărți audio)\n- **Streams**: Reprezintă conținutul efectiv (melodii, episoade de podcast sau cărți audio)\n- **User**: Reprezintă utilizatorii platformei cu istoricul lor de ascultare\n\n## Detalii de implementare\n\nSistemul procesează date din fișiere CSV:\n- `streamers.csv`: Informații despre creatorii de conținut\n- `streams.csv`: Informații despre conținutul stream-urilor\n- `users.csv`: Informații despre utilizatori și istoricul lor de ascultare\n\nComenzile sunt procesate dintr-un fișier text (`commands.txt`) și urmează formate specifice pentru diferite operațiuni definite în cerințele proiectului.\n\n## Gestionarea timpului și a datelor\n\nSistemul gestionează informațiile despre timp și dată în formate specifice:\n- Duratele stream-urilor sunt afișate în format HH:MM:SS (sau MM:SS dacă durata este mai mică de o oră) prin metoda `displayTime`\n- Datele sunt formatate ca DD-MM-YYYY prin metoda `formatDate` care convertește timestamp-urile Unix\n\n## Format de ieșire\n\nSistemul generează date formatate JSON pentru comenzile LIST și de recomandare, urmând schema definită în specificațiile proiectului.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fradutul%2Fsmart-stream-recommendation-system","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fradutul%2Fsmart-stream-recommendation-system","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fradutul%2Fsmart-stream-recommendation-system/lists"}