Skip to content

Commit 8cec474

Browse files
committed
duckguessr,duckguessr-api: WIP matchmaking
1 parent 60f7894 commit 8cec474

File tree

14 files changed

+405
-140
lines changed

14 files changed

+405
-140
lines changed

apps/duckguessr/api/_auth.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.

apps/duckguessr/api/game.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,20 @@ export const create = async (datasetName: string) => {
3838
sitecodeUrl: string;
3939
}>
4040
>`
41-
SELECT random_images.personcode, random_images.sitecodeUrl
41+
SELECT random_images.personcode, random_images.sitecode_url AS sitecodeUrl
4242
FROM (
4343
SELECT DISTINCT entryurlDetails.personcode
44-
FROM entryurlDetails
45-
INNER JOIN dataset_entryurl ON entryurlDetails.sitecodeUrl = dataset_entryurl.sitecodeUrl
46-
WHERE datasetId = ${dataset.id}
44+
FROM entryurl_details entryurlDetails
45+
INNER JOIN dataset_entryurl USING (sitecode_url)
46+
WHERE dataset_id = ${dataset.id}
4747
ORDER BY RAND()
4848
LIMIT 100
4949
) AS random_authors
5050
INNER JOIN (
51-
SELECT DISTINCT entryurlDetails.personcode, entryurlDetails.sitecodeUrl
52-
FROM entryurlDetails
53-
INNER JOIN dataset_entryurl ON entryurlDetails.sitecodeUrl = dataset_entryurl.sitecodeUrl
54-
WHERE datasetId = ${dataset.id}
51+
SELECT DISTINCT entryurlDetails.personcode, entryurlDetails.sitecode_url
52+
FROM entryurl_details entryurlDetails
53+
INNER JOIN dataset_entryurl USING (sitecode_url)
54+
WHERE dataset_id = ${dataset.id}
5555
AND decision = 'ok'
5656
ORDER BY RAND()
5757
) AS random_images ON random_authors.personcode = random_images.personcode

apps/duckguessr/api/index.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { createGameSocket } from "./services/game";
1010
import { server as home } from "./services/home";
1111
import { server as maintenance } from "./services/maintenance";
1212
import { server as player } from "./services/player";
13+
import { server as match } from "./services/match";
1314

1415
(BigInt.prototype as any).toJSON = function () {
1516
const int = Number.parseInt(this.toString());
@@ -34,15 +35,19 @@ datasets(io);
3435
home(io);
3536
player(io);
3637
maintenance(io);
38+
match(io);
3739
// createMatchmakingSocket(io);
3840

3941
const pendingGames = await prisma.game.findMany({
4042
where: {
41-
rounds: {
42-
some: {
43+
OR: [
44+
{
4345
finishedAt: { gt: new Date() },
4446
},
45-
},
47+
{
48+
finishedAt: null,
49+
},
50+
],
4651
},
4752
});
4853
for (const pendingGame of pendingGames) {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { Socket } from "socket.io";
2+
import { getPlayer } from "../get-player";
3+
4+
export const RequiredPlayerMiddleware = ({ _socket }: { _socket: Socket }, next: (error?: Error) => void) => {
5+
getPlayer({ token: _socket.handshake.auth.token })
6+
.then((player) => {
7+
_socket.data.user = player;
8+
})
9+
.then(() => {
10+
next();
11+
})
12+
.catch((e) => {
13+
next(e);
14+
});
15+
};

apps/duckguessr/api/services/datasets.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,14 @@ export type DatasetsServices = NamespaceProxyTarget<
1414
>;
1515

1616
const listenEvents = () => ({
17-
getDatasets: async () => prisma.$queryRaw`
17+
getDatasets: async () => prisma.$queryRaw<{
18+
id: number;
19+
name: string;
20+
title: string;
21+
description: string;
22+
images: number;
23+
authors: number;
24+
}[]>`
1825
SELECT dataset.id, name, title, description, COUNT(*) AS images, COUNT(DISTINCT personcode) AS authors
1926
FROM dataset
2027
LEFT JOIN dataset_entryurl de ON dataset.id = de.dataset_id

apps/duckguessr/api/services/game.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ export const createGameSocket = async (gameId: number) => {
378378
{ _socket, playerConnectedToMatch: playerConnectedToMatchEvent },
379379
next: (error?: Error) => void,
380380
) => {
381-
getPlayer(_socket.handshake.auth.cookie).then((user) => {
381+
getPlayer(_socket.handshake.auth).then((user) => {
382382
if (user) {
383383
_socket.data.user = user;
384384
_socket.data.currentGame = currentGame;

apps/duckguessr/api/services/maintenance.ts

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import type { Socket } from "socket.io";
22
import type { NamespaceProxyTarget } from "socket-call-server";
33
import { useSocketEvents } from "socket-call-server";
44

5-
import { getPlayer } from "../get-player";
65
import prisma from "../prisma/client";
76
import { type entryurlDetailsDecision } from "../prisma/client_duckguessr/browser";
87
import namespaces from "./namespaces";
8+
import { RequiredPlayerMiddleware } from "../middlewares/required-player";
99

1010
export type MaintenanceServices = NamespaceProxyTarget<
1111
Socket<typeof listenEvents>,
@@ -85,18 +85,7 @@ const { client, server } = useSocketEvents<
8585
>(namespaces.MAINTENANCE, {
8686
listenEvents,
8787
middlewares: [
88-
({ _socket }, next: (error?: Error) => void) => {
89-
getPlayer({ token: _socket.handshake.auth.token })
90-
.then((player) => {
91-
_socket.data.user = player;
92-
})
93-
.then(() => {
94-
next();
95-
})
96-
.catch((e) => {
97-
next(e);
98-
});
99-
},
88+
RequiredPlayerMiddleware,
10089
],
10190
});
10291

apps/duckguessr/api/services/match.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { useSocketEvents } from "socket-call-server";
66
import game from "../game";
77
import type { SessionUser } from "../types/SessionUser";
88
import namespaces from "./namespaces";
9+
import { RequiredPlayerMiddleware } from "../middlewares/required-player";
910

1011
export type MatchServices = NamespaceProxyTarget<
1112
Socket<
@@ -31,7 +32,7 @@ const { client, server } = useSocketEvents<
3132
Record<string, never>
3233
>(namespaces.MATCH, {
3334
listenEvents,
34-
middlewares: [],
35+
middlewares: [RequiredPlayerMiddleware],
3536
});
3637

3738
export { client, server };

apps/duckguessr/api/services/player.ts

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import type { Socket } from "socket.io";
22
import { type NamespaceProxyTarget, useSocketEvents } from "socket-call-server";
33

4-
import { getPlayer, getPlayerStatistics, updatePlayer } from "../get-player";
4+
import { getPlayerStatistics, updatePlayer } from "../get-player";
55
import prisma from "../prisma/client";
66
import { type player } from "../prisma/client_duckguessr/browser";
77
import namespaces from "./namespaces";
8+
import { RequiredPlayerMiddleware } from "../middlewares/required-player";
89

910
export type ClientListenEvents = {
1011
logged: (player: player) => void;
@@ -70,18 +71,7 @@ const { client, server } = useSocketEvents<
7071
>(namespaces.PLAYER, {
7172
listenEvents,
7273
middlewares: [
73-
({ _socket }, next: (error?: Error) => void) => {
74-
getPlayer({ token: _socket.handshake.auth.token })
75-
.then((player) => {
76-
_socket.data.user = player;
77-
})
78-
.then(() => {
79-
next();
80-
})
81-
.catch((e) => {
82-
next(e);
83-
});
84-
},
74+
RequiredPlayerMiddleware,
8575
],
8676
});
8777

apps/duckguessr/app/pages/game/[id].vue

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,15 @@
5555
:game-socket="gameSocket"
5656
@start-match="loadGame()"
5757
/>
58+
<b-container
59+
v-else
60+
fluid
61+
class="d-flex align-items-center justify-content-center"
62+
>
63+
<b-alert show align="center" variant="info">
64+
{{ t("Game not found.") }}
65+
</b-alert>
66+
</b-container>
5867
</template>
5968

6069
<script lang="ts" setup>
@@ -186,6 +195,8 @@ gameSocket.playerGuessed = ({ roundScore, answer }) => {
186195
);
187196
};
188197
198+
gameSocket._connect();
199+
189200
const currentRoundNumber = ref<number>();
190201
191202
const scoreToVariant = useScoreToVariant;

0 commit comments

Comments
 (0)