54 lines
1.6 KiB
Text
54 lines
1.6 KiB
Text
|
|
---
|
||
|
|
export const prerender = false;
|
||
|
|
export const partial = true;
|
||
|
|
|
||
|
|
import ClaimAllButton from '../../page/claim_all_button.astro';
|
||
|
|
|
||
|
|
import { Page } from '../../../lib/Page';
|
||
|
|
import { squish } from '../../../lib/tags';
|
||
|
|
|
||
|
|
const pageId = Astro.url.searchParams.get('page');
|
||
|
|
|
||
|
|
|
||
|
|
const questClaims = Page.db.query(squish`
|
||
|
|
update quests set claimed = true where id in (
|
||
|
|
select qs.id from quests qs
|
||
|
|
join questlines ql on ql.id = qs.questline_id
|
||
|
|
join pages ps on ps.id = ql.page_id
|
||
|
|
where qs.completed = true
|
||
|
|
and qs.claimed = false
|
||
|
|
and ps.id = ?
|
||
|
|
)
|
||
|
|
returning id, coins_reward;
|
||
|
|
`).values(pageId);
|
||
|
|
const claimQuestCoins = Page.db.query(squish`
|
||
|
|
insert into events(kind, quest_id, coins_claimed)
|
||
|
|
values ('claim_quest', ?, ?)
|
||
|
|
`);
|
||
|
|
Page.db.transaction(claims => {
|
||
|
|
for(const [id, coins] of claims) claimQuestCoins.run(id, coins)
|
||
|
|
})(questClaims);
|
||
|
|
|
||
|
|
const questlineClaims = Page.db.query(squish`
|
||
|
|
update questlines set claimed = true where id in (
|
||
|
|
select ql.id from questlines ql
|
||
|
|
join pages ps on ps.id = ql.page_id
|
||
|
|
where ps.id = ?
|
||
|
|
and ql.claimed = false
|
||
|
|
and (select min(completed) from quests qs where qs.questline_id = ql.id) = 1
|
||
|
|
)
|
||
|
|
returning id, coins_reward
|
||
|
|
`).values(pageId);
|
||
|
|
const claimQuestlineCoins = Page.db.query(squish`
|
||
|
|
insert into events(kind, questline_id, coins_claimed)
|
||
|
|
values ('claim_questline', ?, ?)
|
||
|
|
`);
|
||
|
|
Page.db.transaction(claims => {
|
||
|
|
for(const [id, coins] of claims) claimQuestlineCoins.run(id, coins)
|
||
|
|
})(questlineClaims);
|
||
|
|
|
||
|
|
Astro.response.headers.set('HX-Trigger', 'claimedAll, questClaimed, bankUpdate');
|
||
|
|
---
|
||
|
|
|
||
|
|
<ClaimAllButton page={pageId} />
|