using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HanvonF710XAttendanceService { internal class AttendanceMachineUserDAO { public AttendanceMachineUserDAO() { } public void Add(AttendanceMachineUser attendanceMachineUser, MySqlConnection connection) { // Ensure synced users are active and clear any pending deletion request. const string query = "REPLACE INTO `hrms`.`attendance_machine_user` " + "(`machine_id`, `serial_number`, `employee_name`, `is_deletion_requested`, `is_deleted`, `updated_by`, `updated_at`) " + "VALUES (@MachineId, @SerialNumber, @EmployeeName, 0, 0, @UpdatedBy, @UpdatedAt)"; using (var cmd = new MySqlCommand(query, connection)) { cmd.Parameters.AddWithValue("@MachineId", attendanceMachineUser.MachineId); cmd.Parameters.AddWithValue("@SerialNumber", attendanceMachineUser.SerialNumber); cmd.Parameters.AddWithValue("@EmployeeName", attendanceMachineUser.EmployeeName); cmd.Parameters.AddWithValue("@UpdatedBy", "SERVICE"); cmd.Parameters.AddWithValue("@UpdatedAt", DateTime.Now); cmd.ExecuteNonQuery(); } } public List getActiveEmployees(MySqlConnection connection) { const string query = "SELECT machine_id, serial_number, employee_name " + "FROM hrms.attendance_machine_user " + "WHERE is_deleted = 0"; using (var cmd = new MySqlCommand(query, connection)) { cmd.CommandTimeout = 120; using (var reader = cmd.ExecuteReader()) { return getDBUsers(reader); } } } public List GetDeletionRequestedSerials(MySqlConnection connection, string machineId) { var serials = new List(); const string query = "SELECT serial_number " + "FROM hrms.attendance_machine_user " + "WHERE machine_id = @MachineId AND is_deletion_requested = 1 AND is_deleted = 0"; using (var cmd = new MySqlCommand(query, connection)) { cmd.CommandTimeout = 60; cmd.Parameters.AddWithValue("@MachineId", machineId); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { if (!reader.IsDBNull(0)) { var s = reader.GetString(0); if (!string.IsNullOrWhiteSpace(s)) serials.Add(s.Trim()); } } } } return serials; } public int MarkUserDeleted(MySqlConnection connection, string machineId, string serialNumber) { const string query = "UPDATE hrms.attendance_machine_user " + "SET is_deleted = 1, is_deletion_requested = 0, updated_by = @UpdatedBy, updated_at = @UpdatedAt " + "WHERE machine_id = @MachineId AND serial_number = @SerialNumber AND is_deleted = 0"; using (var cmd = new MySqlCommand(query, connection)) { cmd.CommandTimeout = 60; cmd.Parameters.AddWithValue("@UpdatedBy", "SERVICE"); cmd.Parameters.AddWithValue("@UpdatedAt", DateTime.Now); cmd.Parameters.AddWithValue("@MachineId", machineId); cmd.Parameters.AddWithValue("@SerialNumber", serialNumber); return cmd.ExecuteNonQuery(); } } public List getAllEmployees(MySqlConnection connection) { string query = "SELECT machine_id, serial_number, employee_name FROM hrms.attendance_machine_user"; using (var cmd = new MySqlCommand(query, connection)) { cmd.CommandTimeout = 120; using (var reader = cmd.ExecuteReader()) { return getDBUsers(reader); } } } public string GetEmployeeNameForMachine(MySqlConnection connection, string machineId, string serialNumber) { if (string.IsNullOrWhiteSpace(machineId) || string.IsNullOrWhiteSpace(serialNumber)) return null; const string query = "SELECT employee_name FROM hrms.attendance_machine_user " + "WHERE machine_id = @MachineId AND serial_number = @SerialNumber AND is_deleted = 0 LIMIT 1"; using (var cmd = new MySqlCommand(query, connection)) { cmd.CommandTimeout = 60; cmd.Parameters.AddWithValue("@MachineId", machineId); cmd.Parameters.AddWithValue("@SerialNumber", serialNumber.Trim()); var result = cmd.ExecuteScalar(); if (result == null || result == DBNull.Value) return null; var name = result.ToString()?.Trim(); return string.IsNullOrWhiteSpace(name) ? null : name; } } private List getDBUsers(MySqlDataReader reader) { List DbUsers = new List(); while (reader.Read()) { DbUsers.Add(GetDbUsers(reader)); } return DbUsers; } private AttendanceMachineUser GetDbUsers(MySqlDataReader reader) { return new AttendanceMachineUser( reader.IsDBNull(0) ? "" : reader.GetString("machine_id"), reader.IsDBNull(1) ? "" : reader.GetString("serial_number"), reader.IsDBNull(1) ? "" : reader.GetString("serial_number") ); } } }