EmployeeRepository.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using Npgsql;
  5. using RestaurantApp.Models;
  6. namespace RestaurantApp.DAL
  7. {
  8. public class EmployeeRepository
  9. {
  10. public List<Employee> GetAll(string search = "", bool? active = null)
  11. {
  12. var list = new List<Employee>();
  13. using (var conn = Database.GetConnection())
  14. {
  15. var sql = @"SELECT e.employee_id,e.position_id,p.title,
  16. e.first_name,e.last_name,e.middle_name,
  17. e.phone,e.email,e.hire_date,e.salary,e.is_active
  18. FROM employee e JOIN position p ON p.position_id=e.position_id
  19. WHERE 1=1 ";
  20. if (!string.IsNullOrWhiteSpace(search))
  21. sql += " AND (LOWER(e.last_name) LIKE LOWER(@s) OR LOWER(e.first_name) LIKE LOWER(@s) OR e.phone LIKE @s)";
  22. if (active.HasValue)
  23. sql += " AND e.is_active=@a";
  24. sql += " ORDER BY e.last_name, e.first_name";
  25. using (var cmd = new NpgsqlCommand(sql, conn))
  26. {
  27. if (!string.IsNullOrWhiteSpace(search))
  28. cmd.Parameters.AddWithValue("s", $"%{search}%");
  29. if (active.HasValue)
  30. cmd.Parameters.AddWithValue("a", active.Value);
  31. using (var r = cmd.ExecuteReader())
  32. while (r.Read()) list.Add(MapEmployee(r));
  33. }
  34. }
  35. return list;
  36. }
  37. public void Insert(Employee e)
  38. {
  39. using (var conn = Database.GetConnection())
  40. using (var cmd = new NpgsqlCommand(
  41. @"INSERT INTO employee(position_id,first_name,last_name,middle_name,phone,email,hire_date,salary,is_active)
  42. VALUES(@p,@fn,@ln,@mn,@ph,@em,@hd,@sal,@act)", conn))
  43. {
  44. SetParams(cmd, e);
  45. cmd.ExecuteNonQuery();
  46. }
  47. }
  48. public void Update(Employee e)
  49. {
  50. using (var conn = Database.GetConnection())
  51. using (var cmd = new NpgsqlCommand(
  52. @"UPDATE employee SET position_id=@p,first_name=@fn,last_name=@ln,middle_name=@mn,
  53. phone=@ph,email=@em,hire_date=@hd,salary=@sal,is_active=@act
  54. WHERE employee_id=@id", conn))
  55. {
  56. cmd.Parameters.AddWithValue("id", e.EmployeeId);
  57. SetParams(cmd, e);
  58. cmd.ExecuteNonQuery();
  59. }
  60. }
  61. public void Delete(int id)
  62. {
  63. using (var conn = Database.GetConnection())
  64. using (var cmd = new NpgsqlCommand("UPDATE employee SET is_active=false WHERE employee_id=@id", conn))
  65. {
  66. cmd.Parameters.AddWithValue("id", id);
  67. cmd.ExecuteNonQuery();
  68. }
  69. }
  70. public DataTable GetPositions()
  71. {
  72. var dt = new DataTable();
  73. using (var conn = Database.GetConnection())
  74. using (var cmd = new NpgsqlCommand("SELECT position_id, title FROM position ORDER BY title", conn))
  75. using (var da = new NpgsqlDataAdapter(cmd))
  76. da.Fill(dt);
  77. return dt;
  78. }
  79. public List<Employee> GetWaiters()
  80. {
  81. var list = new List<Employee>();
  82. using (var conn = Database.GetConnection())
  83. using (var cmd = new NpgsqlCommand(
  84. @"SELECT e.employee_id,e.position_id,p.title,e.first_name,e.last_name,e.middle_name,
  85. e.phone,e.email,e.hire_date,e.salary,e.is_active
  86. FROM employee e JOIN position p ON p.position_id=e.position_id
  87. WHERE e.is_active=true ORDER BY e.last_name", conn))
  88. using (var r = cmd.ExecuteReader())
  89. while (r.Read()) list.Add(MapEmployee(r));
  90. return list;
  91. }
  92. private void SetParams(NpgsqlCommand cmd, Employee e)
  93. {
  94. cmd.Parameters.AddWithValue("p", e.PositionId);
  95. cmd.Parameters.AddWithValue("fn", e.FirstName);
  96. cmd.Parameters.AddWithValue("ln", e.LastName);
  97. cmd.Parameters.AddWithValue("mn", string.IsNullOrEmpty(e.MiddleName) ? (object)DBNull.Value : e.MiddleName);
  98. cmd.Parameters.AddWithValue("ph", string.IsNullOrEmpty(e.Phone) ? (object)DBNull.Value : e.Phone);
  99. cmd.Parameters.AddWithValue("em", string.IsNullOrEmpty(e.Email) ? (object)DBNull.Value : e.Email);
  100. cmd.Parameters.AddWithValue("hd", e.HireDate);
  101. cmd.Parameters.AddWithValue("sal", e.Salary);
  102. cmd.Parameters.AddWithValue("act", e.IsActive);
  103. }
  104. private Employee MapEmployee(NpgsqlDataReader r) => new Employee
  105. {
  106. EmployeeId = r.GetInt32(0),
  107. PositionId = r.GetInt32(1),
  108. PositionTitle = r.GetString(2),
  109. FirstName = r.GetString(3),
  110. LastName = r.GetString(4),
  111. MiddleName = r.IsDBNull(5) ? "" : r.GetString(5),
  112. Phone = r.IsDBNull(6) ? "" : r.GetString(6),
  113. Email = r.IsDBNull(7) ? "" : r.GetString(7),
  114. HireDate = r.GetDateTime(8),
  115. Salary = r.GetDecimal(9),
  116. IsActive = r.GetBoolean(10)
  117. };
  118. }
  119. }