diff --git a/Design/DB_STRUCTURE/Logical.svg b/Design/DB_STRUCTURE/Logical.svg
deleted file mode 100644
index 8174878..0000000
--- a/Design/DB_STRUCTURE/Logical.svg
+++ /dev/null
@@ -1,276 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/Relational.svg b/Design/DB_STRUCTURE/Relational.svg
deleted file mode 100644
index b073c52..0000000
--- a/Design/DB_STRUCTURE/Relational.svg
+++ /dev/null
@@ -1,554 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Playlist
-
-
-
-*
-
-
-P
-
-
-playlist_unique_id
-
-
-VARCHAR2 (256 CHAR)
-
-
-*
-
-
-playlist_id
-
-
-VARCHAR2 (256 CHAR)
-
-
-
-
-
-number_elements
-
-
-INTEGER
-
-
-
-
-
-times_requested
-
-
-INTEGER
-
-
-
-
-
-playlist_quality
-
-
-INTEGER
-
-
-
-
-
-playlist_format
-
-
-INTEGER
-
-
-
-
-Playlist_PK (playlist_unique_id)
-
-
-
-
-
-Statistics
-
-
-
-
-
-
-lang
-
-
-VARCHAR2 (5 CHAR)
-
-
-
-
-
-downloads
-
-
-INTEGER
-
-
-
-
-
-last_time_active
-
-
-DATE
-
-
-*
-
-
-F
-
-
-User_user_id
-
-
-INTEGER
-
-
-
-
-Statistics_User_FK (User_user_id)
-
-
-
-U
-
-
-Statistics__IDX (User_user_id)
-
-
-
-
-
-User
-
-
-
-*
-
-
-P
-
-
-user_id
-
-
-INTEGER
-
-
-
-
-
-username
-
-
-VARCHAR2 (45 CHAR)
-
-
-
-
-
-name
-
-
-CLOB
-
-
-
-
-
-first_use
-
-
-DATE
-
-
-
-
-User_PK (user_id)
-
-
-
-
-
-Music
-
-
-
-*
-
-
-P
-
-
-file_id
-
-
-VARCHAR2 (256 CHAR)
-
-
-
-
-
-video_id
-
-
-VARCHAR2 (20 CHAR)
-
-
-
-
-
-audio_quality
-
-
-INTEGER
-
-
-
-
-
-audio_format
-
-
-INTEGER
-
-
-
-
-
-times_requested
-
-
-INTEGER
-
-
-
-
-
-is_metadata_by_user
-
-
-CHAR (1)
-
-
-
-
-Music_PK (file_id)
-
-
-
-
-
-Playlist_has_Music
-
-
-
-*
-
-
-PF
-
-
-playlist_unique_id
-
-
-VARCHAR2 (256 CHAR)
-
-
-*
-
-
-PF
-
-
-Music_file_id
-
-
-VARCHAR2 (256 CHAR)
-
-
-
-
-Playlist_has_Music_PK (Music_file_id, playlist_unique_id)
-
-
-
-
-Playlist_has_Music_Playlist_FK (playlist_unique_id)
-
-
-
-Playlist_has_Music_Music_FK (Music_file_id)
-
-
-
-
-
-Preferences
-
-
-
-
-
-
-audio_quality
-
-
-VARCHAR2 (5 CHAR)
-
-
-
-
-
-audio_format
-
-
-VARCHAR2 (5 CHAR)
-
-
-
-
-
-os
-
-
-VARCHAR2 (10 CHAR)
-
-
-
-
-
-should_ask_metadata
-
-
-CHAR (1)
-
-
-*
-
-
-F
-
-
-User_user_id
-
-
-INTEGER
-
-
-
-
-Preferences_User_FK (User_user_id)
-
-
-
-U
-
-
-Preferences__IDX (User_user_id)
-
-
-
-
-
-Metadata
-
-
-
-
-
-
-title
-
-
-VARCHAR2 (256 CHAR)
-
-
-
-
-
-artist
-
-
-VARCHAR2 (256 CHAR)
-
-
-
-
-
-cover
-
-
-CLOB
-
-
-
-
-
-duration
-
-
-VARCHAR2 (20 CHAR)
-
-
-*
-
-
-F
-
-
-Music_file_id
-
-
-VARCHAR2 (256 CHAR)
-
-
-
-
-Metadata_Music_FK (Music_file_id)
-
-
-
-U
-
-
-Metadata__IDX (Music_file_id)
-
-
-
-
-
-History
-
-
-
-*
-
-
-PF
-
-
-User_user_id
-
-
-INTEGER
-
-
-*
-
-
-PF
-
-
-Music_file_id
-
-
-VARCHAR2 (256 CHAR)
-
-
-
-
-History_PK (User_user_id, Music_file_id)
-
-
-
-
-History_User_FK (User_user_id)
-
-
-
-History_Music_FK (Music_file_id)
-
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design.dmd b/Design/DB_STRUCTURE/database_design.dmd
deleted file mode 100644
index 56c7fe3..0000000
--- a/Design/DB_STRUCTURE/database_design.dmd
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:24:29 UTC
-database_design
-false
-3C168D0F-3177-9281-C715-B5AB03BB32C4
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/ChangeRequests.local b/Design/DB_STRUCTURE/database_design/ChangeRequests.local
deleted file mode 100644
index 647e766..0000000
--- a/Design/DB_STRUCTURE/database_design/ChangeRequests.local
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/Design/DB_STRUCTURE/database_design/businessinfo/Business Information.xml b/Design/DB_STRUCTURE/database_design/businessinfo/Business Information.xml
deleted file mode 100644
index 0efdef7..0000000
--- a/Design/DB_STRUCTURE/database_design/businessinfo/Business Information.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:24:30 UTC
-database_design
-false
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/businessinfo/Objects.local b/Design/DB_STRUCTURE/database_design/businessinfo/Objects.local
deleted file mode 100644
index d8a4386..0000000
--- a/Design/DB_STRUCTURE/database_design/businessinfo/Objects.local
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/Design/DB_STRUCTURE/database_design/datatypes/DDLSelection.local b/Design/DB_STRUCTURE/database_design/datatypes/DDLSelection.local
deleted file mode 100644
index 0030592..0000000
--- a/Design/DB_STRUCTURE/database_design/datatypes/DDLSelection.local
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/Design/DB_STRUCTURE/database_design/datatypes/DataTypes.xml b/Design/DB_STRUCTURE/database_design/datatypes/DataTypes.xml
deleted file mode 100644
index 542e77f..0000000
--- a/Design/DB_STRUCTURE/database_design/datatypes/DataTypes.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:24:30 UTC
-database_design
-false
-array_ref_
-array_
-10
-ARRAY
-_Array
-inst_
-ref_
-true
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/datatypes/Diagrams.local b/Design/DB_STRUCTURE/database_design/datatypes/Diagrams.local
deleted file mode 100644
index c1f552c..0000000
--- a/Design/DB_STRUCTURE/database_design/datatypes/Diagrams.local
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/Design/DB_STRUCTURE/database_design/datatypes/Objects.local b/Design/DB_STRUCTURE/database_design/datatypes/Objects.local
deleted file mode 100644
index aedbb26..0000000
--- a/Design/DB_STRUCTURE/database_design/datatypes/Objects.local
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/Design/DB_STRUCTURE/database_design/datatypes/structuredtype/seg_0/47E390DE-0671-C4B1-8428-0F45CBEE18F8.xml b/Design/DB_STRUCTURE/database_design/datatypes/structuredtype/seg_0/47E390DE-0671-C4B1-8428-0F45CBEE18F8.xml
deleted file mode 100644
index 3013800..0000000
--- a/Design/DB_STRUCTURE/database_design/datatypes/structuredtype/seg_0/47E390DE-0671-C4B1-8428-0F45CBEE18F8.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:24:30 UTC
-database_design
-false
-true
-false
-true
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/datatypes/structuredtype/seg_0/F72C39E0-D1CA-8821-2AD7-A1E95A37D3D1.xml b/Design/DB_STRUCTURE/database_design/datatypes/structuredtype/seg_0/F72C39E0-D1CA-8821-2AD7-A1E95A37D3D1.xml
deleted file mode 100644
index a6fb615..0000000
--- a/Design/DB_STRUCTURE/database_design/datatypes/structuredtype/seg_0/F72C39E0-D1CA-8821-2AD7-A1E95A37D3D1.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:24:30 UTC
-database_design
-false
-true
-false
-true
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/datatypes/subviews/CFDE5FC8-D6A4-DF2D-FAA9-F1FC327377FA.xml b/Design/DB_STRUCTURE/database_design/datatypes/subviews/CFDE5FC8-D6A4-DF2D-FAA9-F1FC327377FA.xml
deleted file mode 100644
index ba94c3b..0000000
--- a/Design/DB_STRUCTURE/database_design/datatypes/subviews/CFDE5FC8-D6A4-DF2D-FAA9-F1FC327377FA.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-Javier Alonso Silva
-Javier Alonso Silva
-2018-06-18 14:24:30 UTC
-false
-true
-false
-true
-false
-false
-false
--1
-false
-1
-
-
-false
-
-
-
-false
-
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/dl_settings.xml b/Design/DB_STRUCTURE/database_design/dl_settings.xml
deleted file mode 100644
index 2bee852..0000000
--- a/Design/DB_STRUCTURE/database_design/dl_settings.xml
+++ /dev/null
@@ -1,434 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/dmd_open.local b/Design/DB_STRUCTURE/database_design/dmd_open.local
deleted file mode 100644
index ed28034..0000000
--- a/Design/DB_STRUCTURE/database_design/dmd_open.local
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/Diagrams.local b/Design/DB_STRUCTURE/database_design/logical/Diagrams.local
deleted file mode 100644
index ba42f49..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/Diagrams.local
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/Design/DB_STRUCTURE/database_design/logical/Logical.xml b/Design/DB_STRUCTURE/database_design/logical/Logical.xml
deleted file mode 100644
index 7dc2c30..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/Logical.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:24:29 UTC
-database_design
-false
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/Objects.local b/Design/DB_STRUCTURE/database_design/logical/Objects.local
deleted file mode 100644
index da73ab3..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/Objects.local
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/1558C95F-4CEC-1E30-AA15-58B7C6ACD81B.xml b/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/1558C95F-4CEC-1E30-AA15-58B7C6ACD81B.xml
deleted file mode 100644
index 10dc797..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/1558C95F-4CEC-1E30-AA15-58B7C6ACD81B.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:34:31 UTC
-database_design
-
-
-
-NO
-0
-Single Table
-0
-Year
-9999999
-0
-Third
-
-
-Javier Alonso Silva
-2018-06-18 14:34:36 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT024
-256 CHAR
-256 CHAR,,
-
-
-Javier Alonso Silva
-2018-06-18 14:34:47 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT024
-256 CHAR
-256 CHAR,,
-
-
-Javier Alonso Silva
-2018-06-18 14:34:59 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT040
-,,
-
-
-Javier Alonso Silva
-2018-06-18 14:35:02 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT024
-20 CHAR
-20 CHAR,,
-
-
-Javier Alonso Silva
-2018-06-18 14:43:05 UTC
-46906DFA-66DD-2DD5-790C-7A87FFE7755C
-database_design
-
-
-
-CAFF56A3-E241-F64F-19BE-CEA2E258C602
-false
-
-LOGDT024
-256 CHAR
-,,
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/312E0255-FAA7-1630-54E5-A4FCB50F6276.xml b/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/312E0255-FAA7-1630-54E5-A4FCB50F6276.xml
deleted file mode 100644
index 096bae2..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/312E0255-FAA7-1630-54E5-A4FCB50F6276.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:29:16 UTC
-database_design
-
-
-
-NO
-0
-Single Table
-0
-Year
-9999999
-0
-Third
-
-
-Javier Alonso Silva
-2018-06-18 14:29:24 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT024
-5 CHAR
-5 CHAR,,
-
-
-Javier Alonso Silva
-2018-06-18 14:29:37 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT024
-5 CHAR
-5 CHAR,,
-
-
-Javier Alonso Silva
-2018-06-18 14:29:54 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT024
-10 CHAR
-10 CHAR,,
-
-
-Javier Alonso Silva
-2018-06-18 14:30:07 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT006
-1 BYTE
-1 BYTE,,
-
-
-Javier Alonso Silva
-2018-06-18 14:43:31 UTC
-C49FD692-24A0-3030-2280-A4D5B8CDFC01
-database_design
-
-
-
-8775EFB1-2319-5282-E470-92105C133D68
-false
-
-LOGDT011
-,,
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/52FEBBBF-C76E-AEF4-45C5-3341E59BD946.xml b/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/52FEBBBF-C76E-AEF4-45C5-3341E59BD946.xml
deleted file mode 100644
index 7392b41..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/52FEBBBF-C76E-AEF4-45C5-3341E59BD946.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:37:34 UTC
-database_design
-
-
-
-NO
-0
-Single Table
-0
-Year
-9999999
-0
-Third
-
-
-Javier Alonso Silva
-2018-06-23 10:18:07 UTC
-database_design
-
-
-
-false
-
-LOGDT024
-256 CHAR
-256 CHAR,,
-
-
-Javier Alonso Silva
-2018-06-18 14:37:39 UTC
-database_design
-
-
-
-false
-
-LOGDT024
-256 CHAR
-256 CHAR,,
-
-
-Javier Alonso Silva
-2018-06-18 14:38:11 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT011
-,,
-
-
-Javier Alonso Silva
-2018-06-18 14:39:24 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT011
-,,
-
-
-Javier Alonso Silva
-2018-06-20 19:10:08 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT011
-,,
-
-
-Javier Alonso Silva
-2018-06-20 19:10:24 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT011
-,,
-
-
-
-
-Javier Alonso Silva
-2018-06-18 14:38:08 UTC
-database_design
-false
-
-
-
-true
-
-ADCC2E08-E4C7-1BEB-5C48-EFD99B682848
-
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/96125017-F1D2-153D-CBAC-D12E0939CF4E.xml b/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/96125017-F1D2-153D-CBAC-D12E0939CF4E.xml
deleted file mode 100644
index 8558eb3..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/96125017-F1D2-153D-CBAC-D12E0939CF4E.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:28:40 UTC
-database_design
-
-
-
-NO
-0
-Single Table
-0
-Year
-9999999
-0
-Third
-
-
-Javier Alonso Silva
-2018-06-18 14:28:44 UTC
-database_design
-
-
-
-false
-
-LOGDT011
-,,
-
-
-Javier Alonso Silva
-2018-06-18 14:28:57 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT024
-45 CHAR
-45 CHAR,,
-
-
-Javier Alonso Silva
-2018-06-18 14:29:07 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT040
-,,
-
-
-Javier Alonso Silva
-2018-06-23 11:11:47 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT008
-,,
-
-
-
-
-Javier Alonso Silva
-2018-06-18 14:28:55 UTC
-database_design
-false
-
-
-
-true
-
-8775EFB1-2319-5282-E470-92105C133D68
-
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/B1A287E6-50CA-DB8B-0AAD-60C303A2A402.xml b/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/B1A287E6-50CA-DB8B-0AAD-60C303A2A402.xml
deleted file mode 100644
index 8497d69..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/B1A287E6-50CA-DB8B-0AAD-60C303A2A402.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-19 17:05:14 UTC
-database_design
-
-
-
-NO
-0
-Single Table
-0
-Year
-9999999
-0
-Third
-
-
-Javier Alonso Silva
-2018-06-19 17:05:22 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT024
-5 CHAR
-5 CHAR,,
-
-
-Javier Alonso Silva
-2018-06-19 17:05:36 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT011
-,,
-
-
-Javier Alonso Silva
-2018-06-19 17:05:55 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT007
-,,
-
-
-Javier Alonso Silva
-2018-06-19 17:07:24 UTC
-B934A368-41CA-2247-7505-4DDD707ADAB7
-database_design
-
-
-
-8775EFB1-2319-5282-E470-92105C133D68
-false
-
-LOGDT011
-,,
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/FB782D70-50E0-0A98-4654-5E94050F8458.xml b/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/FB782D70-50E0-0A98-4654-5E94050F8458.xml
deleted file mode 100644
index 337593d..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/entity/seg_0/FB782D70-50E0-0A98-4654-5E94050F8458.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:30:33 UTC
-database_design
-
-
-
-NO
-0
-Single Table
-0
-Year
-9999999
-0
-Third
-
-
-Javier Alonso Silva
-2018-06-18 14:30:37 UTC
-database_design
-
-
-
-false
-
-LOGDT024
-256 CHAR
-256 CHAR,,
-
-
-Javier Alonso Silva
-2018-06-18 14:30:48 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT024
-20 CHAR
-20 CHAR,,
-
-
-Javier Alonso Silva
-2018-06-18 14:31:00 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT011
-,,
-
-
-Javier Alonso Silva
-2018-06-18 14:31:14 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT011
-,,
-
-
-Javier Alonso Silva
-2018-06-18 14:31:24 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT011
-,,
-
-
-Javier Alonso Silva
-2018-06-18 14:33:59 UTC
-database_design
-
-
-
-true
-false
-
-LOGDT006
-1 BYTE
-1 BYTE,,
-
-
-
-
-Javier Alonso Silva
-2018-06-18 14:30:47 UTC
-database_design
-false
-
-
-
-true
-
-CAFF56A3-E241-F64F-19BE-CEA2E258C602
-
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/1D1B52B1-8974-5046-5AB7-7AB4BF89C08A.xml b/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/1D1B52B1-8974-5046-5AB7-7AB4BF89C08A.xml
deleted file mode 100644
index af3ba67..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/1D1B52B1-8974-5046-5AB7-7AB4BF89C08A.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:39:41 UTC
-database_design
-
-
-
-E3C428C4-0B62-6F66-F2BC-DB1AEE9F9400
-2F9B98EF-2E48-6530-04A0-1E62A0B7E323
-false
-true
-false
-*
-52FEBBBF-C76E-AEF4-45C5-3341E59BD946
-*
-FB782D70-50E0-0A98-4654-5E94050F8458
-true
-NO ACTION
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/46906DFA-66DD-2DD5-790C-7A87FFE7755C.xml b/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/46906DFA-66DD-2DD5-790C-7A87FFE7755C.xml
deleted file mode 100644
index a643608..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/46906DFA-66DD-2DD5-790C-7A87FFE7755C.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:43:05 UTC
-database_design
-
-
-
-2F9B98EF-2E48-6530-04A0-1E62A0B7E323
-false
-true
-false
-1
-FB782D70-50E0-0A98-4654-5E94050F8458
-1
-1558C95F-4CEC-1E30-AA15-58B7C6ACD81B
-true
-CASCADE
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/B934A368-41CA-2247-7505-4DDD707ADAB7.xml b/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/B934A368-41CA-2247-7505-4DDD707ADAB7.xml
deleted file mode 100644
index 0360a03..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/B934A368-41CA-2247-7505-4DDD707ADAB7.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-19 17:07:24 UTC
-database_design
-
-
-
-3E09607E-650C-5E05-C7AC-0E839F482CA2
-false
-true
-false
-1
-96125017-F1D2-153D-CBAC-D12E0939CF4E
-1
-B1A287E6-50CA-DB8B-0AAD-60C303A2A402
-true
-CASCADE
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/C49FD692-24A0-3030-2280-A4D5B8CDFC01.xml b/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/C49FD692-24A0-3030-2280-A4D5B8CDFC01.xml
deleted file mode 100644
index 08922b3..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/C49FD692-24A0-3030-2280-A4D5B8CDFC01.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:43:31 UTC
-database_design
-
-
-
-3E09607E-650C-5E05-C7AC-0E839F482CA2
-false
-true
-false
-1
-96125017-F1D2-153D-CBAC-D12E0939CF4E
-1
-312E0255-FAA7-1630-54E5-A4FCB50F6276
-true
-CASCADE
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/DDBAFE8B-B820-1773-EE96-8B363262CAA9.xml b/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/DDBAFE8B-B820-1773-EE96-8B363262CAA9.xml
deleted file mode 100644
index 1f2266b..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/relation/seg_0/DDBAFE8B-B820-1773-EE96-8B363262CAA9.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:36:55 UTC
-database_design
-
-
-
-2F9B98EF-2E48-6530-04A0-1E62A0B7E323
-false
-true
-false
-*
-96125017-F1D2-153D-CBAC-D12E0939CF4E
-*
-FB782D70-50E0-0A98-4654-5E94050F8458
-true
-CASCADE
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/logical/subviews/2C149101-C988-9E4D-2C9E-2746FB965570.xml b/Design/DB_STRUCTURE/database_design/logical/subviews/2C149101-C988-9E4D-2C9E-2746FB965570.xml
deleted file mode 100644
index e32299d..0000000
--- a/Design/DB_STRUCTURE/database_design/logical/subviews/2C149101-C988-9E4D-2C9E-2746FB965570.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-Javier Alonso Silva
-Javier Alonso Silva
-2018-06-18 14:24:39 UTC
-false
-true
-false
-false
-false
-false
-false
--1
-false
-1
-
-
-false
-
-
-
-false
-
-
-
-false
-
-
-
-false
-
-
-
-false
-
-
-
-false
-
-
-
-
-
-false
--16777216
-1
-
-
-
-
-
-
-false
--16777216
-1
-
-
-
-
-
-
-false
--16777216
-1
-
-
-
-
-
-
-false
--16777216
-1
-
-
-
-
-
-
-false
--16777216
-1
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/mapping/DeletedMap_RM351C3A3B-985F-1B54-60FE-A46161E8F350.xml b/Design/DB_STRUCTURE/database_design/mapping/DeletedMap_RM351C3A3B-985F-1B54-60FE-A46161E8F350.xml
deleted file mode 100644
index ec75f01..0000000
--- a/Design/DB_STRUCTURE/database_design/mapping/DeletedMap_RM351C3A3B-985F-1B54-60FE-A46161E8F350.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/mapping/DeletedMap_RMC5DFC5DD-35E9-B422-B2BF-B7648E7DE99B.xml b/Design/DB_STRUCTURE/database_design/mapping/DeletedMap_RMC5DFC5DD-35E9-B422-B2BF-B7648E7DE99B.xml
deleted file mode 100644
index f06a149..0000000
--- a/Design/DB_STRUCTURE/database_design/mapping/DeletedMap_RMC5DFC5DD-35E9-B422-B2BF-B7648E7DE99B.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/mapping/ExtendedMap.xml b/Design/DB_STRUCTURE/database_design/mapping/ExtendedMap.xml
deleted file mode 100644
index 6811f63..0000000
--- a/Design/DB_STRUCTURE/database_design/mapping/ExtendedMap.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/mapping/ExtendedMap_RM351C3A3B-985F-1B54-60FE-A46161E8F350.xml b/Design/DB_STRUCTURE/database_design/mapping/ExtendedMap_RM351C3A3B-985F-1B54-60FE-A46161E8F350.xml
deleted file mode 100644
index 7ea5df0..0000000
--- a/Design/DB_STRUCTURE/database_design/mapping/ExtendedMap_RM351C3A3B-985F-1B54-60FE-A46161E8F350.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/mapping/ExtendedMap_RMC5DFC5DD-35E9-B422-B2BF-B7648E7DE99B.xml b/Design/DB_STRUCTURE/database_design/mapping/ExtendedMap_RMC5DFC5DD-35E9-B422-B2BF-B7648E7DE99B.xml
deleted file mode 100644
index 2fabce5..0000000
--- a/Design/DB_STRUCTURE/database_design/mapping/ExtendedMap_RMC5DFC5DD-35E9-B422-B2BF-B7648E7DE99B.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-E3C428C4-0B62-6F66-F2BC-DB1AEE9F9400
-
-
-
-
-
-
-
-
-
-
-
-
-3E09607E-650C-5E05-C7AC-0E839F482CA2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2F9B98EF-2E48-6530-04A0-1E62A0B7E323
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/pm/Objects.local b/Design/DB_STRUCTURE/database_design/pm/Objects.local
deleted file mode 100644
index 385decc..0000000
--- a/Design/DB_STRUCTURE/database_design/pm/Objects.local
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/Design/DB_STRUCTURE/database_design/pm/Process Model.xml b/Design/DB_STRUCTURE/database_design/pm/Process Model.xml
deleted file mode 100644
index 7811946..0000000
--- a/Design/DB_STRUCTURE/database_design/pm/Process Model.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:24:30 UTC
-database_design
-false
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rdbms/database_design_RDBMSSites.xml b/Design/DB_STRUCTURE/database_design/rdbms/database_design_RDBMSSites.xml
deleted file mode 100644
index 42c1454..0000000
--- a/Design/DB_STRUCTURE/database_design/rdbms/database_design_RDBMSSites.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B.xml
deleted file mode 100644
index 0cdf79c..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:51:04 UTC
-database_design
-false
-32076570-2523-435C-2E92-BF29817DFF70
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/DDLSelection.local b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/DDLSelection.local
deleted file mode 100644
index 5a4a6b6..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/DDLSelection.local
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/Diagrams.local b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/Diagrams.local
deleted file mode 100644
index 11539ab..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/Diagrams.local
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/Objects.local b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/Objects.local
deleted file mode 100644
index afb34a8..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/Objects.local
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/14761BF2-0284-F09E-1C36-5AD59C18B84E.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/14761BF2-0284-F09E-1C36-5AD59C18B84E.xml
deleted file mode 100644
index 5e7fa5f..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/14761BF2-0284-F09E-1C36-5AD59C18B84E.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:53:19 UTC
-DDBAFE8B-B820-1773-EE96-8B363262CAA9
-database_design
-Music
-CASCADE
-25DE0936-5106-79A2-1678-9EAA1E0DA843
-5EE86BBE-3C43-6A0D-DECB-B287A7214DD4
-5EE86BBE-3C43-6A0D-DECB-B287A7214DD4
-true
-file_id
-true
-false
-true
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/518E00B2-30C8-083A-0841-D61034BE188E.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/518E00B2-30C8-083A-0841-D61034BE188E.xml
deleted file mode 100644
index 9295929..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/518E00B2-30C8-083A-0841-D61034BE188E.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:51:13 UTC
-1D1B52B1-8974-5046-5AB7-7AB4BF89C08A
-database_design
-Playlist
-NO ACTION
-0AF231FE-3CA2-BFD0-E42B-0DFDC72D4D26
-0AAA742E-85E9-ABBB-3457-D0D166522D31
-0AAA742E-85E9-ABBB-3457-D0D166522D31
-true
-playlist_id
-true
-false
-true
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/51EE3780-3B5D-E1A1-65B0-7ED699DD5948.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/51EE3780-3B5D-E1A1-65B0-7ED699DD5948.xml
deleted file mode 100644
index 10d5e7a..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/51EE3780-3B5D-E1A1-65B0-7ED699DD5948.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-19 17:07:52 UTC
-B934A368-41CA-2247-7505-4DDD707ADAB7
-database_design
-User
-CASCADE
-175D64CD-6D93-E0AE-DD13-FF75CAB2DC92
-D02538CD-C7A9-1C9E-7706-9BD9CDCB8B5D
-D02538CD-C7A9-1C9E-7706-9BD9CDCB8B5D
-true
-user_id
-true
-false
-true
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/6A45C1C6-8C3B-317C-9221-BA841A05B730.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/6A45C1C6-8C3B-317C-9221-BA841A05B730.xml
deleted file mode 100644
index 6eb319e..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/6A45C1C6-8C3B-317C-9221-BA841A05B730.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:51:13 UTC
-46906DFA-66DD-2DD5-790C-7A87FFE7755C
-database_design
-Music
-CASCADE
-25DE0936-5106-79A2-1678-9EAA1E0DA843
-5EE86BBE-3C43-6A0D-DECB-B287A7214DD4
-5EE86BBE-3C43-6A0D-DECB-B287A7214DD4
-true
-file_id
-true
-false
-true
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/6AA622A5-D308-C63C-2AF6-730CF06EBF34.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/6AA622A5-D308-C63C-2AF6-730CF06EBF34.xml
deleted file mode 100644
index 79bad92..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/6AA622A5-D308-C63C-2AF6-730CF06EBF34.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:53:19 UTC
-DDBAFE8B-B820-1773-EE96-8B363262CAA9
-database_design
-User
-CASCADE
-175D64CD-6D93-E0AE-DD13-FF75CAB2DC92
-D02538CD-C7A9-1C9E-7706-9BD9CDCB8B5D
-D02538CD-C7A9-1C9E-7706-9BD9CDCB8B5D
-true
-user_id
-true
-false
-true
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/B59DC6EC-C75B-86D4-AFA3-705630B49873.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/B59DC6EC-C75B-86D4-AFA3-705630B49873.xml
deleted file mode 100644
index ba83f9b..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/B59DC6EC-C75B-86D4-AFA3-705630B49873.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:51:13 UTC
-1D1B52B1-8974-5046-5AB7-7AB4BF89C08A
-database_design
-Music
-NO ACTION
-25DE0936-5106-79A2-1678-9EAA1E0DA843
-5EE86BBE-3C43-6A0D-DECB-B287A7214DD4
-5EE86BBE-3C43-6A0D-DECB-B287A7214DD4
-true
-file_id
-true
-false
-true
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/C7DC4550-6D2C-B38B-5C23-5E37D6D8832D.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/C7DC4550-6D2C-B38B-5C23-5E37D6D8832D.xml
deleted file mode 100644
index 85fe559..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/foreignkey/seg_0/C7DC4550-6D2C-B38B-5C23-5E37D6D8832D.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-Javier Alonso Silva
-2018-06-18 14:51:13 UTC
-C49FD692-24A0-3030-2280-A4D5B8CDFC01
-database_design
-User
-CASCADE
-175D64CD-6D93-E0AE-DD13-FF75CAB2DC92
-D02538CD-C7A9-1C9E-7706-9BD9CDCB8B5D
-D02538CD-C7A9-1C9E-7706-9BD9CDCB8B5D
-true
-user_id
-true
-false
-true
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/subviews/DDF9FCBE-2830-5AB6-3DD0-B2CFAA840673.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/subviews/DDF9FCBE-2830-5AB6-3DD0-B2CFAA840673.xml
deleted file mode 100644
index 4dc1720..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/subviews/DDF9FCBE-2830-5AB6-3DD0-B2CFAA840673.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
-Javier Alonso Silva
-Javier Alonso Silva
-2018-06-18 14:51:04 UTC
-false
-true
-false
-false
-false
-false
-false
--1
-false
-1
-
-
-false
-
-
-
-false
-
-
-
-false
-
-
-
-false
-
-
-
-false
-
-
-
-false
-
-
-
-false
-
-
-
-false
-
-
-
-
-
-false
--16777216
-1
-
-
-
-
-
-
-false
--16777216
-1
-
-
-
-
-
-
-false
--16777216
-1
-
-
-
-
-
-
-false
--16777216
-1
-
-
-
-
-
-
-false
--16777216
-1
-
-
-
-
-
-
-false
--16777216
-1
-
-
-
-
-
-
-false
--16777216
-1
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/0AF231FE-3CA2-BFD0-E42B-0DFDC72D4D26.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/0AF231FE-3CA2-BFD0-E42B-0DFDC72D4D26.xml
deleted file mode 100644
index 6fbfb7e..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/0AF231FE-3CA2-BFD0-E42B-0DFDC72D4D26.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/1243C675-86A2-977F-2EFA-8F6C72D2CB26.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/1243C675-86A2-977F-2EFA-8F6C72D2CB26.xml
deleted file mode 100644
index a756e91..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/1243C675-86A2-977F-2EFA-8F6C72D2CB26.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/175D64CD-6D93-E0AE-DD13-FF75CAB2DC92.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/175D64CD-6D93-E0AE-DD13-FF75CAB2DC92.xml
deleted file mode 100644
index b0a110b..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/175D64CD-6D93-E0AE-DD13-FF75CAB2DC92.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/25DE0936-5106-79A2-1678-9EAA1E0DA843.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/25DE0936-5106-79A2-1678-9EAA1E0DA843.xml
deleted file mode 100644
index b47beed..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/25DE0936-5106-79A2-1678-9EAA1E0DA843.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/47A181FD-9D20-6987-2EAE-0B7F53C88FB3.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/47A181FD-9D20-6987-2EAE-0B7F53C88FB3.xml
deleted file mode 100644
index 72c5915..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/47A181FD-9D20-6987-2EAE-0B7F53C88FB3.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/D088A558-CA22-9A96-F938-4F7712E4AEF1.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/D088A558-CA22-9A96-F938-4F7712E4AEF1.xml
deleted file mode 100644
index 55fbaaa..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/D088A558-CA22-9A96-F938-4F7712E4AEF1.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/D1128F38-5763-FC3D-4FB1-14F78EDBE4CB.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/D1128F38-5763-FC3D-4FB1-14F78EDBE4CB.xml
deleted file mode 100644
index a07d74f..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/D1128F38-5763-FC3D-4FB1-14F78EDBE4CB.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/F0AD5A40-5659-C806-BEA1-595FD0DB5F39.xml b/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/F0AD5A40-5659-C806-BEA1-595FD0DB5F39.xml
deleted file mode 100644
index 6208457..0000000
--- a/Design/DB_STRUCTURE/database_design/rel/C5DFC5DD-B7648E7DE99B/table/seg_0/F0AD5A40-5659-C806-BEA1-595FD0DB5F39.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/db_script.cql b/Design/DB_STRUCTURE/db_script.cql
deleted file mode 100644
index 0445840..0000000
--- a/Design/DB_STRUCTURE/db_script.cql
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE KEYSPACE IF NOT EXISTS YouTubeMDApp WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
-USE YouTubeMDApp;
-CREATE TABLE IF NOT EXISTS history (user_id int NOT NULL, file_id varchar NOT NULL);
-CREATE TABLE IF NOT EXISTS metadata (title varchar, artist varchar, cover text, song_duration duration, music_file_id varchar NOT NULL, PRIMARY KEY (music_file_id));
-CREATE TABLE IF NOT EXISTS music (file_id varchar NOT NULL,video_id varchar, audio_quality int, audio_format int, times_requested counter, is_metadata_by_user boolean, PRIMARY KEY (file_id));
-CREATE TABLE IF NOT EXISTS playlist (playlist_unique_id UUID NOT NULL, playlist_id varchar NOT NULL, playlist_quality int, playlist_format int, number_elements int, times_requested counter, PRIMARY KEY (playlist_unique_id));
-CREATE TABLE IF NOT EXISTS playlist_has_music (playlist_unique_id UUID NOT NULL, music_file_id varchar NOT NULL);
-CREATE TABLE IF NOT EXISTS preferences (audio_quality varchar, audio_format varchar, os varchar, should_ask_metadata boolean, user_id int NOT NULL, PRIMARY KEY (user_id));
-CREATE TABLE IF NOT EXISTS "User" (user_id int NOT NULL, username varchar, name text, first_use datetime, PRIMARY KEY (user_id));
-CREATE TABLE IF NOT EXISTS Statistics (lang varchar, downloads counter, last_time_active datetime, user_id int NOT NULL, PRIMARY KEY(user_id));
\ No newline at end of file
diff --git a/Design/DB_STRUCTURE/db_script.ddl b/Design/DB_STRUCTURE/db_script.ddl
deleted file mode 100644
index a2c2827..0000000
--- a/Design/DB_STRUCTURE/db_script.ddl
+++ /dev/null
@@ -1,147 +0,0 @@
--- Generado por Oracle SQL Developer Data Modeler 18.1.0.082.1035
--- en: 2018-06-18 16:59:15 CEST
--- sitio: Oracle Database 11g
--- tipo: Oracle Database 11g
-
-
-
-CREATE TABLE history (
- user_user_id INTEGER NOT NULL,
- music_file_id VARCHAR2(256 CHAR) NOT NULL
-);
-
-ALTER TABLE history ADD CONSTRAINT history_pk PRIMARY KEY ( user_user_id,
- music_file_id );
-
-CREATE TABLE metadata (
- title VARCHAR2(256 CHAR),
- artist VARCHAR2(256 CHAR),
- cover CLOB,
- duration VARCHAR2(20 CHAR),
- music_file_id VARCHAR2(256 CHAR) NOT NULL
-);
-
-CREATE UNIQUE INDEX metadata__idx ON
- metadata (
- music_file_id
- ASC );
-
-CREATE TABLE music (
- file_id VARCHAR2(256 CHAR) NOT NULL,
- video_id VARCHAR2(20 CHAR),
- audio_quality INTEGER,
- audio_format INTEGER,
- times_requested INTEGER,
- is_metadata_by_user CHAR(1)
-);
-
-ALTER TABLE music ADD CONSTRAINT music_pk PRIMARY KEY ( file_id );
-
-CREATE TABLE playlist (
- playlist_id VARCHAR2(256 CHAR) NOT NULL,
- number_elements INTEGER,
- times_requested INTEGER
-);
-
-ALTER TABLE playlist ADD CONSTRAINT playlist_pk PRIMARY KEY ( playlist_id );
-
-CREATE TABLE playlist_has_music (
- playlist_playlist_id VARCHAR2(256 CHAR) NOT NULL,
- music_file_id VARCHAR2(256 CHAR) NOT NULL
-);
-
-ALTER TABLE playlist_has_music ADD CONSTRAINT playlist_has_music_pk PRIMARY KEY ( playlist_playlist_id,
- music_file_id );
-
-CREATE TABLE preferences (
- audio_quality VARCHAR2(5 CHAR),
- audio_format VARCHAR2(5 CHAR),
- os VARCHAR2(10 CHAR),
- should_ask_metadata CHAR(1),
- user_user_id INTEGER NOT NULL
-);
-
-CREATE UNIQUE INDEX preferences__idx ON
- preferences (
- user_user_id
- ASC );
-
-CREATE TABLE "User" (
- user_id INTEGER NOT NULL,
- username VARCHAR2(45 CHAR),
- name CLOB
-);
-
-ALTER TABLE "User" ADD CONSTRAINT user_pk PRIMARY KEY ( user_id );
-
-ALTER TABLE history
- ADD CONSTRAINT history_music_fk FOREIGN KEY ( music_file_id )
- REFERENCES music ( file_id )
- ON DELETE CASCADE;
-
-ALTER TABLE history
- ADD CONSTRAINT history_user_fk FOREIGN KEY ( user_user_id )
- REFERENCES "User" ( user_id )
- ON DELETE CASCADE;
-
-ALTER TABLE metadata
- ADD CONSTRAINT metadata_music_fk FOREIGN KEY ( music_file_id )
- REFERENCES music ( file_id )
- ON DELETE CASCADE;
-
-ALTER TABLE playlist_has_music
- ADD CONSTRAINT playlist_has_music_music_fk FOREIGN KEY ( music_file_id )
- REFERENCES music ( file_id );
-
-ALTER TABLE playlist_has_music
- ADD CONSTRAINT playlist_has_music_playlist_fk FOREIGN KEY ( playlist_playlist_id )
- REFERENCES playlist ( playlist_id );
-
-ALTER TABLE preferences
- ADD CONSTRAINT preferences_user_fk FOREIGN KEY ( user_user_id )
- REFERENCES "User" ( user_id )
- ON DELETE CASCADE;
-
-
-
--- Informe de Resumen de Oracle SQL Developer Data Modeler:
---
--- CREATE TABLE 7
--- CREATE INDEX 2
--- ALTER TABLE 11
--- CREATE VIEW 0
--- ALTER VIEW 0
--- CREATE PACKAGE 0
--- CREATE PACKAGE BODY 0
--- CREATE PROCEDURE 0
--- CREATE FUNCTION 0
--- CREATE TRIGGER 0
--- ALTER TRIGGER 0
--- CREATE COLLECTION TYPE 0
--- CREATE STRUCTURED TYPE 0
--- CREATE STRUCTURED TYPE BODY 0
--- CREATE CLUSTER 0
--- CREATE CONTEXT 0
--- CREATE DATABASE 0
--- CREATE DIMENSION 0
--- CREATE DIRECTORY 0
--- CREATE DISK GROUP 0
--- CREATE ROLE 0
--- CREATE ROLLBACK SEGMENT 0
--- CREATE SEQUENCE 0
--- CREATE MATERIALIZED VIEW 0
--- CREATE SYNONYM 0
--- CREATE TABLESPACE 0
--- CREATE USER 0
---
--- DROP TABLESPACE 0
--- DROP DATABASE 0
---
--- REDACTION POLICY 0
---
--- ORDS DROP SCHEMA 0
--- ORDS ENABLE SCHEMA 0
--- ORDS ENABLE OBJECT 0
---
--- ERRORS 0
--- WARNINGS 0
diff --git a/Design/Database/database_model.mwb b/Design/Database/database_model.mwb
new file mode 100644
index 0000000..03ffdc9
Binary files /dev/null and b/Design/Database/database_model.mwb differ
diff --git a/Design/Database/database_model.mwb.bak b/Design/Database/database_model.mwb.bak
new file mode 100644
index 0000000..ea968e3
Binary files /dev/null and b/Design/Database/database_model.mwb.bak differ
diff --git a/Design/Database/generated_sql_file.sql b/Design/Database/generated_sql_file.sql
new file mode 100644
index 0000000..e65336e
--- /dev/null
+++ b/Design/Database/generated_sql_file.sql
@@ -0,0 +1,251 @@
+-- MySQL Script generated by MySQL Workbench
+-- lun 22 jul 2019 14:28:48 CEST
+-- Model: New Model Version: 1.0
+-- MySQL Workbench Forward Engineering
+
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
+
+-- -----------------------------------------------------
+-- Schema youtubemd
+-- -----------------------------------------------------
+
+-- -----------------------------------------------------
+-- Schema youtubemd
+-- -----------------------------------------------------
+CREATE SCHEMA IF NOT EXISTS `youtubemd` DEFAULT CHARACTER SET utf8mb4 ;
+SHOW WARNINGS;
+USE `youtubemd` ;
+
+-- -----------------------------------------------------
+-- Table `youtubemd`.`User`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `youtubemd`.`User` (
+ `id` INT(64) NOT NULL DEFAULT 0,
+ `name` VARCHAR(45) NULL DEFAULT 'User',
+ `surname` VARCHAR(45) NULL,
+ `username` VARCHAR(45) NULL,
+ `lastSeen` DATETIME NOT NULL,
+ `firstUsage` DATETIME NOT NULL,
+ PRIMARY KEY (`id`))
+ENGINE = InnoDB
+CHECKSUM = 1
+PACK_KEYS = 1;
+
+SHOW WARNINGS;
+CREATE UNIQUE INDEX `id_UNIQUE` ON `youtubemd`.`User` (`id` ASC) VISIBLE;
+
+SHOW WARNINGS;
+CREATE UNIQUE INDEX `username_UNIQUE` ON `youtubemd`.`User` (`username` ASC) VISIBLE;
+
+SHOW WARNINGS;
+
+-- -----------------------------------------------------
+-- Table `youtubemd`.`Preferences`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `youtubemd`.`Preferences` (
+ `language` VARCHAR(3) NOT NULL DEFAULT 'en',
+ `audioQuality` ENUM('320k', '256k', '128k') NOT NULL DEFAULT '128k',
+ `audioSampling` ENUM('44000', '48000') NOT NULL DEFAULT '44000',
+ `sendSongLinks` TINYINT NOT NULL DEFAULT 0,
+ `User_id` INT(64) NOT NULL,
+ PRIMARY KEY (`User_id`),
+ CONSTRAINT `fk_Preferences_User`
+ FOREIGN KEY (`User_id`)
+ REFERENCES `youtubemd`.`User` (`id`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION)
+ENGINE = InnoDB
+CHECKSUM = 1;
+
+SHOW WARNINGS;
+
+-- -----------------------------------------------------
+-- Table `youtubemd`.`Metadata`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `youtubemd`.`Metadata` (
+ `idMetadata` INT NOT NULL AUTO_INCREMENT,
+ `title` VARCHAR(100) NOT NULL,
+ `artist` VARCHAR(60) NOT NULL,
+ `cover` BLOB NOT NULL,
+ `duration` INT NULL,
+ `customMetadata` TINYINT NOT NULL DEFAULT 0,
+ PRIMARY KEY (`idMetadata`))
+ENGINE = InnoDB
+AUTO_INCREMENT = 0
+CHECKSUM = 1;
+
+SHOW WARNINGS;
+
+-- -----------------------------------------------------
+-- Table `youtubemd`.`VideoInformation`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `youtubemd`.`VideoInformation` (
+ `id` VARCHAR(11) NOT NULL,
+ `title` VARCHAR(100) NOT NULL,
+ `channel` VARCHAR(60) NOT NULL,
+ PRIMARY KEY (`id`))
+ENGINE = InnoDB
+CHECKSUM = 1;
+
+SHOW WARNINGS;
+CREATE UNIQUE INDEX `id_UNIQUE` ON `youtubemd`.`VideoInformation` (`id` ASC) VISIBLE;
+
+SHOW WARNINGS;
+
+-- -----------------------------------------------------
+-- Table `youtubemd`.`DownloadInformation`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `youtubemd`.`DownloadInformation` (
+ `file_id` VARCHAR(50) NOT NULL,
+ `audioQuality` ENUM('320k', '256k', '128k') NOT NULL,
+ `audioSampling` ENUM('44000', '48000') NULL,
+ `Metadata_idMetadata` INT NOT NULL,
+ `VideoInformation_id` VARCHAR(11) NOT NULL,
+ PRIMARY KEY (`file_id`, `Metadata_idMetadata`, `VideoInformation_id`),
+ CONSTRAINT `fk_DownloadInformation_Metadata1`
+ FOREIGN KEY (`Metadata_idMetadata`)
+ REFERENCES `youtubemd`.`Metadata` (`idMetadata`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION,
+ CONSTRAINT `fk_DownloadInformation_VideoInformation1`
+ FOREIGN KEY (`VideoInformation_id`)
+ REFERENCES `youtubemd`.`VideoInformation` (`id`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION)
+ENGINE = InnoDB
+CHECKSUM = 1;
+
+SHOW WARNINGS;
+CREATE UNIQUE INDEX `file_id_UNIQUE` ON `youtubemd`.`DownloadInformation` (`file_id` ASC) VISIBLE;
+
+SHOW WARNINGS;
+CREATE INDEX `fk_DownloadInformation_Metadata1_idx` ON `youtubemd`.`DownloadInformation` (`Metadata_idMetadata` ASC) VISIBLE;
+
+SHOW WARNINGS;
+CREATE INDEX `fk_DownloadInformation_VideoInformation1_idx` ON `youtubemd`.`DownloadInformation` (`VideoInformation_id` ASC) VISIBLE;
+
+SHOW WARNINGS;
+
+-- -----------------------------------------------------
+-- Table `youtubemd`.`History`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `youtubemd`.`History` (
+ `User_id` INT(64) NOT NULL,
+ `DownloadInformation_file_id` VARCHAR(50) NOT NULL,
+ PRIMARY KEY (`User_id`, `DownloadInformation_file_id`),
+ CONSTRAINT `fk_History_User1`
+ FOREIGN KEY (`User_id`)
+ REFERENCES `youtubemd`.`User` (`id`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION,
+ CONSTRAINT `fk_History_DownloadInformation1`
+ FOREIGN KEY (`DownloadInformation_file_id`)
+ REFERENCES `youtubemd`.`DownloadInformation` (`file_id`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION)
+ENGINE = InnoDB
+CHECKSUM = 1;
+
+SHOW WARNINGS;
+CREATE INDEX `fk_History_DownloadInformation1_idx` ON `youtubemd`.`History` (`DownloadInformation_file_id` ASC) VISIBLE;
+
+SHOW WARNINGS;
+
+-- -----------------------------------------------------
+-- Table `youtubemd`.`VideoStatistics`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `youtubemd`.`VideoStatistics` (
+ `timesRequested` INT NOT NULL DEFAULT 0,
+ `VideoInformation_id` VARCHAR(11) NOT NULL,
+ PRIMARY KEY (`VideoInformation_id`),
+ CONSTRAINT `fk_VideoStatistics_VideoInformation1`
+ FOREIGN KEY (`VideoInformation_id`)
+ REFERENCES `youtubemd`.`VideoInformation` (`id`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION)
+ENGINE = InnoDB
+CHECKSUM = 1;
+
+SHOW WARNINGS;
+
+-- -----------------------------------------------------
+-- Table `youtubemd`.`DownloadStatistics`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `youtubemd`.`DownloadStatistics` (
+ `timesRequested` INT NOT NULL DEFAULT 0,
+ `DownloadInformation_file_id` VARCHAR(50) NOT NULL,
+ PRIMARY KEY (`DownloadInformation_file_id`),
+ CONSTRAINT `fk_DownloadStatistics_DownloadInformation1`
+ FOREIGN KEY (`DownloadInformation_file_id`)
+ REFERENCES `youtubemd`.`DownloadInformation` (`file_id`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION)
+ENGINE = InnoDB
+CHECKSUM = 1;
+
+SHOW WARNINGS;
+
+-- -----------------------------------------------------
+-- Table `youtubemd`.`Playlist`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `youtubemd`.`Playlist` (
+ `id` VARCHAR(60) NOT NULL,
+ PRIMARY KEY (`id`))
+ENGINE = InnoDB
+CHECKSUM = 1;
+
+SHOW WARNINGS;
+CREATE UNIQUE INDEX `id_UNIQUE` ON `youtubemd`.`Playlist` (`id` ASC) VISIBLE;
+
+SHOW WARNINGS;
+
+-- -----------------------------------------------------
+-- Table `youtubemd`.`Playlist_has_VideoInformation`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `youtubemd`.`Playlist_has_VideoInformation` (
+ `Playlist_id` VARCHAR(60) NOT NULL,
+ `VideoInformation_id` VARCHAR(11) NOT NULL,
+ PRIMARY KEY (`Playlist_id`, `VideoInformation_id`),
+ CONSTRAINT `fk_Playlist_has_VideoInformation_Playlist1`
+ FOREIGN KEY (`Playlist_id`)
+ REFERENCES `youtubemd`.`Playlist` (`id`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION,
+ CONSTRAINT `fk_Playlist_has_VideoInformation_VideoInformation1`
+ FOREIGN KEY (`VideoInformation_id`)
+ REFERENCES `youtubemd`.`VideoInformation` (`id`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION)
+ENGINE = InnoDB
+CHECKSUM = 1;
+
+SHOW WARNINGS;
+CREATE INDEX `fk_Playlist_has_VideoInformation_VideoInformation1_idx` ON `youtubemd`.`Playlist_has_VideoInformation` (`VideoInformation_id` ASC) VISIBLE;
+
+SHOW WARNINGS;
+CREATE INDEX `fk_Playlist_has_VideoInformation_Playlist1_idx` ON `youtubemd`.`Playlist_has_VideoInformation` (`Playlist_id` ASC) VISIBLE;
+
+SHOW WARNINGS;
+
+-- -----------------------------------------------------
+-- Table `youtubemd`.`PlaylistStatistics`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `youtubemd`.`PlaylistStatistics` (
+ `timesRequested` INT NOT NULL,
+ `Playlist_id` VARCHAR(60) NOT NULL,
+ PRIMARY KEY (`Playlist_id`),
+ CONSTRAINT `fk_PlaylistStatistics_Playlist1`
+ FOREIGN KEY (`Playlist_id`)
+ REFERENCES `youtubemd`.`Playlist` (`id`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION)
+ENGINE = InnoDB
+CHECKSUM = 1;
+
+SHOW WARNINGS;
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
diff --git a/Design/Database/img_database_model.png b/Design/Database/img_database_model.png
new file mode 100644
index 0000000..6046766
Binary files /dev/null and b/Design/Database/img_database_model.png differ
diff --git a/Design/Database/pdf_database_model.pdf b/Design/Database/pdf_database_model.pdf
new file mode 100644
index 0000000..4cdb445
Binary files /dev/null and b/Design/Database/pdf_database_model.pdf differ
diff --git a/Design/Database/vect_database_model.svg b/Design/Database/vect_database_model.svg
new file mode 100644
index 0000000..fe40b7a
--- /dev/null
+++ b/Design/Database/vect_database_model.svg
@@ -0,0 +1,3111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Design/SRS/Software Requirement Specification.docx b/Design/SRS/Software Requirement Specification.docx
index afb01d6..00a2c94 100644
Binary files a/Design/SRS/Software Requirement Specification.docx and b/Design/SRS/Software Requirement Specification.docx differ
diff --git a/youtube_md_bot/.idea/deployment.xml b/youtube_md_bot/.idea/deployment.xml
deleted file mode 100644
index 45d90b0..0000000
--- a/youtube_md_bot/.idea/deployment.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/youtube_md_bot/.idea/inspectionProfiles/Project_Default.xml b/youtube_md_bot/.idea/inspectionProfiles/Project_Default.xml
deleted file mode 100644
index bb2ce98..0000000
--- a/youtube_md_bot/.idea/inspectionProfiles/Project_Default.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/youtube_md_bot/.idea/misc.xml b/youtube_md_bot/.idea/misc.xml
deleted file mode 100644
index 9cebf05..0000000
--- a/youtube_md_bot/.idea/misc.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/youtube_md_bot/.idea/modules.xml b/youtube_md_bot/.idea/modules.xml
deleted file mode 100644
index cc95f4e..0000000
--- a/youtube_md_bot/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/youtube_md_bot/.idea/sqlDataSources.xml b/youtube_md_bot/.idea/sqlDataSources.xml
deleted file mode 100644
index b125209..0000000
--- a/youtube_md_bot/.idea/sqlDataSources.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/youtube_md_bot/.idea/vcs.xml b/youtube_md_bot/.idea/vcs.xml
deleted file mode 100644
index 6c0b863..0000000
--- a/youtube_md_bot/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/youtube_md_bot/.idea/workspace.xml b/youtube_md_bot/.idea/workspace.xml
deleted file mode 100644
index f245ff3..0000000
--- a/youtube_md_bot/.idea/workspace.xml
+++ /dev/null
@@ -1,939 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- duration
- "app_data.dict"
- "requirements.txt"
- handlers
-
-
- Constants.A_
- Constants.A_APP_DATA_FILE
- Constants.A_APP_REQ_FILE
- .handlers
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- DEFINITION_ORDER
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1529335044449
-
-
- 1529335044449
-
-
- 1529336000478
-
-
-
- 1529336000478
-
-
- 1529341560151
-
-
-
- 1529341560151
-
-
- 1529518221384
-
-
-
- 1529518221384
-
-
- 1529522603097
-
-
-
- 1529522603097
-
-
- 1529747881468
-
-
-
- 1529747881468
-
-
- 1529752871693
-
-
-
- 1529752871693
-
-
- 1530014316004
-
-
-
- 1530014316004
-
-
- 1530037766868
-
-
-
- 1530037766868
-
-
- 1530089505355
-
-
-
- 1530089505355
-
-
- 1530120152704
-
-
-
- 1530120152704
-
-
- 1530200290328
-
-
-
- 1530200290328
-
-
- 1530470820132
-
-
-
- 1530470820132
-
-
- 1530471396812
-
-
-
- 1530471396812
-
-
- 1530474313444
-
-
-
- 1530474313444
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/youtube_md_bot/.idea/youtube_md_bot.iml b/youtube_md_bot/.idea/youtube_md_bot.iml
deleted file mode 100644
index b5835e7..0000000
--- a/youtube_md_bot/.idea/youtube_md_bot.iml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/youtube_md_bot/__init__.py b/youtube_md_bot/__init__.py
deleted file mode 100644
index 9933cc3..0000000
--- a/youtube_md_bot/__init__.py
+++ /dev/null
@@ -1,157 +0,0 @@
-try:
- from argparse import ArgumentParser, Namespace
-except (ImportError, ModuleNotFoundError) as e:
- print("Modules needed not found: " + str(e))
-
-from .out import cPrint, Colors
-from .upgrader import PiPUpgrader
-from .database import DatabaseOperationsBase
-from .utils import Constants, logger
-from .handlers.StartHandler import StartHandler
-from .handlers.HelpHandler import HelpHandler
-from .handlers.DeveloperHandler import DeveloperHandler
-from .handlers.VideoIDHandler import VideoIDHandler
-from .handlers.URLHandler import URLHandler
-from .handlers.TextHandler import TextHandler
-from .handlers.UnexpectedHandler import UnexpectedHandler
-
-
-def handler_definer():
- # type: () -> list
- from telegram import MessageEntity
- from telegram.ext import CommandHandler, MessageHandler, Filters
-
- handlers = []
- with open(Constants.A_APP_MESSAGES, 'r') as messages_file:
- messages: dict = messages_file.read()
- start = StartHandler(messages)
- help_handler = HelpHandler(messages)
- dev = DeveloperHandler(messages)
- video = VideoIDHandler(messages)
- url = URLHandler(messages)
- text = TextHandler(messages)
- unexpected = UnexpectedHandler(messages)
-
- handlers.append(CommandHandler("start", start.start))
- handlers.append(CommandHandler("help", help_handler.help))
- handlers.append(CommandHandler("develop", dev.develop))
- handlers.append(MessageHandler(Filters.command, video.video_handler))
- handlers.append(MessageHandler(Filters.text & (Filters.entity(MessageEntity.URL) |
- Filters.entity(MessageEntity.TEXT_LINK)), url.url_handler))
- handlers.append(MessageHandler(Filters.text, text.message_handler))
- handlers.append(MessageHandler(Filters.all, unexpected.unexpected))
-
- return handlers
-
-
-def main(arguments: Namespace):
- global updater, db_manager
- try:
- import pickle
- import logging
- import secrets
- import string
-
- from os import path
- from telegram.ext import Updater
- except (ImportError, ModuleNotFoundError) as import_error:
- cPrint("Modules needed not found" + str(import_error), Colors.FAIL)
- exit(-1)
- else:
- try:
- token = arguments.token
- youtube_api_key = arguments.youtube
- creator_id = arguments.creator
- database_user = arguments.db_user
- database_password = arguments.db_password
- must_show_version = arguments.version
- if must_show_version:
- cPrint("Version: " + Constants.A_APP_VERSION + "-" + Constants.A_APP_TAG_R +
- " (" + Constants.A_APP_TAG + ")", Colors.BOLD)
- exit(0)
- if not path.exists(Constants.A_APP_DATA_FILE):
- if not token:
- raise ValueError("You must add token at least the first time you execute this app")
- elif not youtube_api_key:
- raise ValueError("You must include the YouTubeAPI Key at least the first time you execute this app")
- elif not creator_id:
- raise ValueError("You must include the creator ID (Telegram) at least the first time you execute "
- "this app")
- else:
- if not database_user:
- database_user = "youtube_md_bot"
- if not database_password:
- alphabet = string.ascii_letters + string.digits
- database_password = ''.join(secrets.choice(alphabet) for i in range(32))
- with open(Constants.A_APP_DATA_FILE, "wb") as app_data_file:
- app_data = {"TOKEN": token,
- "YT_API": youtube_api_key,
- "CREATOR_ID": creator_id,
- "DB_USER": database_user,
- "DB_PASSWORD:": database_password}
- pickle.dump(app_data, app_data_file, pickle.HIGHEST_PROTOCOL)
- main(arguments)
- else:
- cPrint("Initializing bot...", Colors.GREEN)
- cPrint("Looking for packages updates...", Colors.GREEN)
-
- upgrader = PiPUpgrader(Constants.A_APP_REQ_FILE)
- upgrader.upgradePackages()
-
- cPrint("Obtaining values...", Colors.GREEN)
- with open(Constants.A_APP_DATA_FILE, "rb") as app_data_file:
- app_data = pickle.load(app_data_file)
-
- cPrint("Starting database system...", Colors.GREEN)
- db_manager = DatabaseOperationsBase(username=database_user, password=database_password)
-
- cPrint("Defining handlers...", Colors.GREEN)
- handlers = handler_definer()
- updater = Updater(token=app_data["TOKEN"], workers=50)
- dispatcher = updater.dispatcher
- for handler in handlers:
- dispatcher.add_handler(handler)
-
- cPrint("Defining log...", Colors.GREEN)
- logger.setup_logging(Constants.L_PRIMARY_LOGGER_NAME, Constants.L_PRIMARY_LOGGER_FILENAME,
- Constants.L_PRIMARY_LOGGER_MODE)
- logger.setup_logging(Constants.L_SECONDARY_LOGGER_NAME, Constants.L_SECONDARY_LOGGER_MODE)
- try:
- updater.start_polling(poll_interval=1, timeout=90)
- except KeyboardInterrupt:
- cPrint("Exiting program... Wait while closing threads and pending petitions...", Colors.FAIL)
- updater.idle()
- db_manager.finishConnection()
- exit(0)
- except Exception as program_execution_exception:
- cPrint(str(program_execution_exception), Colors.FAIL)
- exit(-1)
-
-
-if __name__ == '__main__':
- args = ArgumentParser()
- args.add_argument("-t",
- "--token",
- help="Telegram token obtained via BotFather",
- type=str)
- args.add_argument("-y",
- "--youtube",
- help="YouTube API Key",
- type=str)
- args.add_argument("-c",
- "--creator",
- help="Telegram ID of the creator",
- type=int)
- args.add_argument("-dbu",
- "--db_user",
- help="Database user (can be empty)",
- type=str)
- args.add_argument("-dbp",
- "--db_password",
- help="Database password (can be empty)",
- type=str)
- args.add_argument("-v",
- "--version",
- help="Application version",
- action="store_true")
- main(args.parse_args())
diff --git a/youtube_md_bot/database/__init__.py b/youtube_md_bot/database/__init__.py
deleted file mode 100644
index b0c4148..0000000
--- a/youtube_md_bot/database/__init__.py
+++ /dev/null
@@ -1,340 +0,0 @@
-import uuid
-
-from cassandra.cluster import Cluster
-from cassandra.auth import PlainTextAuthProvider
-
-from collections import namedtuple
-
-from datetime import datetime
-
-
-# Singleton class
-class DatabaseOperationsBase(object):
- __instance = None
-
- def __new__(cls, username: str=None, password: str=None):
- if DatabaseOperationsBase.__instance is None:
- if username is None or password is None:
- raise ValueError("You must provide the DB user and password at least the first time")
- DatabaseOperationsBase.__instance = object.__new__(cls)
- DatabaseOperationsBase.__instance.__username = username
- DatabaseOperationsBase.__instance.__password = password
- auth_provider = PlainTextAuthProvider(username=username, password=password)
- cluster = Cluster(auth_provider=auth_provider)
- DatabaseOperationsBase.__instance.__session = cluster.connect()
- DatabaseOperationsBase.__instance.__createTables()
- return DatabaseOperationsBase.__instance
-
- def getInstance(self):
- return self.__instance
-
- def __createTables(self):
- with open("../../Design/db_script.cql", "r") as sql_script:
- queries = sql_script.read().splitlines()
- for query in queries:
- self.__session.execute(query)
-
- def finishConnection(self):
- self.__session.shutdown()
-
-
-class InsertOperations(DatabaseOperationsBase):
- def __new__(cls, *args, **kwargs):
- return super().__new__(cls)
-
- def registerNewUser(self, user_id: int, username: str, name: str):
- query = """INSERT INTO YouTubeMDApp.User(user_id, username, name, first_use) VALUES (%s, %s, %s, %s);"""
- self.__session.execute(query, (user_id, username, name, datetime.now()))
-
- def registerPreferences(self, user_id: int, audio_quality: str, audio_format: str, os: str,
- should_ask_metadata: bool):
- query = """
- INSERT INTO YouTubeMDApp.preferences(audio_quality, audio_format, os, should_ask_metadata, user_id)
- VALUES (%s, %s, %s, %s, %s);
- """
- self.__session.execute(query, (audio_quality, audio_format, os, should_ask_metadata, user_id))
-
- def registerStatistics(self, user_id: int, lang: str, downloads: int, last_time_active: datetime):
- query = """
- INSERT INTO YouTubeMDApp.Statistics(lang, downloads, last_time_active, user_id) VALUES (%s, %s, %s, %s);
- """
- self.__session.execute_async(query, (lang, downloads, last_time_active, user_id))
-
- def registerNewSong(self, file_id: str, video_id: str, audio_quality: int, audio_format: int, times_requested: int,
- is_metadata_by_user: bool):
- query = """
- INSERT INTO YouTubeMDApp.music (file_id, video_id, audio_quality, audio_format, times_requested,
- is_metadata_by_user) VALUES (%s, %s, %s, %s, %s, %s)
- """
- self.__session.execute_async(query, (file_id, video_id, audio_quality, audio_format, times_requested,
- is_metadata_by_user))
-
- def registerNewPlaylist(self, playlist_id: str, number_elements: int, times_requested: int):
- query = """
- INSERT INTO YouTubeMDApp.playlist(playlist_id, number_elements, times_requested) VALUES (%s, %s, %s)
- """
- self.__session.execute_async(query, (playlist_id, number_elements, times_requested))
-
- def registerNewSongForPlaylist(self, playlist_id: str, file_id: str, playlist_quality: str, playlist_format: str):
- query = """
- INSERT INTO YouTubeMDApp.playlist_has_music
- (playlist_playlist_id, music_file_id, playlist_quality, playlist_format) VALUES (%s, %s, %s, %s)
- """
- self.__session.execute(query, (playlist_id, file_id, playlist_quality, playlist_format))
-
- def registerNewSongMetadata(self, title: str, artist: str, cover: str, duration: str, file_id: str):
- query = """
- INSERT INTO YouTubeMDApp.metadata(title, artist, cover, song_duration, music_file_id)
- VALUES (%s, %s, %s, %s, %s)
- """
- self.__session.execute_async(query, (title, artist, cover, duration, file_id))
-
- def registerNewSongInHistory(self, user_id: int, file_id: str):
- query = """
- INSERT INTO YouTubeMDApp.history(user_id, file_id) VALUES (%s, %s)
- """
- self.__session.execute_async(query, (user_id, file_id))
-
-
-class UpdateOperations(DatabaseOperationsBase):
- def __new__(cls, *args, **kwargs):
- return super().__new__(cls)
-
- def updateUserUsername(self, new_username: str, user_id: int):
- query = """
- UPDATE YouTubeMDApp.user SET username = %s WHERE user_id = %s
- """
- self.__session.execute_async(query, (new_username, user_id))
-
- def updateUserAudioQuality(self, user_id: int, audio_quality: str):
- query = """
- UPDATE YouTubeMDApp.preferences SET audio_quality = %s WHERE user_id = %s
- """
- self.__session.execute(query, (audio_quality, user_id))
-
- def updateUserAudioFormat(self, user_id: int, audio_format: str):
- query = """
- UPDATE YouTubeMDApp.preferences SET audio_format = %s WHERE user_id = %s
- """
- self.__session.execute(query, (audio_format, user_id))
-
- def updateUserOS(self, user_id: int, os: str):
- query = """
- UPDATE YouTubeMDApp.preferences SET os = %s WHERE user_id = %s
- """
- self.__session.execute(query, (os, user_id))
-
- def updateIfUserMustBeRequestedForMetadata(self, user_id: int, shouldAskForMetadata: bool):
- query = """
- UPDATE YouTubeMDApp.preferences SET should_ask_metadata = %s WHERE user_id = %s
- """
- self.__session.execute(query, (shouldAskForMetadata, user_id))
-
- def updateUserLang(self, user_id: int, lang: str):
- query = """
- UPDATE YouTubeMDApp.statistics SET lang = %s WHERE user_id = %s
- """
- self.__session.execute_async(query, (lang, user_id))
-
- def updateUserDownloads(self, user_id: int):
- query = """
- UPDATE YouTubeMDApp.statistics SET downloads = downloads + 1 WHERE user_id = %s
- """
- self.__session.execute_async(query, (user_id, ))
-
- def updateUserLastTimeActive(self, user_id: int):
- query = """
- UPDATE YouTubeMDApp.statistics SET last_time_active = %s WHERE user_id = %s
- """
- self.__session.execute_async(query, (datetime.now(), user_id))
-
- def updatePlaylistNumberOfElements(self, playlist_id: str, number_of_elements: int):
- query = """
- UPDATE YouTubeMDApp.playlist SET number_elements = %s WHERE playlist_id = %s
- """
- self.__session.execute_async(query, (number_of_elements, playlist_id))
-
- def updatePlaylistTimesRequested(self, playlist_id: str):
- query = """
- UPDATE YouTubeMDApp.playlist SET times_requested = times_requested + 1 WHERE playlist_id = %s
- """
- self.__session.execute_async(query, (playlist_id, ))
-
-
-class SelectOperations(DatabaseOperationsBase):
- def __new__(cls, *args, **kwargs):
- return super().__new__(cls)
-
- def selectUserData(self, user_id: int):
- # type: () -> namedtuple
- query = """SELECT username, name FROM YouTubeMDApp.User WHERE user_id = %s"""
- return self.__session.execute(query, (user_id, ))
-
- def selectUserPreferences(self, user_id: int):
- # type: () -> namedtuple
- query = """
- SELECT audio_quality, audio_format, os, should_ask_metadata FROM YouTubeMDApp.preferences WHERE user_id = %s
- """
- return self.__session.execute(query, (user_id, ))
-
- def selectUserHistoryForUserID(self, user_id: int):
- # type: () -> namedtuple
- query = """SELECT file_id FROM YouTubeMDApp.history WHERE user_id = %s"""
- return self.__session.execute(query, (user_id,))
-
- def selectMetadataForMusicID(self, music_id: str):
- # type: () -> namedtuple
- query = """SELECT title, artist, cover, song_duration FROM YouTubeMDApp.metadata WHERE music_file_id = %s"""
- return self.__session.execute(query, (music_id,))
-
- def searchMusicByVideoIDAndExtras(self, video_id: str, audio_quality: int, audio_format: int):
- # type: () -> namedtuple
- query = """
- SELECT file_id FROM YouTubeMDApp.music WHERE (video_id = %s, audio_quality = %s, audio_format = %s,
- is_metadata_by_user = %s)
- """
- return self.__session.execute(query, (video_id, audio_quality, audio_format, False))
-
- def searchPlaylistByIDAndExtras(self, playlist_id: str, playlist_quality: int, playlist_format: int):
- # type: () -> namedtuple
- query = """
- SELECT playlist_unique_id FROM YouTubeMDApp.playlist WHERE (playlist_id = %s, playlist_quality = %s,
- playlist_format = %s)
- """
- return self.__session.execute(query, (playlist_id, playlist_quality, playlist_format))
-
- def selectSongsOfPlaylist(self, playlist_unique_id: uuid):
- # type: () -> namedtuple
- query = """
- SELECT music_file_id FROM YouTubeMDApp.playlist_has_music WHERE playlist_unique_id = %s
- """
- return self.__session.execute(query, (playlist_unique_id, ))
-
- def selectStatisticsForUser(self, user_id: int):
- # type: () -> namedtuple
- query = """
- SELECT lang, downloads, last_time_active FROM YouTubeMDApp.Statistics WHERE user_id = %s
- """
- return self.__session.execute(query, (user_id, ))
-
- def selectTotal24ActiveUsers(self):
- # type: () -> namedtuple
- query = """
- SELECT COUNT(user_id) FROM YouTubeMDApp.Statistics WHERE last_time_active >= (%s - 1d)
- """
- return self.__session.execute(query, (datetime.now(), ))
-
- def selectMostDownloadedSong(self):
- # type: () -> namedtuple
- query = """
- SELECT MAX(times_requested) FROM YouTubeMDApp.music
- """
- return self.__session.execute(query)
-
- def selectMostDownloadedPlaylist(self):
- # type: () -> namedtuple
- query = """
- SELECT MAX(times_requested) FROM YouTubeMDApp.playlist
- """
- return self.__session.execute(query)
-
- def selectMostUsedGeoLocation(self):
- # type: () -> namedtuple
- query = """
- SELECT lang, COUNT(lang) AS most_used_lang FROM YouTubeMDApp.Statistics GROUP BY lang ORDER BY most_used_lang
- DESC
- """
- return self.__session.execute(query)
-
- def selectTotalUsers(self):
- # type: () -> namedtuple
- query = """
- SELECT COUNT(user_id) FROM YouTubeMDApp.User
- """
- return self.__session.execute(query)
-
- def selectTotalRequestedSongs(self):
- # type: () -> namedtuple
- query = """
- SELECT COUNT(file_id) FROM YouTubeMDApp.music
- """
- return self.__session.execute(query)
-
- def selectTotalSongsRequests(self):
- # type: () -> namedtuple
- query = """
- SELECT SUM(times_requested) FROM YouTubeMDApp.music
- """
- return self.__session.execute(query)
-
- def selectTotalRequestedPlaylists(self):
- # type: () -> namedtuple
- query = """
- SELECT COUNT(playlist_unique_id) FROM YouTubeMDApp.playlist
- """
- return self.__session.execute(query)
-
- def selectTotalPlaylistsRequests(self):
- # type: () -> namedtuple
- query = """
- SELECT SUM(times_requested) FROM YouTubeMDApp.playlist
- """
- return self.__session.execute(query)
-
- def selectMostCommonQuality(self):
- # type: () -> namedtuple
- query = """
- SELECT audio_quality, COUNT(audio_quality) AS most_used_audio_quality FROM YouTubeMDApp.preferences
- GROUP BY audio_quality ORDER BY most_used_audio_quality DESC
- """
- return self.__session.execute(query)
-
- def selectMostCommonFormat(self):
- # type: () -> namedtuple
- query = """
- SELECT audio_format, COUNT(audio_format) AS most_used_audio_format FROM YouTubeMDApp.preferences
- GROUP BY audio_format ORDER BY most_used_audio_format DESC
- """
- return self.__session.execute(query)
-
- def selectMostCommonOS(self):
- # type: () -> namedtuple
- query = """
- SELECT os, COUNT(os) AS most_used_os FROM YouTubeMDApp.preferences GROUP BY os ORDER BY most_used_os DESC
- """
- return self.__session.execute(query)
-
- def selectUsersRegistered30DaysAgo(self):
- # type: () -> namedtuple
- query = """
- SELECT COUNT(user_id) FROM YouTubeMDApp.User WHERE first_use >= (%s - 1mo)
- """
- return self.__session.execute(query, (datetime.now(), ))
-
- def selectUsersRegistered7DaysAgo(self):
- # type: () -> namedtuple
- query = """
- SELECT COUNT(user_id) FROM YouTubeMDApp.User WHERE first_use >= (%s - 1w)
- """
- return self.__session.execute(query, (datetime.now(), ))
-
- def selectUsersRegisteredLatest24Hours(self):
- # type: () -> namedtuple
- query = """
- SELECT COUNT(user_id) FROM YouTubeMDApp.User WHERE first_use >= (%s - 1d)
- """
- return self.__session.execute(query, (datetime.now(), ))
-
- def selectUsersRegisteredAYearAgo(self):
- # type: () -> namedtuple
- query = """
- SELECT COUNT(user_id) FROM YouTubeMDApp.User WHERE first_use >= (%s - 1y)
- """
- return self.__session.execute(query, (datetime.now(), ))
-
- def selectLatestRegisteredUSer(self):
- # type: () -> namedtuple
- query = """
- SELECT user_id FROM YouTubeMDApp.User WHERE first_use = (SELECT MAX(first_use) FROM YouTubeMDApp.User)
- """
- return self.__session.execute(query)
diff --git a/youtube_md_bot/db_script_pycharm.ddl b/youtube_md_bot/db_script_pycharm.ddl
deleted file mode 100644
index 0445840..0000000
--- a/youtube_md_bot/db_script_pycharm.ddl
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE KEYSPACE IF NOT EXISTS YouTubeMDApp WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
-USE YouTubeMDApp;
-CREATE TABLE IF NOT EXISTS history (user_id int NOT NULL, file_id varchar NOT NULL);
-CREATE TABLE IF NOT EXISTS metadata (title varchar, artist varchar, cover text, song_duration duration, music_file_id varchar NOT NULL, PRIMARY KEY (music_file_id));
-CREATE TABLE IF NOT EXISTS music (file_id varchar NOT NULL,video_id varchar, audio_quality int, audio_format int, times_requested counter, is_metadata_by_user boolean, PRIMARY KEY (file_id));
-CREATE TABLE IF NOT EXISTS playlist (playlist_unique_id UUID NOT NULL, playlist_id varchar NOT NULL, playlist_quality int, playlist_format int, number_elements int, times_requested counter, PRIMARY KEY (playlist_unique_id));
-CREATE TABLE IF NOT EXISTS playlist_has_music (playlist_unique_id UUID NOT NULL, music_file_id varchar NOT NULL);
-CREATE TABLE IF NOT EXISTS preferences (audio_quality varchar, audio_format varchar, os varchar, should_ask_metadata boolean, user_id int NOT NULL, PRIMARY KEY (user_id));
-CREATE TABLE IF NOT EXISTS "User" (user_id int NOT NULL, username varchar, name text, first_use datetime, PRIMARY KEY (user_id));
-CREATE TABLE IF NOT EXISTS Statistics (lang varchar, downloads counter, last_time_active datetime, user_id int NOT NULL, PRIMARY KEY(user_id));
\ No newline at end of file
diff --git a/youtube_md_bot/handlers/DeveloperHandler.py b/youtube_md_bot/handlers/DeveloperHandler.py
deleted file mode 100644
index 84ce8ef..0000000
--- a/youtube_md_bot/handlers/DeveloperHandler.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from telegram import Bot, Update, ParseMode
-from telegram.ext import run_async
-
-from handlers import Handler
-
-
-class DeveloperHandler(Handler):
- @run_async
- def develop(self, bot: Bot, update: Update):
- # to do
\ No newline at end of file
diff --git a/youtube_md_bot/handlers/HelpHandler.py b/youtube_md_bot/handlers/HelpHandler.py
deleted file mode 100644
index 1936603..0000000
--- a/youtube_md_bot/handlers/HelpHandler.py
+++ /dev/null
@@ -1,88 +0,0 @@
-from telegram import Bot, Update, ParseMode, InlineKeyboardMarkup, InlineKeyboardButton
-from telegram.ext import run_async
-
-from handlers import Handler
-
-
-class HelpHandler(Handler):
- @run_async
- def help(self, bot: Bot, update: Update, args: list):
- effective_user = update.effective_user
- user_id = effective_user.id
- lang = effective_user.language_code
-
- self.__update_operations.updateUserLastTimeActive(user_id)
-
- if len(args) == 0:
- self.show_help_keyboard(bot=bot, user_id=user_id, lang=lang)
- else:
- help_attribute = args[0]
- if help_attribute == "ta":
- self.show_help_title_artist(bot, user_id, lang)
- elif help_attribute == "url":
- self.show_help_url(bot, user_id, lang)
- elif help_attribute == 'h':
- self.show_help_history(bot, user_id, lang)
- elif help_attribute == "meta":
- self.show_help_metadata(bot, user_id, lang)
- else:
- self.__show_reply_unrecognized_attribute(bot, user_id, lang)
-
- def show_help_keyboard(self, bot: Bot, user_id: int, lang: str, message_id: int = None):
- help_message = self.__messages[lang][0]["help"]["msg"]
- tt_at_button = self.__messages[lang][0]["help"]["d_via_tt-at-but"]
- url_button = self.__messages[lang][0]["help"]["d_via_url-but"]
- history_button = self.__messages[lang][0]["help"]["d_via_history-but"]
- metadata_button = self.__messages[lang][0]["help"]["m_set_metadata-but"]
- support_button = self.__messages[lang][0]["help"]["support_but"]
-
- help_keyboard = InlineKeyboardMarkup([[InlineKeyboardButton(tt_at_button, callback_data="tt_at_button"),
- InlineKeyboardButton(url_button, callback_data="url_button")],
- [InlineKeyboardButton(history_button, callback_data="history_button"),
- InlineKeyboardButton(metadata_button, callback_data="metadata_button")],
- [InlineKeyboardButton(support_button, callback_data="support_button")]])
- if not message_id:
- bot.sendMessage(chat_id=user_id, text=help_message, reply_markup=help_keyboard,
- parse_mode=ParseMode.MARKDOWN)
- else:
- bot.editMessageText(text=help_message, chat_id=user_id, message_id=message_id,
- parse_mode=ParseMode.MARKDOWN)
-
- def show_help_title_artist(self, bot: Bot, user_id: int, lang: str, message_id: int = None):
- help_message = self.__messages[lang][0]["help"]["d_via_tt-at"]
- if not message_id:
- bot.sendMessage(chat_id=user_id, text=help_message, parse_mode=ParseMode.MARKDOWN)
- else:
- self.__show_keyboard_back_button(bot, user_id, lang, message_id, help_message)
-
- def show_help_url(self, bot: Bot, user_id: int, lang: str, message_id: int = None):
- help_message = self.__messages[lang][0]["help"]["d_via_url"]
- if not message_id:
- bot.sendMessage(chat_id=user_id, text=help_message, parse_mode=ParseMode.MARKDOWN)
- else:
- self.__show_keyboard_back_button(bot, user_id, lang, message_id, help_message)
-
- def show_help_history(self, bot: Bot, user_id: int, lang: str, message_id: int = None):
- help_message = self.__messages[lang][0]["help"]["d_via_history"]
- if not message_id:
- bot.sendMessage(chat_id=user_id, text=help_message, parse_mode=ParseMode.MARKDOWN)
- else:
- self.__show_keyboard_back_button(bot, user_id, lang, message_id, help_message)
-
- def show_help_metadata(self, bot: Bot, user_id: int, lang: str, message_id: int = None):
- help_message = self.__messages[lang][0]["help"]["m_set_metadata"]
- if not message_id:
- bot.sendMessage(chat_id=user_id, text=help_message, parse_mode=ParseMode.MARKDOWN)
- else:
- self.__show_keyboard_back_button(bot, user_id, lang, message_id, help_message)
-
- def __show_keyboard_back_button(self, bot: Bot, user_id: int, lang: str, message_id: int, text: str):
- back_button = self.__messages[lang][0]["help"]["back_button"]
-
- back_keyboard = InlineKeyboardMarkup([[InlineKeyboardButton(back_button, callback_data="help_back")]])
- bot.editMessageText(text=text, chat_id=user_id, message_id=message_id,
- parse_mode=ParseMode.MARKDOWN, reply_markup=back_keyboard)
-
- def __show_reply_unrecognized_attribute(self, bot: Bot, user_id: int, lang: str):
- unrecognized_text = self.__messages[lang][0]["help"]["h_unrecognized"]
- bot.sendMessage(chat_id=user_id, text=unrecognized_text, parse_mode=ParseMode.MARKDOWN)
diff --git a/youtube_md_bot/handlers/StartHandler.py b/youtube_md_bot/handlers/StartHandler.py
deleted file mode 100644
index f06e5ae..0000000
--- a/youtube_md_bot/handlers/StartHandler.py
+++ /dev/null
@@ -1,34 +0,0 @@
-from telegram import Bot, Update, ParseMode
-from telegram.ext import run_async
-
-from datetime import datetime
-
-from handlers import Handler
-from utils import Constants
-
-
-class StartHandler(Handler):
- def __init__(self, handler_messages: dict):
- super().__init__(handler_messages=handler_messages)
-
- @run_async
- def start(self, bot: Bot, update: Update):
- import os
- import pickle
-
- effective_user = update.effective_user
- user_id = effective_user.id
- username = effective_user.username
- name = effective_user.first_name
- lang = effective_user.language_code
-
- user_path = Constants.P_USERS_PATH + user_id + '/'
- db_insert = self.__insert_operations
- if not os.path.exists(user_path):
- os.mkdir(user_path)
- with open(user_path + Constants.P_USERS_FILE, "wb") as user_info:
- pickle.dump(Constants.D_USER_DICT, user_info)
- db_insert.registerNewUser(user_id=user_id, username=username, name=name)
- db_insert.registerStatistics(user_id, lang, 0, datetime.now())
- message = self.__messages[lang][0]["welcome"][0]["msg"].format(username)
- bot.sendMessage(chat_id=user_id, text=message, parse_mode=ParseMode.MARKDOWN)
diff --git a/youtube_md_bot/handlers/TextHandler.py b/youtube_md_bot/handlers/TextHandler.py
deleted file mode 100644
index 129622d..0000000
--- a/youtube_md_bot/handlers/TextHandler.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from telegram import Bot, Update, ParseMode
-from telegram.ext import run_async
-
-from handlers import Handler
-
-
-class TextHandler(Handler):
- @run_async
- def message_handler(self, bot: Bot, update: Update):
- text = update.message.text
diff --git a/youtube_md_bot/handlers/URLHandler.py b/youtube_md_bot/handlers/URLHandler.py
deleted file mode 100644
index d3cd07b..0000000
--- a/youtube_md_bot/handlers/URLHandler.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from telegram import Bot, Update, ParseMode
-from telegram.ext import run_async
-
-from handlers import Handler
-
-
-class URLHandler(Handler):
- @run_async
- def url_handler(self, bot: Bot, update: Update):
- message = update.message.text
diff --git a/youtube_md_bot/handlers/UnexpectedHandler.py b/youtube_md_bot/handlers/UnexpectedHandler.py
deleted file mode 100644
index a348364..0000000
--- a/youtube_md_bot/handlers/UnexpectedHandler.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from telegram import Bot, Update, ParseMode
-from telegram.ext import run_async
-
-from handlers import Handler
-
-
-class UnexpectedHandler(Handler):
- @run_async
- def unexpected(self, bot: Bot, update: Update):
- msg_type = update.message.text
diff --git a/youtube_md_bot/handlers/VideoIDHandler.py b/youtube_md_bot/handlers/VideoIDHandler.py
deleted file mode 100644
index 27ca7fb..0000000
--- a/youtube_md_bot/handlers/VideoIDHandler.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from telegram import Bot, Update, ParseMode
-from telegram.ext import run_async
-
-from handlers import Handler
-
-
-class VideoIDHandler(Handler):
- @run_async
- def video_handler(self, bot: Bot, update: Update):
- video_id = update.message.text
diff --git a/youtube_md_bot/handlers/__init__.py b/youtube_md_bot/handlers/__init__.py
deleted file mode 100644
index ba8141d..0000000
--- a/youtube_md_bot/handlers/__init__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from database import InsertOperations, SelectOperations, UpdateOperations
-
-
-class Handler:
- def __init__(self, handler_messages: dict):
- self.__messages = handler_messages
- self.__insert_operations: InsertOperations = InsertOperations()
- self.__update_operations: UpdateOperations = UpdateOperations()
- self.__select_operations: SelectOperations = SelectOperations()
diff --git a/youtube_md_bot/messages/messages.json b/youtube_md_bot/messages/messages.json
deleted file mode 100644
index bbaabc6..0000000
--- a/youtube_md_bot/messages/messages.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "es": [
- {
- "welcome": [
- {
- "msg": "Hola, bienvenido {} 😄\nUsa el comando /help para *obtener más ayuda* o empieza a *usar el bot* ya mismo 🎶\n\nSi quieres estar al tanto de las _últimas noticias_ sobre el bot, échale un vistazo al canal oficial: @ytMDBot"
- }
- ],
- "help": [
- {
- "msg": "Para descargar una canción puedes:\n ■ *Buscar* 🔎 la canción por _título y artista_, enviándoselo directamente al bot\n ■ *Enviar* directamente la _URL_ 🔗 del vídeo\n ■ Seleccionar una *canción ya descargada* desde el historial 🕒\n\nPara más ayuda, navega con los botones que aparecen debajo",
- "d_via_tt-at-but": "Título y artista 🗣🎤",
- "d_via_url-but": "URL 🔗",
- "d_via_history-but": "Historial 🕒",
- "m_set_metadata-but": "Metadatos 🏷",
- "support_but": "Soporte 🛠",
- "back_button": "◀ Atrás",
- "d_via_tt-at": "*Descarga*[ ]({})canciones enviando directamente el _título_ 🎤 y _artista_ 🗣 de la canción al bot.\n\n_Puedes obtener esta información escribiendo:_ `/help ta` (*t*itle, *a*rtist)",
- "d_via_url": "Comienza[ ]({})directamente *con la descarga* enviando la URL del vídeo de YouTube\n\nPuedes usar un bot _inline_ como @vid para agilizar este proceso.\n\n_Puedes obtener esta información escribiendo:_ `/help url`",
- "d_via_history": "Accede[ ]({})a tu *historial* mediante el comando /history, desde donde podrás _seleccionar directamente_ la canción que quieras descargar.\n\n_Puedes obtener esta información escribiendo:_ `/help h` (*h*istory)",
- "m_set_metadata": "Cambia los metadatos de una canción al descargarla:\n\n ■ Cambia *las preferencias* ⚙ usando /config\n ■ Cuando _descargues un vídeo_, se te preguntará por las preferencias. Indica el título usando /t:\n `/t titulo`\n Indica el artista usando /a:\n `/a artista`\n ■ Se te *preguntará* si quieres usar la _miniatura de YouTube_ como carátula de tu canción.\n\n_Puedes obtener esta información escribiendo:_ `/help meta` (*meta*data)",
- "h_unrecognized": "No se reconoce el atributo. La lista de opciones disponibles es:\n\n ■ `/help ta`, para título y artista 🗣🎤\n ■ `/help url`, para URL 🔗\n ■ `/help h`, para historial 🕒\n ■ `/help meta`, para metadatos 🏷"
- }
- ]
- }
- ],
- "en": [
- {
-
- }
- ]
-}
\ No newline at end of file
diff --git a/youtube_md_bot/out/__init__.py b/youtube_md_bot/out/__init__.py
deleted file mode 100644
index eb35c7e..0000000
--- a/youtube_md_bot/out/__init__.py
+++ /dev/null
@@ -1,27 +0,0 @@
-class Colors:
- RED = "red"
- BLUE = "blue"
- GREEN = "green"
- WARNING = "warning"
- FAIL = "fail"
- BOLD = "bold"
- UNDERLINE = "underline"
- RESET_ALL = "reset_all"
-
-
-class OutputColors:
- colors = {Colors.RED: '\033[95m',
- Colors.BLUE: '\033[94m',
- Colors.GREEN: '\033[92m',
- Colors.WARNING: '\033[93m',
- Colors.FAIL: '\033[91m',
- Colors.BOLD: '\033[1m',
- Colors.UNDERLINE: '\033[4m',
- Colors.RESET_ALL: '\033[0m'}
-
-
-def cPrint(text: str, color: Colors = None):
- colors = OutputColors.colors
- if color is None:
- color = colors[Colors.RESET_ALL]
- print(colors[color] + text + colors[Colors.RESET_ALL])
diff --git a/youtube_md_bot/requirements.txt b/youtube_md_bot/requirements.txt
deleted file mode 100644
index d948e9a..0000000
--- a/youtube_md_bot/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-cassandra-driver
-telegram
-pip
-python-telegram-bot
diff --git a/youtube_md_bot/upgrader/__init__.py b/youtube_md_bot/upgrader/__init__.py
deleted file mode 100644
index eb5c8b3..0000000
--- a/youtube_md_bot/upgrader/__init__.py
+++ /dev/null
@@ -1,10 +0,0 @@
-class PiPUpgrader:
- def __init__(self, file: str):
- self.__file = file
-
- def upgradePackages(self):
- import subprocess
- with open(self.__file, 'r') as f:
- requirements = f.read().splitlines()
- for requirement in requirements:
- subprocess.run(("pip install -U " + requirement).split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
diff --git a/youtube_md_bot/utils/__init__.py b/youtube_md_bot/utils/__init__.py
deleted file mode 100644
index 6fa6d52..0000000
--- a/youtube_md_bot/utils/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-import logging
-
-
-class Constants:
- P_USERS_PATH = "user_data/"
- P_USERS_FILE = "user_info.json"
-
- D_USER_DICT = {"state": 0,
- "is_downloading_video": False,
- "pending_videos": 0}
-
- A_APP_VERSION = "0.2"
- A_APP_TAG = "development"
- A_APP_TAG_R = "d"
- A_APP_DATA_FILE = "app_data.dict"
- A_APP_REQ_FILE = "requirements.txt"
- A_APP_MESSAGES = "messages/messages.json"
-
- L_PRIMARY_LOGGER_NAME = "pLog"
- L_PRIMARY_LOGGER_MODE = logging.DEBUG
- L_PRIMARY_LOGGER_FILENAME = "youtube-debug-log.log"
- L_SECONDARY_LOGGER_NAME = "sLog"
- L_SECONDARY_LOGGER_MODE = logging.WARNING
diff --git a/youtube_md_bot/utils/logger.py b/youtube_md_bot/utils/logger.py
deleted file mode 100644
index fad942d..0000000
--- a/youtube_md_bot/utils/logger.py
+++ /dev/null
@@ -1,37 +0,0 @@
-import logging
-
-
-def setup_logging(logger_name: str, log_file: str=None, level: logging=logging.DEBUG, logging_format: str=None):
- if logging_format is None:
- logging_format = "%(asctime)s | %(name)s | [%(levelname)s]: %(message)s"
- if log_file is None:
- __setup_logging_no_file(logger_name, level, logging_format)
- else:
- new_logging = logging.getLogger(logger_name)
- logging_formatter = logging.Formatter(logging_format)
- logging_file_handler = logging.FileHandler(log_file, mode='w')
-
- logging_file_handler.setFormatter(logging_formatter)
-
- new_logging.setLevel(level)
- new_logging.addHandler(logging_file_handler)
- __cleanup_old_logs(new_logging, log_file)
-
-
-def __setup_logging_no_file(logger_name: str, level: logging=logging.DEBUG, logging_format: str=None):
- if logging_format is None:
- raise ValueError("The first time a logger is created, the logging format cannot be None")
- new_logging = logging.getLogger(logger_name)
- logging_formatter = logging.Formatter(logging_format)
- logging_console_handler = logging.StreamHandler()
-
- logging_console_handler.setFormatter(logging_formatter)
-
- new_logging.setLevel(level)
- new_logging.addHandler(logging_console_handler)
-
-
-def __cleanup_old_logs(logger: logging.Logger, filename: str):
- from logging import handlers
- rotating_handler = handlers.RotatingFileHandler(filename, maxBytes=2048, backupCount=5)
- logger.addHandler(rotating_handler)