gachore/src/pages/event/page/claim_all.astro
2025-05-15 07:42:32 -05:00

53 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} />