89 lines
3.8 KiB
TypeScript
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}`);
|