SongStorage

This project consists of developing a command-line tool that manages a storage folder of audio files and a metadata database, supporting add/delete/edit operations, searching, playlist archiving (“savelists”), and audio playback.

Phase 1: Storage Structure, DB Schema & CLI Validation

Set up Storage folder, persistent DB, and input validation.

  • Create DB schema (filename, artist, title, release date, tags, format)
  • Validate paths, audio types, and command syntax
  • Produce clear errors/logs

Functional Output: CLI accepts valid commands and updates the DB/Storage structure accordingly.


Phase 2: Add & Delete Song Operations

Implement safe file import and removal with metadata handling.

  • Copy audio file into Storage
  • Insert metadata + generated ID in DB
  • Delete file + DB entry by ID

Functional Output: Songs are added/removed consistently in both Storage and DB.


Phase 3: Metadata Modification

Implement selective metadata editing.

  • Update only specified fields
  • Validate formats (dates, tags)
  • Log operations and errors

Functional Output: Metadata for a song is updated accurately by ID.


Phase 4: Search Engine & Criteria System

Implement flexible search logic based on multiple filters.

  • Support field=condition pairs (artist=…, format=…, tags contain …)
  • Allow combining rules with AND
  • Return matching song metadata

Functional Output: Search returns correct matches for given criteria.


Phase 5: Savelist Creation (Archive Builder)

Create an archive containing songs matching search criteria.

  • Evaluate search rules
  • Collect matching files
  • Build custom archive (no compression required) with metadata index

Functional Output: A valid savelist archive is produced containing selected songs.


Phase 6: Playback Support, Logging & CLI Refinement

Add optional audio playback and finalize logging/UX.

  • Use 3rd-party library to play song by ID
  • Add detailed logs for all commands
  • Improve help, outputs, and error messages

Functional Output: Songs can be played; all operations are logged; user interacts with a polished CLI.