Files
akmon/doc_eldercare/rpc_elder.sql
2026-01-20 08:04:15 +08:00

209 lines
5.8 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 鍏昏€佺<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. 鑾峰彇鍋ュ悍妗<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;