Index: .idea/sqldialects.xml
===================================================================
--- .idea/sqldialects.xml	(revision c4c2edf5cb930fa6aecb7132493e92bf47a378ee)
+++ .idea/sqldialects.xml	(revision e1895286354e8450ee9d57754ab5b33e19b1ae94)
@@ -3,4 +3,5 @@
   <component name="SqlDialectMappings">
     <file url="file://$PROJECT_DIR$/music/constrains/constrains.sql" dialect="PostgreSQL" />
+    <file url="file://$PROJECT_DIR$/music/constrains/soft_delete.sql" dialect="PostgreSQL" />
     <file url="file://$PROJECT_DIR$/music/procedures/insert_track_with_price.sql" dialect="PostgreSQL" />
     <file url="file://$PROJECT_DIR$/music/triggers/customer_deletion.sql" dialect="PostgreSQL" />
Index: sic/constrains/constrains.sql
===================================================================
--- music/constrains/constrains.sql	(revision c4c2edf5cb930fa6aecb7132493e92bf47a378ee)
+++ 	(revision )
@@ -1,11 +1,0 @@
--- Default Media Type Constrain
-ALTER TABLE track
-ALTER COLUMN media_type_id SET DEFAULT 1;
-
-ALTER TABLE track
-DROP CONSTRAINT IF EXISTS track_media_type_id_fkey;
-
-ALTER TABLE track
-ADD CONSTRAINT track_media_type_id_fkey
-FOREIGN KEY (media_type_id) REFERENCES media_type(media_type_id)
-ON DELETE SET DEFAULT;
Index: music/constrains/general_constrains.sql
===================================================================
--- music/constrains/general_constrains.sql	(revision e1895286354e8450ee9d57754ab5b33e19b1ae94)
+++ music/constrains/general_constrains.sql	(revision e1895286354e8450ee9d57754ab5b33e19b1ae94)
@@ -0,0 +1,11 @@
+-- Default Media Type Constrain
+ALTER TABLE track
+ALTER COLUMN media_type_id SET DEFAULT 1;
+
+ALTER TABLE track
+DROP CONSTRAINT IF EXISTS track_media_type_id_fkey;
+
+ALTER TABLE track
+ADD CONSTRAINT track_media_type_id_fkey
+FOREIGN KEY (media_type_id) REFERENCES media_type(media_type_id)
+ON DELETE SET DEFAULT;
Index: music/constrains/soft_delete.sql
===================================================================
--- music/constrains/soft_delete.sql	(revision e1895286354e8450ee9d57754ab5b33e19b1ae94)
+++ music/constrains/soft_delete.sql	(revision e1895286354e8450ee9d57754ab5b33e19b1ae94)
@@ -0,0 +1,49 @@
+--ADDING DELETED_AT COLUMN
+DO $$
+DECLARE
+    r RECORD;
+BEGIN
+    FOR r IN
+        SELECT table_name
+        FROM information_schema.tables
+        WHERE table_schema = 'public'
+          AND table_type = 'BASE TABLE'
+    LOOP
+        EXECUTE format('ALTER TABLE public.%I ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP;', r.table_name);
+    END LOOP;
+END $$;
+
+--SOFT DELETE TRIGGER
+DO $$
+DECLARE
+    r RECORD;
+BEGIN
+    FOR r IN (
+        SELECT table_name
+        FROM information_schema.tables
+        WHERE table_schema = 'public'
+        AND table_type = 'BASE TABLE'
+    )
+    LOOP
+        EXECUTE format(
+            'CREATE OR REPLACE FUNCTION soft_delete_%I()
+             RETURNS TRIGGER AS $func$
+             BEGIN
+                 UPDATE %I SET deleted_at = NOW() WHERE ctid = OLD.ctid;
+                 RETURN NULL;
+             END;
+             $func$ LANGUAGE plpgsql;',
+            r.table_name, r.table_name
+        );
+
+        EXECUTE format(
+            'DROP TRIGGER IF EXISTS trg_soft_delete_%I ON %I;
+             CREATE TRIGGER trg_soft_delete_%I
+             BEFORE DELETE ON %I
+             FOR EACH ROW
+             EXECUTE FUNCTION soft_delete_%I();',
+            r.table_name, r.table_name, r.table_name, r.table_name, r.table_name
+        );
+    END LOOP;
+END $$;
+
