Initial commit of akmon project
This commit is contained in:
208
doc_eldercare/rpc_elder.sql
Normal file
208
doc_eldercare/rpc_elder.sql
Normal file
@@ -0,0 +1,208 @@
|
||||
-- 鍏昏€佺<E282AC>鐞嗙郴缁熻€佷汉绔<E6B189>浉鍏砇PC鍑芥暟
|
||||
-- 閫傜敤浜<E695A4> supabase/postgresql
|
||||
|
||||
-- 1. 鑾峰彇鑰佷汉鍩烘湰淇℃伅
|
||||
drop function if exists get_elder_info(uuid);
|
||||
create or replace function get_elder_info(elder_id uuid)
|
||||
returns table (
|
||||
id uuid,
|
||||
name text,
|
||||
gender text,
|
||||
birthday date,
|
||||
room_number text,
|
||||
status text
|
||||
) as $$
|
||||
begin
|
||||
return query
|
||||
select
|
||||
e.id,
|
||||
e.name,
|
||||
e.gender,
|
||||
e.birthday,
|
||||
e.room_number,
|
||||
e.status
|
||||
from public.ec_elders e
|
||||
where e.id = elder_id or e.user_id = elder_id
|
||||
limit 1;
|
||||
end;
|
||||
$$ language plpgsql stable;
|
||||
|
||||
-- 2. 鑾峰彇鐢熷懡浣撳緛鍘嗗彶
|
||||
drop function if exists get_vital_history(uuid, int);
|
||||
create or replace function get_vital_history(elder_id uuid, limit_count int default 20)
|
||||
returns setof public.ec_vital_signs as $$
|
||||
begin
|
||||
return query
|
||||
select *
|
||||
from public.ec_vital_signs
|
||||
where elder_id = get_vital_history.elder_id
|
||||
order by measured_at desc
|
||||
limit limit_count;
|
||||
end;
|
||||
$$ language plpgsql stable;
|
||||
|
||||
-- 3. 鑾峰彇鍋ュ悍妗f<E5A697>
|
||||
drop function if exists get_health_records(uuid);
|
||||
create or replace function get_health_records(elder_id uuid)
|
||||
returns setof public.ec_health_records as $$
|
||||
begin
|
||||
return query
|
||||
select *
|
||||
from public.ec_health_records
|
||||
where elder_id = get_health_records.elder_id
|
||||
order by record_date desc;
|
||||
end;
|
||||
$$ language plpgsql stable;
|
||||
|
||||
-- 4. 鑾峰彇鍋ュ悍棰勮<E6A3B0>
|
||||
drop function if exists get_health_alerts(uuid);
|
||||
create or replace function get_health_alerts(elder_id uuid)
|
||||
returns setof public.ec_health_alerts as $$
|
||||
begin
|
||||
return query
|
||||
select *
|
||||
from public.ec_health_alerts
|
||||
where elder_id = get_health_alerts.elder_id
|
||||
order by created_at desc;
|
||||
end;
|
||||
$$ language plpgsql stable;
|
||||
|
||||
-- 5. 鑾峰彇鏈€杩戠敓鍛戒綋寰侊紙浠<E7B499>〃鏉垮崱鐗囷級
|
||||
drop function if exists get_recent_vitals(uuid, int);
|
||||
create or replace function get_recent_vitals(elder_id uuid, limit_count int default 3)
|
||||
returns setof public.ec_vital_signs as $$
|
||||
begin
|
||||
return query
|
||||
select *
|
||||
from public.ec_vital_signs
|
||||
where elder_id = get_recent_vitals.elder_id
|
||||
order by measured_at desc
|
||||
limit limit_count;
|
||||
end;
|
||||
$$ language plpgsql stable;
|
||||
|
||||
-- 6. 鑾峰彇浠婃棩娲诲姩
|
||||
drop function if exists get_elder_activities(uuid, date);
|
||||
create or replace function get_elder_activities(elder_id uuid, date date)
|
||||
returns setof public.ec_activities as $$
|
||||
begin
|
||||
return query
|
||||
select a.*
|
||||
from public.ec_activities a
|
||||
join public.ec_activity_participations p on a.id = p.activity_id
|
||||
where p.elder_id = get_elder_activities.elder_id
|
||||
and date(a.start_time) = get_elder_activities.date
|
||||
order by a.start_time asc;
|
||||
end;
|
||||
$$ language plpgsql stable;
|
||||
|
||||
-- 7. 鑾峰彇浠婃棩鐢ㄨ嵂
|
||||
drop function if exists get_elder_medications(uuid, date);
|
||||
create or replace function get_elder_medications(elder_id uuid, date date)
|
||||
returns setof public.ec_medications as $$
|
||||
begin
|
||||
return query
|
||||
select m.*
|
||||
from public.ec_medications m
|
||||
where m.elder_id = get_elder_medications.elder_id
|
||||
and (m.start_date is null or m.start_date <= get_elder_medications.date)
|
||||
and (m.end_date is null or m.end_date >= get_elder_medications.date)
|
||||
order by m.medication_name asc;
|
||||
end;
|
||||
$$ language plpgsql stable;
|
||||
|
||||
-- 8. 鑾峰彇鍒嗛厤鎶ょ悊鍛<E6828A>
|
||||
drop function if exists get_assigned_caregiver(uuid);
|
||||
create or replace function get_assigned_caregiver(elder_id uuid)
|
||||
returns table (
|
||||
id uuid,
|
||||
employee_id text,
|
||||
name text,
|
||||
phone text,
|
||||
department text,
|
||||
specialization text,
|
||||
shift text
|
||||
) as $$
|
||||
begin
|
||||
return query
|
||||
select c.id, c.employee_id, c.name, c.phone, c.department, c.specialization, c.work_shift as shift
|
||||
from public.ec_caregivers c
|
||||
join public.ec_elders e on c.id = e.caregiver_id
|
||||
where e.id = get_assigned_caregiver.elder_id
|
||||
limit 1;
|
||||
end;
|
||||
$$ language plpgsql stable;
|
||||
|
||||
-- 9. 鑾峰彇寰呭<E5AFB0>鐞嗘湇鍔¤<E98D94>姹傛暟
|
||||
drop function if exists get_pending_requests_count(uuid);
|
||||
create or replace function get_pending_requests_count(elder_id uuid)
|
||||
returns table (count int) as $$
|
||||
begin
|
||||
return query
|
||||
select count(*)
|
||||
from public.ec_service_requests
|
||||
where elder_id = get_pending_requests_count.elder_id
|
||||
and status = 'pending';
|
||||
end;
|
||||
$$ language plpgsql stable;
|
||||
|
||||
-- 10. 鏍囪<E98F8D>鐢ㄨ嵂宸叉湇鐢<E6B987>
|
||||
drop function if exists update_medication_status(uuid, text, timestamptz);
|
||||
create or replace function update_medication_status(medication_id uuid, status text, taken_time timestamptz)
|
||||
returns void as $$
|
||||
begin
|
||||
update public.ec_medications
|
||||
set status = update_medication_status.status,
|
||||
updated_at = now()
|
||||
where id = update_medication_status.medication_id;
|
||||
end;
|
||||
$$ language plpgsql volatile;
|
||||
|
||||
-- 11. 鍒涘缓绱ф€ュ懠鍙<E687A0>
|
||||
drop function if exists create_emergency_call(uuid, text, text);
|
||||
create or replace function create_emergency_call(elder_id uuid, type text, description text)
|
||||
returns void as $$
|
||||
begin
|
||||
insert into public.ec_emergency_calls (elder_id, type, description, created_at)
|
||||
values (elder_id, type, description, now());
|
||||
end;
|
||||
$$ language plpgsql volatile;
|
||||
|
||||
-- 12. 鍒涘缓鏈嶅姟璇锋眰
|
||||
drop function if exists create_service_request(uuid, text, text, text);
|
||||
create or replace function create_service_request(elder_id uuid, type text, priority text, description text)
|
||||
returns void as $$
|
||||
begin
|
||||
insert into public.ec_service_requests (elder_id, type, priority, description, status, created_at)
|
||||
values (elder_id, type, priority, description, 'pending', now());
|
||||
end;
|
||||
$$ language plpgsql volatile;
|
||||
|
||||
-- 13. 护理员查询所有老人信息
|
||||
drop function if exists caregiver_get_all_elders();
|
||||
create or replace function caregiver_get_all_elders()
|
||||
returns table (
|
||||
id uuid,
|
||||
name text,
|
||||
gender text,
|
||||
birthday date,
|
||||
room_number text,
|
||||
bed_number text,
|
||||
care_level text,
|
||||
status text
|
||||
) as 100
|
||||
begin
|
||||
return query
|
||||
select
|
||||
e.id,
|
||||
e.name,
|
||||
e.gender::text,
|
||||
e.birthday,
|
||||
e.room_number::text,
|
||||
e.bed_number::text,
|
||||
e.care_level::text,
|
||||
e.status::text
|
||||
from public.ec_elders e
|
||||
order by e.room_number, e.bed_number;
|
||||
end;
|
||||
100 language plpgsql stable;
|
||||
Reference in New Issue
Block a user