91 lines
2.8 KiB
C#
91 lines
2.8 KiB
C#
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();
|
|
}
|
|
} |