diff --git a/backend/src/api_types.py b/backend/src/api_types.py index e3ef3310..69152eac 100644 --- a/backend/src/api_types.py +++ b/backend/src/api_types.py @@ -27,7 +27,7 @@ class ProteinEntry(CamelModel): name: str length: int mass: float - species_name: str | None = None + species_name: str content: str | None = None refs: str | None = None @@ -58,5 +58,7 @@ class UploadStatus(CamelModel): class EditBody(CamelModel): old_name: str # so we can identify the exact row we need to change new_name: str + old_species_name: str # so we can identify the exact row we need to change + new_species_name: str new_content: str | None = None new_refs: str | None = None diff --git a/backend/src/server.py b/backend/src/server.py index f9537d79..1b00ae08 100644 --- a/backend/src/server.py +++ b/backend/src/server.py @@ -213,8 +213,8 @@ def edit_protein_entry(body: EditBody): if body.new_name != body.old_name: os.rename(pdb_file_name(body.old_name), pdb_file_name(body.new_name)) - name_changed = False with Database() as db: + name_changed = False if body.new_name != body.old_name: db.execute( """UPDATE proteins SET name = %s WHERE name = %s""", @@ -225,6 +225,15 @@ def edit_protein_entry(body: EditBody): ) name_changed = True + if body.new_species_name != body.old_species_name: + db.execute( + """UPDATE species_proteins SET species_id = (SELECT id FROM species WHERE name = %s) WHERE protein_id = (SELECT id FROM proteins WHERE name = %s)""", + [ + body.new_species_name, + body.old_name if not name_changed else body.new_name, + ], + ) + if body.new_content is not None: db.execute( """UPDATE proteins SET content = %s WHERE name = %s""", diff --git a/frontend/src/routes/edit/[proteinName]/+page.svelte b/frontend/src/routes/edit/[proteinName]/+page.svelte index 9a33f54b..f8c2e781 100644 --- a/frontend/src/routes/edit/[proteinName]/+page.svelte +++ b/frontend/src/routes/edit/[proteinName]/+page.svelte @@ -1,6 +1,6 @@ @@ -64,6 +78,22 @@ > {/if} + + + + Select a Species + {#if allSpecies} + ({ name: s, value: s }))} + bind:value={species} + /> + {:else} + Error loading species + {/if} + + + @@ -71,17 +101,12 @@ { if (entry) { - if ( - name === entry.name && - content === ogContent && - refs === ogRefs - ) - return; // no changes no edits! - try { const err = await Backend.editProteinEntry({ newName: name, oldName: entry.name, + newSpeciesName: species, + oldSpeciesName: ogSpecies, newContent: content !== ogContent ? content : undefined, newRefs: refs !== ogRefs ? refs : undefined, }); @@ -97,10 +122,7 @@ } } }} - disabled={(name === entry.name && - content === ogContent && - refs === ogRefs) || - name.length === 0}>Edit ProteinEdit Protein goto(`/protein/${name}`)}>Cancel - Select a Species