This commit introduces comprehensive Album entity management following the established repository pattern used for other entities like AlbumType and SamplingRate. The Album entity includes relationships with AlbumType and AlbumArt entities. Key components implemented: Model Layer: - Album entity with complete field set: * Basic fields: id, name, year, numberOfDiscs, code, isCompilation * Foreign key relationships: AlbumType and AlbumArt (ManyToOne) * Audit timestamps: createdAt, updatedAt with JPA lifecycle hooks - JPA annotations with @PrePersist and @PreUpdate for automatic timestamps - Complete getters and setters Repository Layer: - AlbumRepository with EntityManager-based operations - Full transaction management with proper rollback handling - Methods: save, findAll, findById, update, deleteById Service Layer: - AlbumService with business logic and validation - Constructor injection of AlbumRepository, AlbumTypeRepository, AlbumArtRepository - Relationship handling: validates and sets AlbumType and AlbumArt entities - Input validation for null/empty name field - ID validation for all operations requiring entity lookup - Comprehensive logging using Log4j2 Mapper Layer: - AlbumMapper for bidirectional entity/protobuf conversion - Timestamp conversion between LocalDateTime and epoch milliseconds - Foreign key mapping for AlbumType and AlbumArt relationships - Null safety checks and validation - Proper handling of optional fields Action Handlers: - CreateAlbumHandler (album.create) - GetAlbumHandler (album.getAll) - GetAlbumByIdHandler (album.getById) - UpdateAlbumHandler (album.update) - DeleteAlbumHandler (album.delete) - HTTP status code handling: 200 (success), 400 (validation), 404 (not found), 500 (server error) - Handles optional fields with proper default value checks Protocol Buffers: - Fixed proto definition with correct Album fields - CreateAlbumRequest and UpdateAlbumRequest with all entity fields - All CRUD message definitions (Create, Get, GetById, Update, Delete) - Support for foreign keys and timestamps Service Registration: - AlbumRepository initialized with EntityManagerFactory - AlbumService registered with ServiceLocator with required dependencies - Ensures all Album action handlers can resolve dependencies The implementation follows best practices with proper error handling, logging, validation, relationship management, and consistency with existing codebase patterns. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> |
||
|---|---|---|
| src/main | ||
| .gitignore | ||
| COPYING | ||
| README.md | ||
| pom.xml | ||
README.md
MediaManager Core
A Java-based media management system that uses IPC (Inter-Process Communication) with named pipes and PostgreSQL for data persistence.
Features
- IPC communication using named pipes
- PostgreSQL database integration
- JPA/Hibernate for ORM
- Log4j 2 for logging
- HikariCP connection pooling
- Sample Media entity model
Prerequisites
- Java 17 or higher
- Maven 3.6+
- PostgreSQL 12 or higher
Project Structure
MediaManager-Core/
├── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── mediamanager/
│ │ ├── config/ # Configuration classes
│ │ ├── model/ # JPA entities
│ │ ├── repository/ # Data access layer
│ │ ├── service/ # Business logic
│ │ ├── ipc/ # IPC implementation
│ │ ├── util/ # Utility classes
│ │ └── MediaManagerApplication.java
│ └── resources/
│ ├── config.properties # App configuration
│ ├── log4j2.xml # Logging configuration
│ └── META-INF/
│ └── persistence.xml # JPA configuration
└── pom.xml
Setup
1. Database Setup
Create a PostgreSQL database and user:
CREATE DATABASE mediamanager;
CREATE USER mediamanager WITH PASSWORD 'changeme';
GRANT ALL PRIVILEGES ON DATABASE mediamanager TO mediamanager;
2. Configuration
Edit src/main/resources/config.properties and update the database credentials:
db.url=jdbc:postgresql://localhost:5432/mediamanager
db.username=mediamanager
db.password=your_password_here
3. Build the Project
mvn clean install
4. Run the Application
mvn exec:java -Dexec.mainClass="com.mediamanager.MediaManagerApplication"
Or build and run the JAR:
mvn clean package
java -jar target/MediaManager-Core-0.0.1-SNAPSHOT.jar
IPC Configuration
The application creates named pipes for inter-process communication. Default configuration:
- Pipe path:
/tmp/mediamanager - Pipe name:
mediamanager-pipe - Buffer size: 8192 bytes
You can modify these settings in config.properties.
Logging
Logs are written to:
- Console (STDOUT)
logs/mediamanager.log(rotating daily, max 10MB per file)
Log configuration can be modified in src/main/resources/log4j2.xml.
Development
Adding New Entities
- Create entity class in
com.mediamanager.model - Add the entity class to
persistence.xml - Create corresponding repository and service classes
Running Tests
mvn test
Dependencies
- PostgreSQL Driver: 42.7.5
- Hibernate ORM: 7.1.7.Final
- HikariCP: 5.1.0
- Log4j 2: 2.23.1
- Jackson: 2.16.1
- JUnit 5: 5.10.2
License
TBD
TODO
- Implement IPC server with named pipes
- Implement database connection manager
- Create repository layer
- Create service layer
- Add comprehensive tests
- Add API documentation