Initial commit of akmon project

This commit is contained in:
2026-01-20 08:04:15 +08:00
commit 77a2bab985
1309 changed files with 343305 additions and 0 deletions

208
doc_eldercare/rpc_elder.sql Normal file
View 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. 鑾峰彇鍋ュ悍妗<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;