ServerDatabase/Database/CommandHandler.cs

91 lines
2.8 KiB
C#
Raw Normal View History

2024-03-22 12:11:19 -04:00
using Npgsql;
using ServerDatabase.Utils;
namespace ServerDatabase;
public class CommandHandler
{
private IBetterTable _betterTable;
internal CommandHandler(IBetterTable betterTable)
{
this._betterTable = betterTable;
}
private List<Parameter> Parameters = new();
private List<Parameter> Values = new();
private Order? Order = null;
public CommandHandler WithFilter(Parameter p)
{
Parameters.Add(p);
return this;
}
public CommandHandler WithValue(Parameter p)
{
Values.Add(p);
return this;
}
public CommandHandler WithFilter<T>(TableColumn<T> column, T value, string sign = "=") where T : notnull
{
return WithFilter(column.CreateParameter(value, sign));
}
public CommandHandler WithValue<T>(TableColumn<T> column, T value) where T : notnull
{
return WithValue(column.CreateParameter(value));
}
public CommandHandler AscendBy<T>(TableColumn<T> column) where T : notnull
{
Order = column.GetAssendingOrder();
return this;
}
public CommandHandler DescendBy<T>(TableColumn<T> column) where T : notnull
{
Order = column.GetDecendingOrder();
return this;
}
public T Read<T>(TableColumn<T> column) where T : notnull
{
return _betterTable.DatabaseHandler.Read<T>($"SELECT {column.Name} FROM {_betterTable.Name} WHERE", Order, Parameters.ToArray());
}
public void Insert()
{
_betterTable.Insert(Values.ToArray());
}
public void Update()
{
if (string.IsNullOrEmpty(_betterTable.DatabaseHandler.DB) || string.IsNullOrEmpty(_betterTable.DatabaseHandler.IP) || string.IsNullOrEmpty(_betterTable.DatabaseHandler.Uname) || string.IsNullOrEmpty(_betterTable.DatabaseHandler.PW)) throw new Exception("Database connection not fully defined");
using NpgsqlConnection con = new(_betterTable.DatabaseHandler.ConectionString);
con.Open();
using NpgsqlCommand cmd = new();
cmd.Connection = con;
string values = "";
foreach (Parameter param in Values)
{
values += $"{param.PGParameter.ParameterName} {param.Sign} @{param.PGParameter.ParameterName}, ";
cmd.Parameters.Add(param.PGParameter);
}
values = values.Remove(values.Length - 2, 2);
string fils = "";
foreach (Parameter param in Parameters)
{
fils += $"{param.PGParameter.ParameterName} {param.Sign} @{param.PGParameter.ParameterName} AND";
cmd.Parameters.Add(param.PGParameter);
}
fils = fils.Remove(fils.Length - 4, 4);
cmd.CommandText = $"UPDATE {_betterTable.Name} SET {values} WHERE {fils};";
cmd.Prepare();
cmd.ExecuteNonQuery();
con.Close();
}
}