| Version 2 (modified by , 14 months ago) ( diff ) |
|---|
Стартување на возење
Само корисник со улога патник може да започне возење. Прво одбира билет со кој сака да се вози. Потоа бира постојка на која се качува и откога ќе одбере постојка му се листаат сите активни инстанци на линии кои се уште не ја поминале таа станица.
Тригер во база:
Пред да се внесе возењето во база се извршува тригер во база за да се провери валидноста на билетот:
create or replace function check_expiry_date() returns trigger
as
$$
begin
if exists(
select 1
from vozenje v
where v.patnik_id = new.patnik_id and v.end_date is null
) then
update vozenje set end_date = now(), status = 'FINISHED' where id in (select v.id
from vozenje v
where v.patnik_id = new.patnik_id and v.end_date is null);
end if;
if exists(
select 1
from bilet
where id = new.bilet_id and datum_aktivacija is null
) then
update bilet set datum_aktivacija = now(), status = 'ACTIVE' where id = new.bilet_id;
end if;
if exists(
select 1
from bilet b
join tipbilet tb on b.tip_id = tb.id
where b.id = new.bilet_id and ((b.datum_aktivacija + (tb.trajnost || ' milliseconds')::interval) < now())
) then
update bilet set status = 'EXPIRED' where id = new.bilet_id;
end if;
if exists(
select 1
from bilet b
join tipbilet tb on b.tip_id = tb.id
where b.id = new.bilet_id and ((b.datum_aktivacija + (tb.trajnost || ' milliseconds')::interval) < now())
) then
RAISE exception 'Ticket is expired';
end if;
return new;
end;
$$ language plpgsql;
create or replace trigger check_validity_of_ticket
before insert on vozenje
for each row
execute function check_expiry_date();
Query за да се добијат потрбните инстанци на линии:
@Query(
value =
"""
select distinct inl.id
from instanca_na_linija inl
join instanca_na_linija_postojka_na_linija inlpnl on inl.id = inlpnl.instanca_na_linija_id
where end_date is null
and linija_id in (
select distinct(pnl.linija_id)
from postojka_na_linija pnl
where postojka_id = ?1
)
except
select inl.id
from postojka_na_linija pnl
join instanca_na_linija inl on inl.linija_id = pnl.linija_id and inl.pravec_id = pnl.pravec_id
join instanca_na_linija_postojka_na_linija inlpnl on inl.id = inlpnl.instanca_na_linija_id and pnl.id = inlpnl.postojka_na_linija_id
where inl.end_date is null and postojka_id = ?1;
""",
nativeQuery = true,
)
fun findIncomingRouteInstancesForStation(stationId: Int): List<Long>
Attachments (1)
- старт-возење.png (71.7 KB ) - added by 14 months ago.
Download all attachments as: .zip
Note:
See TracWiki
for help on using the wiki.

