Files
rentierroulette/src/index.ts

89 lines
3.8 KiB
TypeScript

import { serve } from 'bun';
import index from './index.html';
import DB from './server/db';
const db = new DB();
const server = serve({
routes: {
// Serve index.html for all unmatched routes.
'/*': index,
'/api/user/:mail': async req => {
const mail = req.params.mail;
console.log('Received request for user:', mail);
const user = await db.getUserByMail(mail);
console.log('Fetching user with mail:', mail, 'Result:', user);
return new Response(JSON.stringify(user), { headers: { 'Content-Type': 'application/json' } });
},
'/api/user': {
async POST(req) {
try {
const { mail } = await req.json() as { mail: string };
console.log('Received request to create user with mail:', mail);
const user = await db.createUser(mail);
return new Response(JSON.stringify(user), { headers: { 'Content-Type': 'application/json' } });
} catch (err) {
console.error('Error creating user:', err);
return new Response(JSON.stringify({ error: 'Failed to create user' }), { status: 500 });
}
},
},
'/api/group/:code': async req => {
const code = req.params.code;
console.log('Received request for group:', code);
const group = await db.getGroupByCode(code);
console.log('Fetching group with ID:', code, 'Result:', group);
return new Response(JSON.stringify(group), { headers: { 'Content-Type': 'application/json' } });
},
'/api/group': {
async POST(req) {
try {
const { name, mail } = await req.json() as { name: string; mail: string };
console.log('Received request to create group with name:', name, 'and mail:', mail);
const response = await db.createGroup({ name, mail });
return new Response(JSON.stringify(response), { headers: { 'Content-Type': 'application/json' } });
} catch (err) {
console.error('Error creating group:', err);
return new Response(JSON.stringify({ error: 'Failed to create group' }), { status: 500 });
}
}
},
'/api/group_members/:groupId': async req => {
const groupId = parseInt(req.params.groupId, 10);
console.log('Received request for group members of group ID:', groupId);
const members = await db.getGroupMembers(groupId);
console.log('Fetching members for group ID:', groupId, 'Result:', members);
return new Response(JSON.stringify(members), { headers: { 'Content-Type': 'application/json' } });
},
'/api/group_members': {
async POST(req) {
try {
const { groupId, userId } = await req.json() as { groupId: number; userId: number };
console.log('Received request to add user ID ', userId, 'to group ID:', groupId);
const response = await db.addUserToGroup(groupId, userId);
return new Response(JSON.stringify(response), { headers: { 'Content-Type': 'application/json' } });
} catch (err) {
console.error('Error adding user to group:', err);
return new Response(JSON.stringify({ error: 'Failed to add user to group' }), { status: 500 });
}
}
}
},
development: process.env.NODE_ENV !== 'production' && {
// Enable browser hot reloading in development
hmr: true,
// Echo console logs from the browser to the server
console: true,
},
});
console.log(`🚀 Server running at ${server.url}`);