Gabinet dentystyczny - usuwanie pacjentów i wizyt

Nadszedł czas na implementację usuwania pacjentów oraz wizyt.
Usuwanie nie będzie tak naprawdę usuwaniem, lecz ukrywaniem - dodatkowa, boolowska kolumna deleted w tabelach patient oraz visit będzie flagą oznaczającą “usunięty” rekord w bazie. Dzięki temu omyłkowe usunięcie będzie “odwracalne”.
Zmiany w SQL
Zmiana schematu bazy
Konieczna będzie mała zmiana schematu: każdaą encję poszerzam o pole deleted:
create table if not exists patient (
id integer primary key,
name string not null,
surname string not null,
birthdate date not null,
note_id integer,
deleted boolean default false,
foreign key(note_id) references note(id)
);
create table if not exists note (
id integer primary key,
deleted boolean default false,
text string not null
);
create table if not exists visit (
id integer primary key,
vdatetime datetime not null default CURRENT_TIMESTAMP,
patient_id integer not null,
note_id integer,
deleted boolean default false,
foreign key(patient_id) references patient(id),
foreign key(note_id) references note(id)
);Zmiana zapytań pobierających pacjentów
Zapytanie o listę pacjentów uwzględnia tylko te wiersze, dla których deleted=false:
select
p.id, p.name, p.surname, p.birthdate, n.id, n.text
from
patient p
left join
note n
on
p.note_id = n.id
where
p.id=? and p.deleted=falsePodobnie będzie z listą wizyt: wyświetlam jedynie nieusunięte wiersze nieusuniętych pacjentów:
select
v.id, v.vdatetime, v.patient_id, v.note_id, n.text, p.name, p.surname
from
visit v
left join
note n
on
v.note_id=n.id
left join
patient p
on
v.patient_id=p.id
where
(v.deleted = false) and (p.deleted = false)Przy małym rozmiarze bazy i założonym przypadku użycia (hipotetyczny stomatolog obsługuje regulanie grupę kilkudziesięciu bądź nawet kilkuset pacjentów) nie będzie to znacząco wpływało na wydajność czy rozmiar pliku z bazą SQLite. Baza będzie więc add-only.
Interfejs użytkownika na razie nie daje możliwości przywrócenia usuniętych (ukrytych) wierszy, ale to w przyszłości może się zmienić.
Screenshoty
Usuwanie wizyty
W każdym wierszu tabeli dodałam przycisk usuwania, który w html-u jest częścią formularza generującego żądanie POST do endpointu (dla wizyty nr 5) /visits/5/delete:
Po usunięciu wizyty
Na liście wizyt nie pojawia się usunięta wizyta:
Usuwanie pacjenta
Podobnie jest z usuwaniem pacjenta.
Widok pacjentów po usunięciu pacjenta
Widok wizyt
Usunięcie pacjenta skutkuje oczywiście “zniknięciem” przypisanych do niego wizyt w widoku wizyt:
Inne zmiany
Do programu dodałam też favicon (moduł github.com/thinkerou/favicon), co wymagało dodania jednego wiersza kodu:
r.Use(favicon.New("assets/favicon.ico"))A także - w templejcie header.tmpl - odnośnik do fontawesome:
<script defer src="https://use.fontawesome.com/releases/v5.3.1/js/all.js"></script> This text is part of the series gabinet...
- 2021-13-09 - Gabinet dentystyczny - zapis zmian i podsumowanie
- 2021-11-09 - Gabinet dentystyczny - Legenda
- 2021-07-09 - Gabinet dentystyczny - diagram
- 2021-27-08 - Gabinet dentystyczny - przygotowania do rysowania diagramu
- 2021-26-08 - Gabinet dentystyczny - usuwanie pacjentów i wizyt
- 2021-23-08 - Gabinet dentystyczny - dodanie wizyt
- 2021-15-08 - Gabinet dentystyczny - prosta aplikacja webowa w Go