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.
 
 
 

62 lines
2.3 KiB

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.CommandType = CommandType.StoredProcedure;
command.CommandText = _loginSettings.GetProcedureName();
command.Parameters.Add(new SqlParameter("@Operator", SqlDbType.NVarChar, 10) { Value = loginId });
command.Parameters.Add(new SqlParameter("@Password", SqlDbType.NVarChar, 50) { Value = password });
command.Parameters.Add(new SqlParameter("@ProcessName", SqlDbType.NVarChar, 30) { Value = _loginSettings.ProcessName });
await connection.OpenAsync();
var result = await command.ExecuteScalarAsync();
return result switch
{
bool isValid => isValid,
byte value => value == 1,
int value => value == 1,
_ => result is not null && Convert.ToInt32(result) == 1
};
}
private string CreateConnectionString()
{
if (string.IsNullOrWhiteSpace(_databaseSettings.Ip) ||
string.IsNullOrWhiteSpace(_databaseSettings.Database) ||
string.IsNullOrWhiteSpace(_databaseSettings.DbId))
{
throw new InvalidOperationException("Check Database.ini IP, Database, and DbId values.");
}
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;
}
}