diff --git a/README.md b/README.md index 9a9f41e..ce10295 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ At the moment, an alpha version is undertaken, with these features: - display, if work or movement is mastered from active user when viewing works and movements - Works are shown sorted by composer and opus/work_directory-number (`s`, `smo`) or by composer and collection (`sm`) - Remove work or movement from being mastered for active user (`r number_of_work` or `r number_of_work number_of_movement`) -- (planned) Remove user +- Remove user (`delete_my_user_record_including_all_mastered_works`) - (planned) Fix known bugs _(planned) Release piano_repertoire_cli V 0.0.1 alpha (learn about versioning before)_ diff --git a/rep_cli.py b/rep_cli.py index ef2f46b..4134bfa 100644 --- a/rep_cli.py +++ b/rep_cli.py @@ -9,6 +9,7 @@ class Session: self.resultstring = 'no results yet' self.commands = {'a': (self.set_user, 'Set an active user\n Usage: a number_of_user'), 'c': (self.show_composers, 'Shows composers'), + 'delete_my_user_record_including_all_mastered_works': (self.delete_user, 'DangerZone: deletes user and all marks of mastered works'), 'h': (self.show_help, 'Displays this help document'), 'm': (self.mark_work_as_mastered, 'Marks work or movement as mastered for the active user\n Usage: m number_of_work, m number_of_work number_of_movement'), 'n': (self.create_new_user, 'Creates new user\n Usage: n firstname name'), @@ -81,6 +82,21 @@ class Session: self.db_agent.execute(sql_command) return f'Created new user {first_name} {name}.' + def delete_user(self, _): + resultstring = '' + if self.user == -1: + resultstring += 'Please activate user' + else: + user_name = self.get_active_user() + sql_command = f''' + DELETE FROM pianist + WHERE id = {self.user} + ''' + self.db_agent.execute(sql_command) + resultstring += f'Deleted user {user_name}' + return resultstring + + def show_composers(self, _): sql_command = ''' SELECT id, first_name, name @@ -406,6 +422,8 @@ def command_line_loop(session): def main(): con = sqlite3.connect('repertoire.db') db_agent = con.cursor() + sql_command = 'PRAGMA foreign_keys = ON' + db_agent.execute(sql_command) session = Session(db_agent) command_line_loop(session) con.commit() diff --git a/repertoire.sql b/repertoire.sql index 6f831c3..7d8d747 100644 --- a/repertoire.sql +++ b/repertoire.sql @@ -52,7 +52,7 @@ CREATE TABLE is_able_to_play( recording VARCHAR(255), PRIMARY KEY(work_id, mov_id, pianist_id), FOREIGN KEY(work_id, mov_id) REFERENCES movement(work_id, mov_number), - FOREIGN KEY(pianist_id) REFERENCES pianist(id) + FOREIGN KEY(pianist_id) REFERENCES pianist(id) ON DELETE CASCADE ); CREATE TABLE plays_in( @@ -63,5 +63,5 @@ CREATE TABLE plays_in( PRIMARY KEY(concert_id, pianist_id, work_id, mov_id), FOREIGN KEY(concert_id) REFERENCES concert(id), FOREIGN KEY(work_id, mov_id) REFERENCES movement(work_id, mov_number), - FOREIGN KEY(pianist_id) REFERENCES pianist(id) + FOREIGN KEY(pianist_id) REFERENCES pianist(id) ON DELETE CASCADE );