Skip to content

Commit ef7cbf8

Browse files
committed
Update queues to properly join and leave, and list.
1 parent f4e95ac commit ef7cbf8

File tree

3 files changed

+17
-16
lines changed

3 files changed

+17
-16
lines changed

src/routes/queue.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* resourcePath: /queue
44
* description: Express API router for queue management in G5API.
55
*/
6-
6+
import config from "config";
77
import { Router } from 'express';
88
import Utils from "../utility/utils.js";
99
import { QueueService } from "../services/queue.js";
@@ -21,10 +21,6 @@ const router = Router();
2121
* properties:
2222
* name:
2323
* type: string
24-
* description: Human-readable name of the queue
25-
* example: "Support Queue"
26-
* slug:
27-
* type: string
2824
* description: Unique identifier for the queue
2925
* example: "support-queue-abc123"
3026
* createdAt:
@@ -142,7 +138,7 @@ router.get('/:slug', async (req, res) => {
142138
res.status(200).json(queue);
143139
} catch (error: Error | any) {
144140
console.error('Error fetching queue:', error);
145-
if (error.message.includes('not found')) {
141+
if (error.message.includes('does not exist')) {
146142
return res.status(404).json({ error: 'Queue not found.' });
147143
}
148144
res.status(500).json({ error: 'Failed to fetch queue.' });
@@ -260,8 +256,8 @@ router.post('/', Utils.ensureAuthenticated, async (req, res) => {
260256
const isPrivate: boolean = req.body[0].private ? true : false;
261257

262258
try {
263-
await QueueService.createQueue(req.user?.steam_id!, maxPlayers, isPrivate);
264-
res.json({ message: "Queue created successfully!" });
259+
const descriptor = await QueueService.createQueue(req.user?.steam_id!, maxPlayers, isPrivate);
260+
res.json({ message: "Queue created successfully!", url: `${config.get("server.apiURL")}/queue/${descriptor.name}` });
265261
} catch (error) {
266262
console.error('Error creating queue:', error);
267263
res.status(500).json({ error: 'Failed to create queue.' });
@@ -330,7 +326,7 @@ router.post('/', Utils.ensureAuthenticated, async (req, res) => {
330326
*/
331327
router.put('/:slug', Utils.ensureAuthenticated, async (req, res) => {
332328
const slug: string = req.params.slug;
333-
const action: string = req.body.action ? req.body.action : 'join';
329+
const action: string = req.body[0].action ? req.body[0].action : 'join';
334330

335331
try {
336332
if (action === 'join') {

src/services/queue.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@ const redis = createClient({ url: config.get("server.redisUrl"), });
88
const DEFAULT_TTL_SECONDS: number = config.get("server.queueTTL") == 0 ? 3600 : config.get("server.queueTTL");
99

1010
export class QueueService {
11+
1112
static async createQueue(ownerId?: string, maxPlayers: number = 10, isPrivate: boolean = false, ttlSeconds: number = DEFAULT_TTL_SECONDS): Promise<QueueDescriptor> {
1213
let slug: string;
1314
let key: string;
1415
let attempts: number = 0;
15-
16+
if (redis.isOpen === false) {
17+
await redis.connect();
18+
}
1619
do {
1720
slug = Utils.generateSlug();
1821
key = `queue:${slug}`;
@@ -30,7 +33,6 @@ export class QueueService {
3033

3134
const descriptor: QueueDescriptor = {
3235
name: slug,
33-
slug,
3436
createdAt,
3537
expiresAt,
3638
ownerId,
@@ -139,6 +141,9 @@ export class QueueService {
139141
}
140142

141143
static async listQueues(requestorSteamId: string, role: string = "user"): Promise<QueueDescriptor[]> {
144+
if (redis.isOpen === false) {
145+
await redis.connect();
146+
}
142147
const slugs = await redis.sMembers('queues');
143148
const descriptors: QueueDescriptor[] = [];
144149

@@ -167,11 +172,12 @@ export class QueueService {
167172
}
168173

169174
async function getQueueMetaOrThrow(slug: string): Promise<QueueDescriptor> {
170-
const key = `queue:${slug}`;
175+
if (redis.isOpen === false) {
176+
await redis.connect();
177+
}
171178
const metaKey = `queue-meta:${slug}`;
172-
173-
const exists = await redis.exists(key);
174-
if (!exists) {
179+
const members = await redis.sMembers('queues');
180+
if (!members.includes(slug)) {
175181
throw new Error(`Queue ${slug} does not exist or has expired.`);
176182
}
177183

src/types/queues/QueueDescriptor.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
export interface QueueDescriptor {
22
name: string; // Human-readable name
3-
slug: string; // Unique identifier
43
createdAt: number; // Timestamp (ms) when queue was created
54
expiresAt: number; // Timestamp (ms) when queue will expire
65
ownerId?: string; // Optional user ID of the queue creator

0 commit comments

Comments
 (0)