33// BSD-style license that can be found in the LICENSE file.
44
55import 'dart:async' show FutureOr, Zone;
6+ import 'dart:io' show Platform;
67
78import 'package:_pub_shared/utils/http.dart' ;
89import 'package:appengine/appengine.dart' ;
@@ -14,6 +15,10 @@ import 'package:gcloud/service_scope.dart';
1415import 'package:gcloud/storage.dart' ;
1516import 'package:googleapis_auth/auth_io.dart' as auth;
1617import 'package:logging/logging.dart' ;
18+ import 'package:postgres/postgres.dart' show Pool, Endpoint, PoolSettings;
19+ import 'package:pub_dev/database/model.dart' ;
20+ import 'package:pub_dev/fake/backend/fake_database.dart'
21+ show createFakeDatabaseAdaptor;
1722import 'package:pub_dev/package/api_export/api_exporter.dart' ;
1823import 'package:pub_dev/search/handlers.dart' ;
1924import 'package:pub_dev/service/async_queue/async_queue.dart' ;
@@ -87,6 +92,29 @@ Future<void> withServices(FutureOr<void> Function() fn) async {
8792 final retryingAuthClient = httpRetryClient (innerClient: authClient);
8893 registerScopeExitCallback (() async => retryingAuthClient.close ());
8994
95+ final databaseAdapter = DatabaseAdapter .postgres (
96+ Pool .withEndpoints (
97+ [
98+ Endpoint (
99+ host: Platform .environment['PGHOST' ] ?? '127.0.0.1' ,
100+ port: int .tryParse (Platform .environment['PGPORT' ] ?? '' ) ?? 5432 ,
101+ database: Platform .environment['PGDATABASE' ] ?? 'postgres' ,
102+ username: Platform .environment['PGUSER' ] ?? 'postgres' ,
103+ password: Platform .environment['PGPASSWORD' ] ?? 'postgres' ,
104+ ),
105+ ],
106+ settings: PoolSettings (
107+ applicationName: 'pub-dev' ,
108+ maxConnectionCount: 10 ,
109+ ),
110+ ),
111+ );
112+ registerDatabase (Database <PrimaryDatabase >(
113+ databaseAdapter,
114+ SqlDialect .postgres (),
115+ ));
116+ registerScopeExitCallback (() => databaseAdapter.close ());
117+
90118 // override storageService with retrying http client
91119 registerStorageService (
92120 Storage (retryingAuthClient, activeConfiguration.projectId));
@@ -179,6 +207,14 @@ Future<R> withFakeServices<R>({
179207 }
180208
181209 // register fake services that would have external dependencies
210+ final databaseAdapter = createFakeDatabaseAdaptor ();
211+ registerDatabase (Database <PrimaryDatabase >(
212+ databaseAdapter,
213+ SqlDialect .postgres (),
214+ ));
215+ await database.createTables ();
216+ registerScopeExitCallback (() => databaseAdapter.close ());
217+
182218 registerSecretBackend (FakeSecretBackend ({}));
183219 registerAuthProvider (FakeAuthProvider ());
184220 registerScopeExitCallback (authProvider.close);
@@ -261,7 +297,7 @@ Future<R> _withPubServices<R>(FutureOr<R> Function() fn) async {
261297 registerIndexUpdater (IndexUpdater (dbService));
262298 registerPublisherBackend (PublisherBackend (dbService));
263299 registerScoreCardBackend (ScoreCardBackend (dbService));
264- registerSearchBackend (SearchBackend (dbService,
300+ registerSearchBackend (SearchBackend (database, dbService,
265301 storageService.bucket (activeConfiguration.searchSnapshotBucketName! )));
266302 registerSearchClient (SearchClient ());
267303 registerSearchAdapter (SearchAdapter ());
@@ -280,6 +316,7 @@ Future<R> _withPubServices<R>(FutureOr<R> Function() fn) async {
280316 storageService.bucket (activeConfiguration.publicPackagesBucketName! ),
281317 ));
282318 registerTaskBackend (TaskBackend (
319+ database,
283320 dbService,
284321 storageService.bucket (activeConfiguration.taskResultBucketName! ),
285322 ));
0 commit comments