<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bernard Borg</title>
    <description>The latest articles on DEV Community by Bernard Borg (@bernard_borg_dev).</description>
    <link>https://dev.to/bernard_borg_dev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3625888%2F9488684b-b232-4049-9887-15b107a58f17.jpg</url>
      <title>DEV Community: Bernard Borg</title>
      <link>https://dev.to/bernard_borg_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bernard_borg_dev"/>
    <language>en</language>
    <item>
      <title>Vinyl Tracker Project Overview</title>
      <dc:creator>Bernard Borg</dc:creator>
      <pubDate>Sun, 23 Nov 2025 16:48:52 +0000</pubDate>
      <link>https://dev.to/bernard_borg_dev/vinyl-tracker-project-overview-5bg2</link>
      <guid>https://dev.to/bernard_borg_dev/vinyl-tracker-project-overview-5bg2</guid>
      <description>&lt;h3&gt;
  
  
  by: Bernard Borg,
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Submitted in partial fulfillment to Codecademy Computer Science Track - Portfolio Project: Python Terminal Utility
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://github.com/bernard-thewagonltd/vinyl_tracker" rel="noopener noreferrer"&gt;Vinyl Tracker GitHub Repository&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;This is a Vinyl Record Library - a Python terminal application for managing personal vinyl collections.&lt;/p&gt;

&lt;p&gt;Key Features:&lt;/p&gt;

&lt;p&gt;User authentication with login system&lt;br&gt;
Add, search, edit, and delete vinyl records&lt;br&gt;
Sort collections by year, artist, genre, or date acquired&lt;br&gt;
JSON storage for persistence&lt;br&gt;
CSV import/export for data sharing and backups&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1bn3bd5op4tq5q1jk99.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1bn3bd5op4tq5q1jk99.gif" alt=" " width="760" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  STRUCTURE, CLASSES, FUNCTIONS, AND FILES
&lt;/h2&gt;

&lt;h2&gt;
  
  
  FILE STRUCTURE
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
├── VINYL_TRACKER
|   ├──     main.py - Entry point, login + main loop
|   ├──     auth.py - Authentication &amp;amp; User Manaegement (User class user creation from csv)
|   ├──     models.py - Data classes: User, Vinyl
|   ├──     collection.py - CRUD operations on vinyl records        
|   ├──     search.py - All search-related logic
|   ├──     sort_records.py - Sorting functions
|   ├──     storage_json.py - JSON save/load
|   ├──     storage_csv.py - CSV import/export
|   ├──     utils.py - Helpers: clear screen, input validation, etc.
|   ├──     user_manager.py - User creation, authentication, 
            and management
|   ├──     csv_handler.py - CSV import/export helpers

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  FLOW DIAGRAM
&lt;/h2&gt;

&lt;p&gt;! &lt;a href="https://github.com/bernard-thewagonltd/vinyl_tracker/blob/main/diagram-export-23-11-2025-15_40_33.png" rel="noopener noreferrer"&gt;Flow Diagram&lt;/a&gt;&lt;br&gt;
click to view    &lt;/p&gt;

&lt;h2&gt;
  
  
  DATA MODELS
&lt;/h2&gt;

&lt;p&gt;User Class&lt;br&gt;
    • username (string)&lt;br&gt;
    • password (string)&lt;/p&gt;

&lt;p&gt;Vinyl Class&lt;br&gt;
    • artist (string)&lt;br&gt;
    • album (string)&lt;br&gt;
    • year (string)&lt;br&gt;
    • genre (string)&lt;br&gt;
    • barcode (string)&lt;br&gt;
    • track_count (int)&lt;br&gt;
    • date_added (date)&lt;br&gt;
    • username (string) — owner of the record&lt;/p&gt;

&lt;h2&gt;
  
  
  ARCHITECTURE
&lt;/h2&gt;

&lt;p&gt;The project follows a modular structure with separate modules for different concerns:&lt;/p&gt;

&lt;p&gt;main.py - Entry point, login + main loop&lt;br&gt;
auth.py - Authentication &amp;amp; User Management&lt;br&gt;
models.py - Data classes: User, Vinyl&lt;br&gt;
collection.py - CRUD operations on vinyl records&lt;br&gt;
search.py - All search-related logic&lt;br&gt;
sort_records.py - Sorting functions&lt;br&gt;
storage_json.py - JSON save/load&lt;br&gt;
storage_csv.py - CSV import/export&lt;br&gt;
utils.py - Helpers: clear screen, input validation, etc.&lt;br&gt;
csv_handler.py - CSV import/export helpers&lt;/p&gt;

&lt;p&gt;All data is stored in lowercase for consistency and displayed in title case to users. The application provides both single-record detailed views and multi-record summary lists for efficient browsing.&lt;/p&gt;

&lt;h2&gt;
  
  
  PERISISTENCE
&lt;/h2&gt;

&lt;p&gt;Data is persisted in JSON files, one per user. CSV import/export is also supported for sharing and backups.&lt;/p&gt;

&lt;h2&gt;
  
  
  KEY DATA FLOWS:
&lt;/h2&gt;

&lt;p&gt;Login Flow: Main → Login → Authenticate → Find User → Load from JSON&lt;br&gt;
Collection Loading: JSON files → Vinyl objects (deserialization)&lt;br&gt;
Collection Saving: Vinyl objects → JSON files (serialization)&lt;br&gt;
Search Flow: Search Menu → Search → Handle Results → Display/Actions&lt;br&gt;
Single Record Actions: View → Edit/Delete → Save to JSON&lt;br&gt;
CSV Operations: Import/Export between CSV files and collection&lt;/p&gt;

&lt;h2&gt;
  
  
  IMPORTANT RELATIONSHIPS:
&lt;/h2&gt;

&lt;p&gt;The storage_json.py layer handles conversion between dictionaries and Vinyl objects&lt;br&gt;
Both list_vinyls and search results lead to single_record_actions for edit/delete&lt;br&gt;
The clear_screen utility is used throughout for better UX (shown with dotted lines)&lt;/p&gt;

&lt;h2&gt;
  
  
  VALIDATION
&lt;/h2&gt;

&lt;p&gt;Validation is implemented for all user inputs to ensure data integrity and quality. All validation functions follow the same pattern:&lt;/p&gt;




&lt;h4&gt;
  
  
  NOTICE: THIS PROJECT IS NOT COMPLETE. IT IS A WORK IN PROGRESS. AUTHENTICATION IS NOT IMPLEMENTED, AS PASSWORDS ARE JUST BEING STORED IN PLAIN TEXT. THIS IS A SECURITY RISK.
&lt;/h4&gt;




</description>
      <category>pages</category>
    </item>
  </channel>
</rss>
