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