feat(rubgram): change free submission strategy to counter
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user