Advertisement
VodVas

CleanCode_ExampleTask21-27.cs

Dec 18th, 2024
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.76 KB | Legal | 0 0
  1. public class Form
  2. {
  3.     private const int MinimumPassportLength = 10;
  4.     private const int SQLiteFileNotFoundErrorCode = 1;
  5.     private const string DatabaseFileName = "db.sqlite";
  6.  
  7.     private void checkButton_Click(object sender, EventArgs eventArgs)
  8.     {
  9.         string passportInput = passportTextbox.Text.Trim();
  10.  
  11.         if (string.IsNullOrEmpty(passportInput))
  12.         {
  13.             MessageBox.Show("Введите серию и номер паспорта");
  14.  
  15.             return;
  16.         }
  17.  
  18.         string rawData = passportInput.Replace(" ", string.Empty);
  19.  
  20.         if (IsPassportFormatValid(rawData) == false)
  21.         {
  22.             textResult.Text = "Неверный формат серии или номера паспорта";
  23.  
  24.             return;
  25.         }
  26.  
  27.         string hashedPassport = ComputeSha256Hash(rawData);
  28.         string connectionString = GetConnectionString();
  29.  
  30.         try
  31.         {
  32.             DataTable passportData = GetPassportData(hashedPassport, connectionString);
  33.  
  34.             DisplayResult(passportData, passportInput);
  35.         }
  36.         catch (SQLiteException sqliteException)
  37.         {
  38.             HandleSQLiteException(sqliteException);
  39.         }
  40.     }
  41.  
  42.     private bool IsPassportFormatValid(string passportData)
  43.     {
  44.         return passportData.Length >= MinimumPassportLength;
  45.     }
  46.  
  47.     private string GetConnectionString()
  48.     {
  49.         string executablePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
  50.         string databasePath = Path.Combine(executablePath, DatabaseFileName);
  51.  
  52.         return $"Data Source={databasePath}";
  53.     }
  54.  
  55.     private DataTable GetPassportData(string hashedPassport, string connectionString)
  56.     {
  57.         if (string.IsNullOrEmpty(hashedPassport))
  58.         {
  59.             throw new ArgumentException("Хэш паспорта не может быть пустым", nameof(hashedPassport));
  60.         }
  61.  
  62.         if (string.IsNullOrEmpty(connectionString))
  63.         {
  64.             throw new ArgumentException("Строка подключения не может быть пустой", nameof(connectionString));
  65.         }
  66.  
  67.         string query = $"SELECT * FROM passports WHERE num='{hashedPassport}' LIMIT 1;";
  68.  
  69.         using (SQLiteConnection connection = new SQLiteConnection(connectionString))
  70.         {
  71.             connection.Open();
  72.  
  73.             using (SQLiteCommand command = new SQLiteCommand(query, connection))
  74.             {
  75.                 using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(command))
  76.                 {
  77.                     DataTable passportTable = new DataTable();
  78.                     adapter.Fill(passportTable);
  79.                     return passportTable;
  80.                 }
  81.             }
  82.         }
  83.     }
  84.  
  85.     private void DisplayResult(DataTable passportData, string passportInput)
  86.     {
  87.         if (passportData == null)
  88.         {
  89.             throw new ArgumentNullException(nameof(passportData));
  90.         }
  91.  
  92.         if (passportData.Rows.Count > 0)
  93.         {
  94.             bool isAccessGranted = Convert.ToBoolean(passportData.Rows[0]["isAccessGranted"]);
  95.  
  96.             if (isAccessGranted)
  97.             {
  98.                 textResult.Text = $"По паспорту «{passportInput}» доступ к бюллетеню на дистанционном электронном голосовании ПРЕДОСТАВЛЕН";
  99.             }
  100.             else
  101.             {
  102.                 textResult.Text = $"По паспорту «{passportInput}» доступ к бюллетеню на дистанционном электронном голосовании НЕ ПРЕДОСТАВЛЯЛСЯ";
  103.             }
  104.         }
  105.         else
  106.         {
  107.             textResult.Text = $"Паспорт «{passportInput}» в списке участников дистанционного голосования НЕ НАЙДЕН";
  108.         }
  109.     }
  110.  
  111.     private void HandleSQLiteException(SQLiteException sqliteException)
  112.     {
  113.         if (sqliteException == null)
  114.         {
  115.             throw new ArgumentNullException(nameof(sqliteException));
  116.         }
  117.  
  118.         if (sqliteException.ErrorCode == SQLiteFileNotFoundErrorCode)
  119.         {
  120.             MessageBox.Show("Файл db.sqlite не найден. Положите файл в папку вместе с exe.");
  121.         }
  122.         else
  123.         {
  124.             MessageBox.Show($"Ошибка базы данных: {sqliteException.Message}");
  125.         }
  126.     }
  127.  
  128.     public static string ComputeSha256Hash(string rawData)
  129.     {
  130.         if (string.IsNullOrEmpty(rawData))
  131.         {
  132.             throw new ArgumentException("Данные для хэширования не могут быть null или пустыми", nameof(rawData));
  133.         }
  134.  
  135.         return "";
  136.     }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement