You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
2.0 KiB

2 months ago
using System.Data;
using Microsoft.Data.SqlClient;
namespace Housing.Services;
public sealed class LoginAccountRepository
{
private readonly DatabaseSettings _databaseSettings;
private readonly LoginSettings _loginSettings;
public LoginAccountRepository(DatabaseSettings databaseSettings, LoginSettings loginSettings)
{
_databaseSettings = databaseSettings;
_loginSettings = loginSettings;
}
public async Task<bool> ExistsAsync(string loginId, string password)
{
using var connection = new SqlConnection(CreateConnectionString());
using var command = connection.CreateCommand();
command.CommandText = $@"
SELECT TOP (1) 1
FROM {_loginSettings.GetQuotedTableName()}
WHERE {_loginSettings.GetQuotedIdColumn()} = @LoginId
AND {_loginSettings.GetQuotedPasswordColumn()} = @Password;";
command.Parameters.Add(new SqlParameter("@LoginId", SqlDbType.NVarChar, 50) { Value = loginId });
command.Parameters.Add(new SqlParameter("@Password", SqlDbType.NVarChar, 50) { Value = password });
await connection.OpenAsync();
var result = await command.ExecuteScalarAsync();
return result is not null;
}
private string CreateConnectionString()
{
if (string.IsNullOrWhiteSpace(_databaseSettings.Ip) ||
string.IsNullOrWhiteSpace(_databaseSettings.Database) ||
string.IsNullOrWhiteSpace(_databaseSettings.DbId))
{
throw new InvalidOperationException("Database.ini의 IP, Database, DbId 값을 확인하세요.");
}
var builder = new SqlConnectionStringBuilder
{
DataSource = _databaseSettings.Ip,
InitialCatalog = _databaseSettings.Database,
UserID = _databaseSettings.DbId,
Password = _databaseSettings.DbPw,
Encrypt = _databaseSettings.Encrypt,
TrustServerCertificate = _databaseSettings.TrustServerCertificate,
ConnectTimeout = _databaseSettings.Timeout
};
return builder.ConnectionString;
}
}