ShowTVTime is a desktop application designed to manage media collections (Movies & Series) and foster user communities. The project focuses on Software Architecture, implementing a strictly decoupled 3-Layer Architecture and standard Design Patterns to solve business requirements like dynamic filtering and group management.
The main dashboard allows users to filter and sort media dynamically (Top 10, By IMDB Score, By Stars). This sorting logic is underpinned by the Strategy Pattern, allowing interchangeable algorithms at runtime.
Users can browse and join communities. Access to exclusive groups is gated by an Automated Admission System (Logic Challenge) that validates user knowledge before granting membership.
This project was built to demonstrate proficiency in Object-Oriented Design (SOLID) and structural organization:
The code is strictly separated into three layers to ensure maintainability:
- Presentation (View): Java Swing components handling UI events.
- Domain (Controller/Model): Contains the business rules (Ratings, User Management).
- Data (Persistence): Handles file-based storage, isolated from the rest of the app.
- ⚙️ Strategy Pattern: Applied to the Filtering Engine. It encapsulates the sorting logic (e.g.,
SortByIMDB,SortByRating), making the system easily extensible without modifying the main controller. - 🏢 Facade Pattern: Used to provide a simplified interface to the complex logic of the Domain layer, creating a clean entry point for the UI.
- 🏭 Factory Pattern: Manages the instantiation of entities (Movies, Series, Users), keeping the creation logic centralized.
- 🔒 Singleton Pattern: Ensures that critical controllers (like the
DomainController) have only one active instance throughout the application lifecycle.
- Validation Logic: Automated Q&A "Gatekeeper" system for group admission.
- Scoring System: Implementation of arithmetic mean algorithms to calculate global ratings based on user feedback.
- Data Persistence: Custom local storage system to save state between sessions (Users, Reviews, Groups).
- User Roles: Distinction between regular users and group members.
The repository includes a features/ directory containing Gherkin syntax files (.feature). These files are included to demonstrate the Requirement Engineering process and how the business rules were originally modeled.
⚠️ Note: These feature files serve as static documentation for the design process. They are not currently connected to an executable test runner in this specific version of the codebase.
- Clone the repository.
- Open the project in IntelliJ IDEA.
- Locate the
AppMain.javafile (Entry Point). - Run to launch the Java Swing GUI.

