Advertisement
Schnuk

Untitled

May 2nd, 2022
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.44 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. using Npgsql;
  5.  
  6. namespace selfHostedHttp
  7. {
  8. public class Database
  9. {
  10. private static readonly string connectionSettings =
  11. "Host=localhost;Username=postgres;Password=******;Database=university_rating";
  12.  
  13. public static async Task AddStudentToDatabase(Student student)
  14. {
  15. var task = GetIdLastStudent();
  16. task.Wait();
  17. var lastStudentId = task.Result;
  18. await using var connection = new NpgsqlConnection(connectionSettings);
  19. await connection.OpenAsync();
  20. var request = $"INSERT INTO students " +
  21. $"(student_id, " +
  22. $"student_first_name, " +
  23. $"student_second_name, " +
  24. $"student_patronymic, " +
  25. $"student_birthday, " +
  26. $"student_group_id, " +
  27. $"student_document_number, " +
  28. $"student_email, " +
  29. $"student_additional_information) " +
  30. $"VALUES (@id, @firstName, @secondName, @patronymic, " +
  31. $"@birthday, @groupNumber, @documentNumber, @email, @additionalInformation)";
  32. await using var cmd = new NpgsqlCommand(request, connection);
  33. cmd.Parameters.AddWithValue("id", ++lastStudentId);
  34. cmd.Parameters.AddWithValue("firstName", student.FirstName);
  35. cmd.Parameters.AddWithValue("secondName", student.SecondName);
  36. cmd.Parameters.AddWithValue("patronymic", student.Patronymic);
  37. cmd.Parameters.AddWithValue("birthday", GetValidatedDate(student.Birthday));
  38. cmd.Parameters.AddWithValue("groupNumber", GetValidatedGroupNumber(student.GroupNumber));
  39. cmd.Parameters.AddWithValue("documentNumber", student.DocumentNumber);
  40. cmd.Parameters.AddWithValue("email", student.Email);
  41. cmd.Parameters.AddWithValue("additionalInformation", student.AdditionalInformation);
  42. await cmd.ExecuteNonQueryAsync();
  43. await connection.CloseAsync();
  44. }
  45.  
  46. public static async Task<List<Student>> RetrieveStudents(int countRecords, int pageNumber)
  47. {
  48. await using var connection = new NpgsqlConnection(connectionSettings);
  49. await connection.OpenAsync();
  50. var request = $"SELECT " +
  51. $"student_id, " +
  52. $"student_first_name, " +
  53. $"student_second_name, " +
  54. $"student_patronymic, " +
  55. $"student_birthday, " +
  56. $"student_group_id, " +
  57. $"student_document_number, " +
  58. $"student_email, " +
  59. $"student_additional_information " +
  60. $"FROM students " +
  61. $"ORDER BY student_id " +
  62. $"LIMIT {countRecords} OFFSET {countRecords*pageNumber}";
  63. await using var cmd = new NpgsqlCommand(request, connection);
  64. await using var reader = await cmd.ExecuteReaderAsync();
  65. var result = new List<Student>();
  66. while (await reader.ReadAsync())
  67. {
  68. var groupNumber = reader.GetValue(5).ToString();
  69. if (groupNumber.Length == 2)
  70. groupNumber = "11-0" + groupNumber;
  71. if (groupNumber.Length == 1)
  72. groupNumber = "11-00" + groupNumber;
  73. var student = new Student(reader.GetValue(2).ToString(), reader.GetValue(1).ToString(),
  74. reader.GetValue(3).ToString(),
  75. reader.GetDate(4).ToString(), groupNumber, reader.GetValue(6).ToString(),
  76. reader.GetValue(7).ToString(), reader.GetValue(8).ToString());
  77. result.Add(student);
  78. }
  79. await reader.CloseAsync();
  80. await connection.CloseAsync();
  81. return result;
  82. }
  83.  
  84. public static async Task<Student> RetrieveLastStudent()
  85. {
  86. await using var connection = new NpgsqlConnection(connectionSettings);
  87. await connection.OpenAsync();
  88. var request = $"SELECT " +
  89. $"student_id, " +
  90. $"student_first_name, " +
  91. $"student_second_name, " +
  92. $"student_patronymic, " +
  93. $"student_birthday, " +
  94. $"student_group_id, " +
  95. $"student_document_number, " +
  96. $"student_email, " +
  97. $"student_additional_information " +
  98. $"FROM students " +
  99. $"ORDER BY student_id DESC " +
  100. $"LIMIT 1";
  101. await using var cmd = new NpgsqlCommand(request, connection);
  102. await using var reader = await cmd.ExecuteReaderAsync();
  103. var result = default(Student);
  104. while (await reader.ReadAsync())
  105. {
  106. var groupNumber = reader.GetValue(5).ToString();
  107. if (groupNumber.Length == 2)
  108. groupNumber = "11-0" + groupNumber;
  109. if (groupNumber.Length == 1)
  110. groupNumber = "11-00" + groupNumber;
  111. var student = new Student(reader.GetValue(2).ToString(), reader.GetValue(1).ToString(),
  112. reader.GetValue(3).ToString(),
  113. reader.GetDate(4).ToString(), groupNumber, reader.GetValue(6).ToString(),
  114. reader.GetValue(7).ToString(), reader.GetValue(8).ToString());
  115. result = student;
  116. }
  117. await reader.CloseAsync();
  118. await connection.CloseAsync();
  119. return result;
  120. }
  121.  
  122. public static async Task<int> GetIdLastStudent()
  123. {
  124. await using var connection = new NpgsqlConnection(connectionSettings);
  125. await connection.OpenAsync();
  126. var request = $"SELECT " +
  127. $"student_id " +
  128. $"FROM students " +
  129. $"ORDER BY student_id DESC " +
  130. $"LIMIT 1";
  131. await using var cmd = new NpgsqlCommand(request, connection);
  132. await using var reader = await cmd.ExecuteReaderAsync();
  133. var id = -1;
  134. while (await reader.ReadAsync())
  135. id = reader.GetInt32(0);
  136. if (id < 0)
  137. throw new ArgumentException();
  138. await reader.CloseAsync();
  139. await connection.CloseAsync();
  140. return id;
  141. }
  142.  
  143. public static DateTime GetValidatedDate(string date)
  144. {
  145. if (!DateTime.TryParse(date, out var value))
  146. throw new ArgumentException();
  147. return value;
  148. }
  149.  
  150. public static int GetValidatedGroupNumber(string groupNumber)
  151. {
  152. if (String.IsNullOrEmpty(groupNumber))
  153. throw new ArgumentException();
  154. if (!int.TryParse(groupNumber.Substring(groupNumber.Length - 2, 2), out var value))
  155. throw new ArgumentException();
  156. return value;
  157. }
  158. }
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement