SupportChild/Database/StaffMember.cs
Toastie 4cbcf0b65e
All checks were successful
toastie-stuff/SupportChild/pipeline/head This commit looks good
Refactored and split up the database class
2025-02-06 15:15:18 +13:00

176 lines
No EOL
5.7 KiB
C#

using System.Collections.Generic;
using MySqlConnector;
namespace SupportChild.Database;
public class StaffMember(MySqlDataReader reader)
{
public readonly ulong userID = reader.GetUInt64("user_id");
public string name = reader.GetString("name");
public readonly bool active = reader.GetBoolean("active");
public static bool AddStaff(string name, ulong userID)
{
try
{
using MySqlConnection c = Connection.GetConnection();
c.Open();
using MySqlCommand update = IsStaff(userID) ? new MySqlCommand("UPDATE staff SET name = @name WHERE user_id = @user_id", c)
: new MySqlCommand("INSERT INTO staff (user_id, name) VALUES (@user_id, @name);", c);
update.Parameters.AddWithValue("@name", name);
update.Parameters.AddWithValue("@user_id", userID);
update.Prepare();
return update.ExecuteNonQuery() > 0;
}
catch (MySqlException e)
{
Logger.Warn("Could not add staff to database.", e);
return false;
}
}
public static bool RemoveStaff(ulong userID)
{
try
{
using MySqlConnection c = Connection.GetConnection();
c.Open();
using MySqlCommand update = new("DELETE FROM staff WHERE user_id = @user_id", c);
update.Parameters.AddWithValue("@user_id", userID);
update.Prepare();
return update.ExecuteNonQuery() > 0;
}
catch (MySqlException e)
{
Logger.Warn("Could not remove staff from database.", e);
return false;
}
}
public static bool AssignStaff(Ticket ticket, ulong staffID)
{
try
{
using MySqlConnection c = Connection.GetConnection();
c.Open();
using MySqlCommand update = new("UPDATE tickets SET assigned_staff_id = @assigned_staff_id WHERE id = @id", c);
update.Parameters.AddWithValue("@assigned_staff_id", staffID);
update.Parameters.AddWithValue("@id", ticket.id);
update.Prepare();
return update.ExecuteNonQuery() > 0;
}
catch (MySqlException e)
{
Logger.Warn("Could not add staff to ticket in database.", e);
return false;
}
}
public static bool UnassignStaff(Ticket ticket)
{
return AssignStaff(ticket, 0);
}
public static bool SetStaffActive(ulong staffID, bool active)
{
try
{
using MySqlConnection c = Connection.GetConnection();
c.Open();
MySqlCommand update = new("UPDATE staff SET active = @active WHERE user_id = @user_id", c);
update.Parameters.AddWithValue("@user_id", staffID);
update.Parameters.AddWithValue("@active", active);
update.Prepare();
return update.ExecuteNonQuery() > 0;
}
catch (MySqlException e)
{
Logger.Warn("Could not set staff member as active in database.", e);
return false;
}
}
public static List<StaffMember> GetActiveStaff(params ulong[] ignoredUserIDs)
{
using MySqlConnection c = Connection.GetConnection();
c.Open();
using MySqlCommand selection = new("SELECT * FROM staff WHERE active = true AND user_id NOT IN (@user_ids)", c);
selection.Parameters.AddWithValue("@user_ids", string.Join(",", ignoredUserIDs));
selection.Prepare();
MySqlDataReader results = selection.ExecuteReader();
if (!results.Read())
{
return [];
}
List<StaffMember> staffMembers = [new(results)];
while (results.Read())
{
staffMembers.Add(new StaffMember(results));
}
results.Close();
return staffMembers;
}
public static List<StaffMember> GetAllStaff(params ulong[] ignoredUserIDs)
{
using MySqlConnection c = Connection.GetConnection();
c.Open();
using MySqlCommand selection = new("SELECT * FROM staff WHERE user_id NOT IN (@user_ids)", c);
selection.Parameters.AddWithValue("@user_ids", string.Join(",", ignoredUserIDs));
selection.Prepare();
MySqlDataReader results = selection.ExecuteReader();
if (!results.Read())
{
return [];
}
List<StaffMember> staffMembers = [new(results)];
while (results.Read())
{
staffMembers.Add(new StaffMember(results));
}
results.Close();
return staffMembers;
}
public static bool IsStaff(ulong staffID)
{
using MySqlConnection c = Connection.GetConnection();
c.Open();
using MySqlCommand selection = new("SELECT * FROM staff WHERE user_id=@user_id", c);
selection.Parameters.AddWithValue("@user_id", staffID);
selection.Prepare();
MySqlDataReader results = selection.ExecuteReader();
if (!results.Read())
{
return false;
}
results.Close();
return true;
}
public static bool TryGetStaff(ulong staffID, out StaffMember staffMember)
{
using MySqlConnection c = Connection.GetConnection();
c.Open();
using MySqlCommand selection = new("SELECT * FROM staff WHERE user_id=@user_id", c);
selection.Parameters.AddWithValue("@user_id", staffID);
selection.Prepare();
MySqlDataReader results = selection.ExecuteReader();
if (!results.Read())
{
staffMember = null;
return false;
}
staffMember = new StaffMember(results);
results.Close();
return true;
}
}