using Dapper;
using VoidCat.Model;
namespace VoidCat.Services.Users;
///
public class PostgresEmailVerification : BaseEmailVerification
{
private readonly PostgresConnectionFactory _connection;
public PostgresEmailVerification(ILogger logger, VoidSettings settings,
RazorPartialToStringRenderer renderer, PostgresConnectionFactory connection) : base(logger, settings, renderer)
{
_connection = connection;
}
///
protected override async ValueTask SaveToken(EmailVerificationCode code)
{
await using var conn = await _connection.Get();
await conn.ExecuteAsync(
@"insert into ""EmailVerification""(""User"", ""Code"", ""Expires"") values(:user, :code, :expires)",
new
{
user = code.User,
code = code.Code,
expires = code.Expires.ToUniversalTime()
});
}
///
protected override async ValueTask GetToken(Guid user, Guid code)
{
await using var conn = await _connection.Get();
return await conn.QuerySingleOrDefaultAsync(
@"select * from ""EmailVerification"" where ""User"" = :user and ""Code"" = :code",
new {user, code});
}
///
protected override async ValueTask DeleteToken(Guid user, Guid code)
{
await using var conn = await _connection.Get();
await conn.ExecuteAsync(
@"delete from ""EmailVerification"" where ""User"" = :user and ""Code"" = :code",
new {user, code});
}
}