new feature: delete user including all other related records

This commit is contained in:
2023-11-16 10:56:29 +01:00
parent 6129b70f8a
commit c6057ff8f7
3 changed files with 21 additions and 3 deletions

View File

@@ -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)_

View File

@@ -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()

View File

@@ -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
);