Skip to content

Commit

Permalink
refac: simplify if someone can edit or not
Browse files Browse the repository at this point in the history
  • Loading branch information
xnought committed Dec 2, 2023
1 parent ab43999 commit 6e78aec
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 17 deletions.
4 changes: 3 additions & 1 deletion backend/src/api_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
11 changes: 10 additions & 1 deletion backend/src/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -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""",
Expand All @@ -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""",
Expand Down
50 changes: 36 additions & 14 deletions frontend/src/routes/edit/[proteinName]/+page.svelte
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script lang="ts">
import { Backend, UploadError, type ProteinEntry } from "$lib/backend";
import { Button, Input, Label, Helper } from "flowbite-svelte";
import { Button, Input, Label, Helper, Select } from "flowbite-svelte";
import { goto } from "$app/navigation";
import { onMount } from "svelte";
import ArticleEditor from "$lib/ArticleEditor.svelte";
Expand All @@ -9,17 +9,20 @@
// and reuploaded/edited
export let data;
let name: string;
// store original too so we can see if the user changed/edited the content
let name: string;
let ogName: string;
let ogContent: string;
let content: string;
let ogRefs: string;
let refs: string;
let ogSpecies: string;
let species: string;
let uploadError: UploadError | undefined;
let entry: ProteinEntry | null = null;
let error = false;
let allSpecies: string[] | null;
// when this component mounts, request protein wikipedia entry from backend
onMount(async () => {
Expand All @@ -32,14 +35,25 @@
error = true;
} else {
name = entry.name;
ogName = name;
content = entry.content ?? "";
ogContent = content; // log original content
refs = entry.refs ?? "";
ogRefs = refs; // log original refs
species = entry.speciesName;
ogSpecies = species;
}
allSpecies = await Backend.getAllSpecies();
});
$: changed =
name !== ogName ||
content !== ogContent ||
refs !== ogRefs ||
species !== ogSpecies;
</script>

<section>
Expand All @@ -64,24 +78,35 @@
>
{/if}
</div>

<div class="flex gap-5 mb-2">
<div>
<Label for="species-select" class="mb-2">Select a Species</Label>
{#if allSpecies}
<Select
id="species-select"
items={allSpecies.map((s) => ({ name: s, value: s }))}
bind:value={species}
/>
{:else}
<Helper color="red">Error loading species</Helper>
{/if}
</div>
</div>

<div>
<ArticleEditor bind:content bind:refs />
</div>
<div>
<Button
on:click={async () => {
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,
});
Expand All @@ -97,10 +122,7 @@
}
}
}}
disabled={(name === entry.name &&
content === ogContent &&
refs === ogRefs) ||
name.length === 0}>Edit Protein</Button
disabled={!changed || name.length === 0}>Edit Protein</Button
>

<Button outline on:click={() => goto(`/protein/${name}`)}>Cancel</Button
Expand Down
1 change: 0 additions & 1 deletion frontend/src/routes/upload/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
{/if}
</div>

<!-- Species dropdown (hardcoded, not hooked up to backend for now) -->
<div class="flex gap-5 mb-2">
<div>
<Label for="species-select" class="mb-2">Select a Species</Label>
Expand Down

0 comments on commit 6e78aec

Please sign in to comment.