SSE
This commit is contained in:
@@ -3,6 +3,7 @@ import { superTokensAdminFunctionMiddleware, superTokensFunctionMiddleware } fro
|
||||
import { createServerFn } from "@tanstack/react-start";
|
||||
import { pbAdmin } from "@/lib/pocketbase/client";
|
||||
import { z } from "zod";
|
||||
import { emitServerEvent } from "@/lib/events/emitter";
|
||||
|
||||
export const getPlayerBadges = createServerFn()
|
||||
.validator(z.string())
|
||||
@@ -14,7 +15,11 @@ export const getPlayerBadges = createServerFn()
|
||||
export const migrateBadgeProgress = createServerFn()
|
||||
.middleware([superTokensAdminFunctionMiddleware])
|
||||
.handler(async () =>
|
||||
toServerResult(() => pbAdmin.migrateBadgeProgress())
|
||||
toServerResult(async () => {
|
||||
const result = await pbAdmin.migrateBadgeProgress();
|
||||
emitServerEvent({ type: "badge" });
|
||||
return result;
|
||||
})
|
||||
);
|
||||
|
||||
export const getAllBadges = createServerFn()
|
||||
@@ -34,5 +39,9 @@ export const awardManualBadge = createServerFn()
|
||||
}))
|
||||
.middleware([superTokensAdminFunctionMiddleware])
|
||||
.handler(async ({ data }) =>
|
||||
toServerResult(() => pbAdmin.awardManualBadge(data.playerId, data.badgeId))
|
||||
toServerResult(async () => {
|
||||
const result = await pbAdmin.awardManualBadge(data.playerId, data.badgeId);
|
||||
emitServerEvent({ type: "badge", playerId: data.playerId });
|
||||
return result;
|
||||
})
|
||||
);
|
||||
|
||||
@@ -6,7 +6,7 @@ import { z } from "zod";
|
||||
import { toServerResult } from "@/lib/tanstack-query/utils/to-server-result";
|
||||
import brackets from "@/features/bracket/utils";
|
||||
import { Match, MatchInput } from "@/features/matches/types";
|
||||
import { serverEvents } from "@/lib/events/emitter";
|
||||
import { emitServerEvent } from "@/lib/events/emitter";
|
||||
import { superTokensFunctionMiddleware } from "@/utils/supertokens";
|
||||
import { PlayerInfo } from "../players/types";
|
||||
import { serverFnLoggingMiddleware } from "@/utils/activities";
|
||||
@@ -129,6 +129,8 @@ export const generateTournamentBracket = createServerFn()
|
||||
matchCount: createdMatches.length,
|
||||
});
|
||||
|
||||
emitServerEvent({ type: "tournament", tournamentId });
|
||||
|
||||
return {
|
||||
tournament,
|
||||
matchCount: createdMatches.length,
|
||||
@@ -154,7 +156,7 @@ export const startMatch = createServerFn()
|
||||
status: "started",
|
||||
});
|
||||
|
||||
serverEvents.emit("match", {
|
||||
emitServerEvent({
|
||||
type: "match",
|
||||
matchId: match.id,
|
||||
tournamentId: match.tournament.id
|
||||
@@ -180,7 +182,9 @@ export const populateKnockoutBracket = createServerFn()
|
||||
throw new Error("Tournament must have group_config");
|
||||
}
|
||||
|
||||
return await populateKnockoutBracketInternal(tournamentId, tournament.group_config);
|
||||
const result = await populateKnockoutBracketInternal(tournamentId, tournament.group_config);
|
||||
emitServerEvent({ type: "tournament", tournamentId });
|
||||
return result;
|
||||
})
|
||||
);
|
||||
|
||||
@@ -479,7 +483,7 @@ export const endMatch = createServerFn()
|
||||
});
|
||||
|
||||
if (match.lid === -1) {
|
||||
serverEvents.emit("match", {
|
||||
emitServerEvent({
|
||||
type: "match",
|
||||
matchId: match.id,
|
||||
tournamentId: match.tournament.id
|
||||
@@ -504,6 +508,11 @@ export const endMatch = createServerFn()
|
||||
});
|
||||
|
||||
await pbAdmin.deleteMatch(winner.id);
|
||||
emitServerEvent({
|
||||
type: "match",
|
||||
matchId: match.id,
|
||||
tournamentId: match.tournament.id
|
||||
});
|
||||
return match;
|
||||
}
|
||||
}
|
||||
@@ -530,7 +539,7 @@ export const endMatch = createServerFn()
|
||||
});
|
||||
}
|
||||
|
||||
serverEvents.emit("match", {
|
||||
emitServerEvent({
|
||||
type: "match",
|
||||
matchId: match.id,
|
||||
tournamentId: match.tournament.id
|
||||
@@ -590,7 +599,7 @@ export const toggleMatchReaction = createServerFn()
|
||||
|
||||
const reactions = Object.values(reactionsByEmoji);
|
||||
|
||||
serverEvents.emit("reaction", {
|
||||
emitServerEvent({
|
||||
type: "reaction",
|
||||
matchId,
|
||||
reactions,
|
||||
|
||||
@@ -68,6 +68,9 @@ export const updatePlayer = createServerFn()
|
||||
|
||||
await setUserMetadata({ data: { first_name: data.first_name, last_name: data.last_name } });
|
||||
|
||||
const { emitServerEvent } = await import("@/lib/events/emitter");
|
||||
emitServerEvent({ type: "player", playerId: existing.id! });
|
||||
|
||||
return updatedPlayer;
|
||||
})
|
||||
);
|
||||
@@ -95,6 +98,12 @@ export const createPlayer = createServerFn()
|
||||
|
||||
await setUserMetadata({ data: { first_name: data.first_name, last_name: data.last_name, player_id: newPlayer?.id?.toString() } });
|
||||
logger.info('Created player', newPlayer);
|
||||
|
||||
if (newPlayer?.id) {
|
||||
const { emitServerEvent } = await import("@/lib/events/emitter");
|
||||
emitServerEvent({ type: "player", playerId: newPlayer.id });
|
||||
}
|
||||
|
||||
return newPlayer;
|
||||
})
|
||||
);
|
||||
@@ -123,6 +132,10 @@ export const associatePlayer = createServerFn()
|
||||
|
||||
const player = await pbAdmin.getPlayer(data);
|
||||
logger.info('Associated player', player);
|
||||
|
||||
const { emitServerEvent } = await import("@/lib/events/emitter");
|
||||
emitServerEvent({ type: "player", playerId: data });
|
||||
|
||||
return player;
|
||||
})
|
||||
);
|
||||
|
||||
@@ -7,6 +7,7 @@ import { teamInputSchema, teamUpdateSchema } from "./types";
|
||||
import { logger } from "@/lib/logger";
|
||||
import { Match } from "../matches/types";
|
||||
import { serverFnLoggingMiddleware } from "@/utils/activities";
|
||||
import { emitServerEvent } from "@/lib/events/emitter";
|
||||
|
||||
|
||||
export const listTeamInfos = createServerFn()
|
||||
@@ -42,7 +43,9 @@ export const createTeam = createServerFn()
|
||||
//}
|
||||
|
||||
logger.info("Creating team", { name: data.name, userId, isAdmin });
|
||||
return pbAdmin.createTeam(data);
|
||||
const team = await pbAdmin.createTeam(data);
|
||||
emitServerEvent({ type: "team", teamId: team?.id });
|
||||
return team;
|
||||
})
|
||||
);
|
||||
|
||||
@@ -68,7 +71,9 @@ export const updateTeam = createServerFn()
|
||||
// }
|
||||
|
||||
logger.info("Updating team", { teamId: id, userId, isAdmin });
|
||||
return pbAdmin.updateTeam(id, updates);
|
||||
const updated = await pbAdmin.updateTeam(id, updates);
|
||||
emitServerEvent({ type: "team", teamId: id });
|
||||
return updated;
|
||||
})
|
||||
);
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import { logger } from ".";
|
||||
import { z } from "zod";
|
||||
import { toServerResult } from "@/lib/tanstack-query/utils/to-server-result";
|
||||
import { serverFnLoggingMiddleware } from "@/utils/activities";
|
||||
import { emitServerEvent } from "@/lib/events/emitter";
|
||||
import brackets from "@/features/bracket/utils";
|
||||
import { MatchInput } from "@/features/matches/types";
|
||||
import { generateSingleEliminationBracket } from "./utils/bracket-generator";
|
||||
@@ -19,8 +20,12 @@ export const listTournaments = createServerFn()
|
||||
export const createTournament = createServerFn()
|
||||
.validator(tournamentInputSchema)
|
||||
.middleware([superTokensAdminFunctionMiddleware, serverFnLoggingMiddleware])
|
||||
.handler(async ({ data }) =>
|
||||
toServerResult(() => pbAdmin.createTournament(data))
|
||||
.handler(async ({ data }) =>
|
||||
toServerResult(async () => {
|
||||
const tournament = await pbAdmin.createTournament(data);
|
||||
emitServerEvent({ type: "tournament", tournamentId: tournament.id });
|
||||
return tournament;
|
||||
})
|
||||
);
|
||||
|
||||
export const updateTournament = createServerFn()
|
||||
@@ -29,8 +34,12 @@ export const updateTournament = createServerFn()
|
||||
updates: tournamentInputSchema.partial()
|
||||
}))
|
||||
.middleware([superTokensAdminFunctionMiddleware, serverFnLoggingMiddleware])
|
||||
.handler(async ({ data }) =>
|
||||
toServerResult(() => pbAdmin.updateTournament(data.id, data.updates))
|
||||
.handler(async ({ data }) =>
|
||||
toServerResult(async () => {
|
||||
const tournament = await pbAdmin.updateTournament(data.id, data.updates);
|
||||
emitServerEvent({ type: "tournament", tournamentId: data.id });
|
||||
return tournament;
|
||||
})
|
||||
);
|
||||
|
||||
export const getTournament = createServerFn()
|
||||
@@ -76,6 +85,7 @@ export const enrollTeam = createServerFn()
|
||||
|
||||
logger.info('Enrolling team in tournament', { tournamentId, teamId, userId });
|
||||
const tournament = await pbAdmin.enrollTeam(tournamentId, teamId);
|
||||
emitServerEvent({ type: "tournament", tournamentId });
|
||||
return tournament;
|
||||
})
|
||||
);
|
||||
@@ -86,8 +96,12 @@ export const unenrollTeam = createServerFn()
|
||||
teamId: z.string()
|
||||
}))
|
||||
.middleware([superTokensFunctionMiddleware, serverFnLoggingMiddleware])
|
||||
.handler(async ({ data: { tournamentId, teamId }, context }) =>
|
||||
toServerResult(() => pbAdmin.unenrollTeam(tournamentId, teamId))
|
||||
.handler(async ({ data: { tournamentId, teamId }, context }) =>
|
||||
toServerResult(async () => {
|
||||
const result = await pbAdmin.unenrollTeam(tournamentId, teamId);
|
||||
emitServerEvent({ type: "tournament", tournamentId });
|
||||
return result;
|
||||
})
|
||||
);
|
||||
|
||||
export const getUnenrolledTeams = createServerFn()
|
||||
@@ -115,6 +129,7 @@ export const enrollFreeAgent = createServerFn()
|
||||
|
||||
await pbAdmin.enrollFreeAgent(player.id, data.phone, data.tournamentId);
|
||||
logger.info('Player enrolled as free agent', { playerId: player.id, phone: data.phone });
|
||||
emitServerEvent({ type: "tournament", tournamentId: data.tournamentId });
|
||||
})
|
||||
);
|
||||
|
||||
@@ -129,6 +144,7 @@ export const unenrollFreeAgent = createServerFn()
|
||||
|
||||
await pbAdmin.unenrollFreeAgent(player.id, data.tournamentId);
|
||||
logger.info('Player unenrolled as free agent', { playerId: player.id });
|
||||
emitServerEvent({ type: "tournament", tournamentId: data.tournamentId });
|
||||
})
|
||||
);
|
||||
|
||||
@@ -382,6 +398,9 @@ export const confirmTeamAssignments = createServerFn()
|
||||
newCount: createdTeams.length - reusedCount
|
||||
});
|
||||
|
||||
emitServerEvent({ type: "team" });
|
||||
emitServerEvent({ type: "tournament", tournamentId: data.tournamentId });
|
||||
|
||||
return { teams: createdTeams };
|
||||
})
|
||||
);
|
||||
@@ -702,6 +721,8 @@ export const generateKnockoutBracket = createServerFn()
|
||||
qualifiedTeamCount: qualifiedTeams.length
|
||||
});
|
||||
|
||||
emitServerEvent({ type: "tournament", tournamentId: data.tournamentId });
|
||||
|
||||
return {
|
||||
tournament,
|
||||
matchCount: createdMatches.length,
|
||||
@@ -720,6 +741,7 @@ export const adminEnrollPlayer = createServerFn()
|
||||
toServerResult(async () => {
|
||||
await pbAdmin.enrollFreeAgent(data.playerId, "", data.tournamentId);
|
||||
logger.info('Admin enrolled player', { playerId: data.playerId, tournamentId: data.tournamentId });
|
||||
emitServerEvent({ type: "tournament", tournamentId: data.tournamentId });
|
||||
})
|
||||
);
|
||||
|
||||
@@ -733,6 +755,7 @@ export const adminUnenrollPlayer = createServerFn()
|
||||
toServerResult(async () => {
|
||||
await pbAdmin.unenrollFreeAgent(data.playerId, data.tournamentId);
|
||||
logger.info('Admin unenrolled player', { playerId: data.playerId, tournamentId: data.tournamentId });
|
||||
emitServerEvent({ type: "tournament", tournamentId: data.tournamentId });
|
||||
})
|
||||
);
|
||||
|
||||
@@ -881,6 +904,8 @@ export const generateGroupStage = createServerFn()
|
||||
totalMatchCount: createdMatches.length
|
||||
});
|
||||
|
||||
emitServerEvent({ type: "tournament", tournamentId: data.tournamentId });
|
||||
|
||||
return {
|
||||
tournament,
|
||||
groups: createdGroups,
|
||||
|
||||
Reference in New Issue
Block a user