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
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;
|
|
}
|
|
}
|
|
|