Index: .idea/sqldialects.xml
===================================================================
--- .idea/sqldialects.xml	(revision da2058e8143fa9f5ea3a13cd627153d96c156af1)
+++ .idea/sqldialects.xml	(revision 01158a5be9da31bda5dbe9834332f51dc7988ae0)
@@ -2,26 +2,27 @@
 <project version="4">
   <component name="SqlDialectMappings">
-    <file url="file://$PROJECT_DIR$/music/constrains/general_constrains.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/constrains/soft_delete.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/normalization/personal_info.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/procedures/insert_track_with_price.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/transactions/add_tracks_to_playlist.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/transactions/batch_update_reports_to.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/transactions/create_invoice_with_lines.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/triggers/customer_deletion.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/triggers/media_type_deletion.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/triggers/normalize_and_validate_customer_email.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/triggers/prevent_artist_deletion.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/triggers/prevent_genre_deletion.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/triggers/prevent_price_deletion.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/triggers/update_invoice_total_after_delete.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/triggers/update_invoice_total_after_insert.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/views/avg_price_per_artist.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/views/avg_song_duration_per_artist.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/views/media_type_percentage.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/views/most_listened_genre_per_customer.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/views/rang_list_most_active_customers_view.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/views/rank_list_artists.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/music/views/tracks_count_per_genre.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/constrains/general_constrains.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/constrains/soft_delete.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/normalization/personal_info.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/procedures/insert_track_with_price.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/transactions/add_tracks_to_playlist.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/transactions/batch_update_reports_to.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/transactions/create_invoice_with_lines.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/triggers/media_type_deletion.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/triggers/merge_invoice_line.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/triggers/normalize_and_validate_customer_email.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/triggers/prevent_artist_deletion.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/triggers/prevent_genre_deletion.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/triggers/prevent_price_deletion.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/triggers/update_invoice_total_after_delete.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/triggers/update_invoice_total_after_insert.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/triggers/upsert_price.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/views/avg_price_per_artist.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/views/avg_song_duration_per_artist.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/views/media_type_percentage.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/views/most_listened_genre_per_customer.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/views/rang_list_most_active_customers_view.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/views/rank_list_artists.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/SQL/views/tracks_count_per_genre.sql" dialect="PostgreSQL" />
     <file url="PROJECT" dialect="PostgreSQL" />
   </component>
Index: SQL/transactions/add_tracks_to_playlist.sql
===================================================================
--- SQL/transactions/add_tracks_to_playlist.sql	(revision da2058e8143fa9f5ea3a13cd627153d96c156af1)
+++ SQL/transactions/add_tracks_to_playlist.sql	(revision 01158a5be9da31bda5dbe9834332f51dc7988ae0)
Index: L/triggers/customer_deletion.sql
===================================================================
--- SQL/triggers/customer_deletion.sql	(revision da2058e8143fa9f5ea3a13cd627153d96c156af1)
+++ 	(revision )
@@ -1,31 +1,0 @@
-DROP TRIGGER IF EXISTS trg_customer_deletion ON customer;
-DROP FUNCTION IF EXISTS customer_deletion();
-
-CREATE OR REPLACE FUNCTION customer_deletion()
-RETURNS TRIGGER AS $$
-DECLARE
-    total_spent NUMERIC(10, 2);
-    invoice_count INTEGER;
-BEGIN
-    SELECT COALESCE(SUM(total), 0), COUNT(*)
-    INTO total_spent, invoice_count
-    FROM invoice
-    WHERE customer_id = OLD.customer_id;
-
-    INSERT INTO deleted_customer_log (
-        first_name, last_name, deleted_at, total_spent, invoice_count
-    )
-    VALUES (
-        OLD.first_name, OLD.last_name, NOW(), total_spent, invoice_count
-    );
-
-    RETURN OLD;
-END;
-$$ LANGUAGE plpgsql;
-
-DROP TRIGGER IF EXISTS trg_customer_deletion ON customer;
-
-CREATE TRIGGER trg_customer_deletion
-BEFORE DELETE ON customer
-FOR EACH ROW
-EXECUTE FUNCTION customer_deletion();
Index: SQL/triggers/merge_invoice_line.sql
===================================================================
--- SQL/triggers/merge_invoice_line.sql	(revision 01158a5be9da31bda5dbe9834332f51dc7988ae0)
+++ SQL/triggers/merge_invoice_line.sql	(revision 01158a5be9da31bda5dbe9834332f51dc7988ae0)
@@ -0,0 +1,31 @@
+CREATE OR REPLACE FUNCTION merge_invoice_line()
+RETURNS TRIGGER AS $$
+
+BEGIN
+    IF EXISTS (
+        SELECT 1
+        FROM invoice_line
+        WHERE invoice_id = NEW.invoice_id
+          AND track_id = NEW.track_id
+    ) THEN
+        UPDATE invoice_line
+        SET quantity = quantity + NEW.quantity
+        WHERE invoice_id = NEW.invoice_id
+          AND track_id = NEW.track_id;
+
+        RETURN NULL;
+    END IF;
+
+    RETURN NEW;
+END;
+$$ LANGUAGE plpgsql;
+
+
+CREATE TRIGGER trg_merge_invoice_line
+BEFORE INSERT ON invoice_line
+FOR EACH ROW
+EXECUTE FUNCTION merge_invoice_line();
+
+
+
+
Index: SQL/triggers/normalize_and_validate_customer_email.sql
===================================================================
--- SQL/triggers/normalize_and_validate_customer_email.sql	(revision da2058e8143fa9f5ea3a13cd627153d96c156af1)
+++ SQL/triggers/normalize_and_validate_customer_email.sql	(revision 01158a5be9da31bda5dbe9834332f51dc7988ae0)
Index: SQL/triggers/upsert_price.sql
===================================================================
--- SQL/triggers/upsert_price.sql	(revision 01158a5be9da31bda5dbe9834332f51dc7988ae0)
+++ SQL/triggers/upsert_price.sql	(revision 01158a5be9da31bda5dbe9834332f51dc7988ae0)
@@ -0,0 +1,27 @@
+CREATE OR REPLACE FUNCTION upsert_price()
+RETURNS TRIGGER AS $$
+BEGIN
+    IF EXISTS (
+        SELECT 1
+        FROM Price p
+        WHERE p.track_id = NEW.track_id
+          AND p.date = NEW.date
+    ) THEN
+        UPDATE Price
+        SET value = NEW.value
+        WHERE track_id = NEW.track_id
+          AND date = NEW.date;
+
+        RETURN NULL;
+    END IF;
+
+    RETURN NEW;
+END;
+$$ LANGUAGE plpgsql;
+
+CREATE TRIGGER trg_upsert_price
+BEFORE INSERT ON Price
+FOR EACH ROW
+EXECUTE FUNCTION upsert_price();
+
+
