feat(rubgram): change free submission strategy to counter

This commit is contained in:
2026-04-13 21:04:18 +07:00 Unverified
parent bb55b493f2
commit 4c4d443ec7
5 changed files with 19 additions and 8 deletions
+1 -1
View File
@@ -236,7 +236,7 @@ export function LimitManager({
<SidebarMenuBadge>
{length}
{config.limit >= 0 ? `/${config.limit}` : ""}
{config.free > 0 ? ` (ฟรี ${config.free})` : ""}
{config.free > 0 ? ` (เหลือคิวฟรี ${config.free})` : ""}
</SidebarMenuBadge>
</SidebarMenuItem>
</SidebarMenu>
+6 -3
View File
@@ -168,7 +168,7 @@ export async function setFree(free: number) {
sse.rubgram.pub("update", { type: "setFree" });
await actionLog(`Set rubgram submit limit to ${free}`);
await actionLog(`Set rubgram free submission amount to ${free}`);
}
export async function getEndgameConfig() {
@@ -245,6 +245,9 @@ export async function submitEndgame(formData: EndgameFormData) {
price: await calcPrice(service),
})
.returning({ queue: endgameSubmissions.queue, id: endgameSubmissions.id });
await db.update(endgameSettings).set({
free: sql`${endgameSettings.free} - 1`,
});
revalidatePath("/rubgram/admin");
sse.rubgram.pub("update", { type: "submit", sub: queue.id });
getPostHogClient().capture({
@@ -379,8 +382,8 @@ export async function loginDiscord() {
}
export async function calcPrice(service: string[]) {
const { free, count, types, allDiscount } = await getEndgameConfig();
return count < free
const { free, types, allDiscount } = await getEndgameConfig();
return free > 0
? 0
: service.reduce(
(p, s) => p + (types.find((t) => t.id === s)?.price || 0),
+1 -2
View File
@@ -83,7 +83,6 @@ export function ServiceSelector({
types,
allDiscount,
free,
count,
}: Awaited<ReturnType<typeof getEndgameConfig>>) {
const [selected, setSelected] = shared.state("rubgram.services");
@@ -104,7 +103,7 @@ export function ServiceSelector({
<MultiSelectItem value={t.id} key={t.id}>
{t.display}{" "}
<Kbd>
{free > 0 && count < free ? (
{free > 0 ? (
<>
<span className="line-through opacity-50">{t.price}</span>{" "}
<span className="text-emerald-500">ฟรี</span>
+11 -2
View File
@@ -1,4 +1,4 @@
import { and, eq, gt, lt, not, or } from "drizzle-orm";
import { and, eq, gt, lt, not, or, sql } from "drizzle-orm";
import {
AlertCircle,
BookAlert,
@@ -80,7 +80,16 @@ export default async function EndgamePage() {
const [q] = sid?.value
? await db
.select({
queue: endgameSubmissions.queue,
// Using endgame.submissions.queue here because
// ${endgameSubmissions.queue} does not work
queue: sql<number>`
${endgameSubmissions.queue} - (
select count(*)
from ${endgameSubmissions} as e2
where e2.checked = true
and e2.queue < endgame.submissions.queue
)
`.as("queue"),
paid: endgameSubmissions.paid,
price: endgameSubmissions.price,
expires: endgameSubmissions.expires,
View File