Initial Argus web catalog
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
using System.Data;
|
||||
using Argus.Data;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Argus.Infrastructure;
|
||||
|
||||
public static class SqliteSchemaMigrator
|
||||
{
|
||||
public static async Task EnsureCurrentSchemaAsync(
|
||||
ArgusDbContext dbContext,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
await dbContext.Database.EnsureCreatedAsync(cancellationToken);
|
||||
|
||||
await ExecuteNonQueryAsync(
|
||||
dbContext,
|
||||
"""
|
||||
CREATE INDEX IF NOT EXISTS "IX_Apps_IsListed_Name"
|
||||
ON "Apps" ("IsListed", "Name")
|
||||
""",
|
||||
cancellationToken);
|
||||
|
||||
await ExecuteNonQueryAsync(
|
||||
dbContext,
|
||||
"""
|
||||
CREATE INDEX IF NOT EXISTS "IX_Releases_PublishedAt"
|
||||
ON "Releases" ("PublishedAt")
|
||||
""",
|
||||
cancellationToken);
|
||||
|
||||
await ExecuteNonQueryAsync(
|
||||
dbContext,
|
||||
"""
|
||||
CREATE INDEX IF NOT EXISTS "IX_Releases_CatalogAppId_PublishedAt"
|
||||
ON "Releases" ("CatalogAppId", "PublishedAt")
|
||||
""",
|
||||
cancellationToken);
|
||||
}
|
||||
|
||||
private static async Task ExecuteNonQueryAsync(
|
||||
ArgusDbContext dbContext,
|
||||
string commandText,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
var connection = dbContext.Database.GetDbConnection();
|
||||
var mustClose = connection.State != ConnectionState.Open;
|
||||
|
||||
if (mustClose)
|
||||
{
|
||||
await connection.OpenAsync(cancellationToken);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await using var command = connection.CreateCommand();
|
||||
command.CommandText = commandText;
|
||||
await command.ExecuteNonQueryAsync(cancellationToken);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (mustClose)
|
||||
{
|
||||
await connection.CloseAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user