{"id":32750566,"url":"https://github.com/anant-saini/me_object_modeling_jukebox","last_synced_at":"2026-05-18T05:43:08.544Z","repository":{"id":321292347,"uuid":"1085279308","full_name":"Anant-Saini/ME_OBJECT_MODELING_JUKEBOX","owner":"Anant-Saini","description":"Jukebox is a sophisticated music playlist management system built using object-oriented design principles in Java. The application allows users to create, manage, and play custom playlists with an intuitive command-based interface. This project demonstrates clean architecture, command pattern implementation, and robust exception handling.","archived":false,"fork":false,"pushed_at":"2025-10-28T20:48:19.000Z","size":172,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-28T22:31:59.689Z","etag":null,"topics":["clear-exception-handling","command-design-pattern","command-line-tool","core-java-application","dependency-injection","gradle","jukebox-player","object-oriented-programming","singleton-design-pattern","solid-design-principles"],"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/Anant-Saini.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-28T20:26:59.000Z","updated_at":"2025-10-28T20:51:42.000Z","dependencies_parsed_at":"2025-10-28T22:32:02.383Z","dependency_job_id":"bd2dc71c-5db5-40bf-8b09-88ac0783247f","html_url":"https://github.com/Anant-Saini/ME_OBJECT_MODELING_JUKEBOX","commit_stats":null,"previous_names":["anant-saini/me_object_modeling_jukebox"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Anant-Saini/ME_OBJECT_MODELING_JUKEBOX","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Anant-Saini%2FME_OBJECT_MODELING_JUKEBOX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Anant-Saini%2FME_OBJECT_MODELING_JUKEBOX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Anant-Saini%2FME_OBJECT_MODELING_JUKEBOX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Anant-Saini%2FME_OBJECT_MODELING_JUKEBOX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Anant-Saini","download_url":"https://codeload.github.com/Anant-Saini/ME_OBJECT_MODELING_JUKEBOX/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Anant-Saini%2FME_OBJECT_MODELING_JUKEBOX/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":282542839,"owners_count":26686795,"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","status":"online","status_checked_at":"2025-11-03T02:00:05.676Z","response_time":108,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["clear-exception-handling","command-design-pattern","command-line-tool","core-java-application","dependency-injection","gradle","jukebox-player","object-oriented-programming","singleton-design-pattern","solid-design-principles"],"created_at":"2025-11-03T23:01:05.740Z","updated_at":"2025-11-03T23:02:53.674Z","avatar_url":"https://github.com/Anant-Saini.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# 🎵 Jukebox - Music Playlist Management System\n\n![Java](https://img.shields.io/badge/Java-ED8B00?style=for-the-badge\u0026logo=java\u0026logoColor=white)\n![Gradle](https://img.shields.io/badge/Gradle-02303A?style=for-the-badge\u0026logo=gradle\u0026logoColor=white)\n![Build Status](https://img.shields.io/badge/build-passing-brightgreen?style=for-the-badge)\n\n## 📋 Project Overview\n\nJukebox is a sophisticated music playlist management system built using object-oriented design principles in Java. The application allows users to create, manage, and play custom playlists with an intuitive command-based interface. This project demonstrates clean architecture, command pattern implementation, and robust exception handling.\n\n## ✨ Features\n\n- **User Management**: Create and manage multiple user profiles\n- **Playlist Operations**: Create, modify, delete, and play playlists\n- **Song Management**: Load songs from CSV, search and play individual tracks\n- **Command Pattern**: Extensible command-based architecture for easy feature addition\n- **Data Persistence**: Load song data from CSV files\n- **Exception Handling**: Comprehensive custom exceptions for better error management\n\n## 🏗️ Architecture\n\nThe project follows a layered architecture with clear separation of concerns:\n\n### Core Packages\n\n```\ncom.crio.jukebox/\n├── appConfig/          # Application configuration\n│   └── AppConfig.java\n├── commands/           # Command pattern implementations\n│   ├── ICommand.java\n│   ├── CommandInvoker.java\n│   ├── CreateUserCommand.java\n│   ├── CreatePlayListCommand.java\n│   ├── ModifyPlayListCommand.java\n│   ├── DeletePlayListCommand.java\n│   ├── PlayPlayListCommand.java\n│   ├── PlaySongCommand.java\n│   └── LoadDataCommand.java\n├── entities/           # Domain models\n│   ├── BaseEntity.java\n│   ├── User.java\n│   ├── Song.java\n│   ├── PlayList.java\n│   └── PlayListStatus.java\n├── repositories/       # Data access layer\n│   ├── CRUDRepository.java\n│   ├── UserRepository.java\n│   ├── SongRepository.java\n│   └── PlayListRepository.java\n├── services/          # Business logic layer\n│   ├── UserService.java\n│   ├── SongService.java\n│   └── PlayListService.java\n└── exceptions/        # Custom exceptions\n    ├── UserNotFoundException.java\n    ├── SongNotFoundException.java\n    ├── PlayListNotFoundException.java\n    ├── PlayListIsEmptyException.java\n    ├── ActivePlayListNotFoundException.java\n    ├── SongNotFoundInPlayListException.java\n    ├── CommandNotFoundException.java\n    ├── InvalidCommandException.java\n    └── CSVFileLoadingException.java\n```\n\n## 🎯 Key Components\n\n### Commands\n\nImplements the **Command Design Pattern** for extensible functionality:\n\n- `CreateUserCommand` - Creates new user profiles\n- `CreatePlayListCommand` - Creates custom playlists\n- `ModifyPlayListCommand` - Add/remove songs from playlists\n- `DeletePlayListCommand` - Remove playlists\n- `PlayPlayListCommand` - Play songs from a playlist\n- `PlaySongCommand` - Play individual songs\n- `LoadDataCommand` - Load song data from CSV files\n\n### Entities\n\nCore domain models representing the system's data:\n\n- `User` - User profile information\n- `Song` - Song metadata (name, genre, album, artist)\n- `PlayList` - Collection of songs belonging to a user\n- `PlayListStatus` - Enumeration for playlist states\n\n### Services\n\nBusiness logic layer implementing core functionality:\n\n- `UserService` - User management operations\n- `SongService` - Song catalog management\n- `PlayListService` - Playlist operations and playback\n\n### Repositories\n\nData access layer with CRUD operations:\n\n- Generic `CRUDRepository` interface\n- Concrete implementations for Users, Songs, and Playlists\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Java 8 or higher\n- Gradle 6.x or higher\n\n### Installation\n\n1. **Clone the repository**\n\n   ```bash\n   git clone \u003crepository-url\u003e\n   cd jukebox\n   ```\n2. **Build the project**\n\n   ```bash\n   ./gradlew build\n   ```\n3. **Run the application**\n\n   ```bash\n   ./gradlew run\n   ```\n\n   Or run directly:\n\n   ```bash\n   java -jar build/libs/jukebox.jar\n   ```\n\n## 📖 Usage\n\nThe application supports the following commands:\n\n### Load Data\n\n```\nLOAD-DATA \u003ccsv-file-path\u003e\n```\n\nLoad songs from a CSV file into the system.\n\n### Create User\n\n```\nCREATE-USER \u003cuser-name\u003e\n```\n\nCreate a new user profile.\n\n### Create Playlist\n\n```\nCREATE-PLAYLIST \u003cuser-id\u003e \u003cplaylist-name\u003e \u003csong-id-1\u003e \u003csong-id-2\u003e ...\n```\n\nCreate a new playlist for a user with specified songs.\n\n### Modify Playlist\n\n```\nMODIFY-PLAYLIST \u003cplaylist-id\u003e \u003cADD/DELETE\u003e \u003csong-id\u003e\n```\n\nAdd or remove songs from an existing playlist.\n\n### Delete Playlist\n\n```\nDELETE-PLAYLIST \u003cuser-id\u003e \u003cplaylist-id\u003e\n```\n\nDelete a user's playlist.\n\n### Play Playlist\n\n```\nPLAY-PLAYLIST \u003cuser-id\u003e \u003cplaylist-id\u003e\n```\n\nPlay songs from a specific playlist.\n\n### Play Song\n\n```\nPLAY-SONG \u003cuser-id\u003e \u003csong-id\u003e\n```\n\nPlay a specific song.\n\n## 📊 Sample Data Format\n\nSongs CSV format:\n\n```csv\nid,name,genre,album,artist\n1,Song Name,Pop,Album Name,Artist Name\n```\n\n## 🧪 Testing\n\nRun the test suite:\n\n```bash\n./gradlew test\n```\n\nRun with coverage:\n\n```bash\n./gradlew test jacocoTestReport\n```\n\n## 🔧 Configuration\n\nThe application can be configured through the `AppConfig.java` file:\n\n- Default data file paths\n- Repository implementations\n- Service configurations\n\n## 🤝 Contributing\n\nContributions are welcome! Please follow these steps:\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## 📝 Design Patterns Used\n\n- **Command Pattern**: Encapsulates commands as objects for flexible execution\n- **Repository Pattern**: Abstracts data access logic\n- **Service Layer Pattern**: Separates business logic from presentation\n- **Singleton Pattern**: Used in repository and service management\n\n## 🎓 Learning Outcomes\n\nThis project demonstrates:\n\n- Clean code principles and SOLID design\n- Object-oriented programming best practices\n- Design pattern implementation\n- Layered architecture design\n- Exception handling strategies\n- CSV data processing\n- Command-line interface design\n\n## 📄 License\n\nThis project is part of Crio.Do's learning platform.\n\n## 👥 Authors\n\nDeveloped as part of the Object Modeling module at Crio.Do\n\n## 🙏 Acknowledgments\n\n- Crio.Do for the project framework\n- Java community for best practices guidance\n\n---\n\n**Built with ❤️ using Java and Gradle**\n=====================================\n\n*Last Updated: October 2025*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanant-saini%2Fme_object_modeling_jukebox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanant-saini%2Fme_object_modeling_jukebox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanant-saini%2Fme_object_modeling_jukebox/lists"}