Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ targets:
- 'lib/account/models.dart'
- 'lib/admin/models.dart'
- 'lib/dartdoc/models.dart'
- 'lib/database/*.dart'
- 'lib/frontend/handlers/pubapi.dart'
- 'lib/frontend/handlers/routes.dart'
- 'lib/frontend/handlers/redirects.dart'
Expand Down
12 changes: 10 additions & 2 deletions app/lib/database/database.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ import 'package:clock/clock.dart';
import 'package:gcloud/service_scope.dart' as ss;
import 'package:meta/meta.dart';
import 'package:postgres/postgres.dart';
import 'package:pub_dev/database/schema.dart';
import 'package:pub_dev/service/secret/backend.dart';
import 'package:pub_dev/shared/configuration.dart';
import 'package:pub_dev/shared/env_config.dart';
import 'package:typed_sql/typed_sql.dart';

final _random = Random.secure();

Expand All @@ -27,8 +29,10 @@ PrimaryDatabase? get primaryDatabase =>
/// Access to the primary database connection and object mapping.
class PrimaryDatabase {
final Pool _pg;
final DatabaseAdapter _adapter;
final Database<PrimarySchema> db;

PrimaryDatabase._(this._pg);
PrimaryDatabase._(this._pg, this._adapter, this.db);

/// Gets the connection string either from the environment variable or from
/// the secret backend, connects to it and registers the primary database
Expand Down Expand Up @@ -77,10 +81,14 @@ class PrimaryDatabase {

static Future<PrimaryDatabase> _fromConnectionString(String value) async {
final pg = Pool.withUrl(value);
return PrimaryDatabase._(pg);
final adapter = DatabaseAdapter.postgres(pg);
final db = Database<PrimarySchema>(adapter, SqlDialect.postgres());
await db.createTables();
return PrimaryDatabase._(pg, adapter, db);
}

Future<void> close() async {
await _adapter.close();
await _pg.close();
}

Expand Down
20 changes: 20 additions & 0 deletions app/lib/database/schema.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:convert';

import 'package:json_annotation/json_annotation.dart';
import 'package:meta/meta.dart';
import 'package:pub_dev/admin/actions/actions.dart';
import 'package:pub_dev/task/models.dart';
import 'package:typed_sql/typed_sql.dart';

part 'schema.g.dart';
part 'schema.task.dart';

abstract final class PrimarySchema extends Schema {
Table<Task> get tasks;

Table<TaskDependency> get taskDependencies;
}
Loading
Loading