using Npgsql; using ServerDatabase.Utils; namespace ServerDatabase; public class CommandHandler { private IBetterTable _betterTable; internal CommandHandler(IBetterTable betterTable) { this._betterTable = betterTable; } private List Parameters = new(); private List 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(TableColumn column, T value, string sign = "=") where T : notnull { return WithFilter(column.CreateParameter(value, sign)); } public CommandHandler WithValue(TableColumn column, T value) where T : notnull { return WithValue(column.CreateParameter(value)); } public CommandHandler AscendBy(TableColumn column) where T : notnull { Order = column.GetAssendingOrder(); return this; } public CommandHandler DescendBy(TableColumn column) where T : notnull { Order = column.GetDecendingOrder(); return this; } public T Read(TableColumn column) where T : notnull { return _betterTable.DatabaseHandler.Read($"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(); } }