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