Files
chat-server/bin/chat_server.dart
T
2026-02-20 01:54:08 +03:00

60 lines
1.9 KiB
Dart

import 'package:chat_server/config/config.dart';
import 'package:chat_server/models.dart';
import 'package:chat_server/objectbox.g.dart';
import 'package:chat_server/src/auth/auth_middleware.dart';
import 'package:chat_server/src/handlers/auth_handlers.dart';
import 'package:chat_server/src/handlers/channel_handlers.dart';
import 'package:chat_server/src/handlers/debug_handlers.dart';
import 'package:chat_server/src/handlers/message_handlers.dart';
import 'package:chat_server/src/handlers/user_handlers.dart';
import 'package:hotreloader/hotreloader.dart';
import 'package:relic/relic.dart';
// Global ObjectBox boxes
final Store store = openStore();
final Box<ChatUser> userBox = store.box<ChatUser>();
final Box<ChatChannel> channelBox = store.box<ChatChannel>();
final Box<ChatMessage> messageBox = store.box<ChatMessage>();
RelicApp? _currentApp;
Future<void> startServer() async {
await _currentApp?.close();
_currentApp = RelicApp()
// Public routes
..post('/login', loginHandler)
..post('/register', registerHandler)
// Debug routes
..get('/debug/users', debugUsersHandler)
..get('/debug/messages', debugMessagesHandler)
..get('/debug/clear', debugClearHandler)
// Protected routes
..use('/api', jwtMiddleware)
// Channels
..get('/api/channels', getChannelsHandler)
..post('/api/channels', createChannelHandler)
// Messages
..get('/api/messages', getMessagesHandler)
..post('/api/messages', sendMessageHandler)
// Users
..get('/api/users', getUsersHandler)
// Logging & fallback
..use('/', logRequests())
..fallback = respondWith((_) => Response.notFound());
print('🚀 Server starting on http://localhost:${Config.port}');
await _currentApp!.serve(port: Config.port);
}
void main() async {
await HotReloader.create(
onAfterReload: (ctx) async {
print('🔄 Changes detected! Restarting server...');
await startServer();
},
);
await startServer();
}