void.cat/VoidCat/Services/VirusScanner/PostgresVirusScanStore.cs

63 lines
2.0 KiB
C#

using Dapper;
using VoidCat.Model;
using VoidCat.Services.Abstractions;
namespace VoidCat.Services.VirusScanner;
/// <inheritdoc />
public class PostgresVirusScanStore : IVirusScanStore
{
private readonly PostgresConnectionFactory _connection;
public PostgresVirusScanStore(PostgresConnectionFactory connection)
{
_connection = connection;
}
/// <inheritdoc />
public async ValueTask<VirusScanResult?> Get(Guid id)
{
await using var conn = await _connection.Get();
return await conn.QuerySingleOrDefaultAsync<VirusScanResult>(
@"select * from ""VirusScanResult"" where ""Id"" = :id", new {id});
}
/// <inheritdoc />
public async ValueTask<VirusScanResult?> GetByFile(Guid id)
{
await using var conn = await _connection.Get();
return await conn.QuerySingleOrDefaultAsync<VirusScanResult>(
@"select * from ""VirusScanResult"" where ""File"" = :file", new {file = id});
}
/// <inheritdoc />
public async ValueTask<IReadOnlyList<VirusScanResult>> Get(Guid[] ids)
{
await using var conn = await _connection.Get();
return (await conn.QueryAsync<VirusScanResult>(
@"select * from ""VirusScanResult"" where ""Id"" in :ids", new {ids = ids.ToArray()})).ToList();
}
/// <inheritdoc />
public async ValueTask Add(Guid id, VirusScanResult obj)
{
await using var conn = await _connection.Get();
await conn.ExecuteAsync(
@"insert into ""VirusScanResult""(""Id"", ""File"", ""Scanner"", ""Score"", ""Names"") values(:id, :file, :scanner, :score, :names)",
new
{
id,
file = obj.File,
scanner = obj.Scanner,
score = obj.Score,
names = obj.Names
});
}
/// <inheritdoc />
public async ValueTask Delete(Guid id)
{
await using var conn = await _connection.Get();
await conn.ExecuteAsync(@"delete from ""VirusScanResult"" where ""Id"" = :id", new {id});
}
}