1+ import 'dart:io' ;
2+
3+ import 'package:dart_frog/dart_frog.dart' ;
4+ import 'package:ht_api/src/config/environment_config.dart' ;
5+ import 'package:logging/logging.dart' ;
6+ import 'package:postgres/postgres.dart' ;
7+
8+ /// Global logger instance.
9+ final _log = Logger ('ht_api' );
10+
11+ /// Global PostgreSQL connection instance.
12+ late final Connection _connection;
13+
14+ /// The main entry point for the server.
15+ ///
16+ /// This function is responsible for:
17+ /// 1. Setting up the global logger.
18+ /// 2. Establishing the PostgreSQL database connection.
19+ /// 3. Providing these dependencies to the Dart Frog handler.
20+ /// 4. Gracefully closing the database connection on server shutdown.
21+ Future <HttpServer > run (Handler handler, InternetAddress ip, int port) async {
22+ // 1. Setup Logger
23+ Logger .root.level = Level .ALL ;
24+ Logger .root.onRecord.listen ((record) {
25+ // ignore: avoid_print
26+ print (
27+ '${record .level .name }: ${record .time }: '
28+ '${record .loggerName }: ${record .message }' ,
29+ );
30+ });
31+
32+ // 2. Establish Database Connection
33+ _log.info ('Connecting to PostgreSQL database...' );
34+ _connection = await Connection .open (
35+ Endpoint .uri (Uri .parse (EnvironmentConfig .databaseUrl)),
36+ settings: const ConnectionSettings (sslMode: SslMode .prefer),
37+ );
38+ _log.info ('PostgreSQL database connection established.' );
39+
40+ // 3. Start the server and set up shutdown logic
41+ return serve (
42+ handler,
43+ ip,
44+ port,
45+ onShutdown: () async {
46+ _log.info ('Server shutting down. Closing database connection...' );
47+ await _connection.close ();
48+ _log.info ('Database connection closed.' );
49+ },
50+ );
51+ }
0 commit comments