using Google.Protobuf.WellKnownTypes;
using MySql.Data.MySqlClient;
using MySqlX.XDevAPI.Relational;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;
using Org.BouncyCastle.Asn1.X509;
using servicesDAO;
using System.Data;
using System.Xml.Linq;
namespace server
{
public class ServicesDAO
{
protected DataAccess data = new DataAccess();
#region funciones
///
/// Método que convierte una tabla DataTable en una cadena de texto formato JSON
///
/// Tabla de datos a convertir
/// Cadena de texto en formato JSON
public string DataTableToJson(DataTable dataTable)
{
string JSONString = string.Empty;
JSONString = Newtonsoft.Json.JsonConvert.SerializeObject(dataTable);
return JSONString;
}
public DataTable JsonToDataTable(string json)
{
DataTable dt = (DataTable)JsonConvert.DeserializeObject(json, (typeof(DataTable)));
return dt;
}
private List GetParametersfromSP(string nameSP)
{
List listParameters = new List();
listParameters = GetParametersfromSP(nameSP);
return listParameters;
}
///
/// Método dinámico que consulta en BD en base a parámetros tabla y cláusula condicional
///
/// nombre de la tabla (DESPUES DEL FROM) o se puede complementar con JOINS completos
/// sentencia condicional después de la palabra reservada WHERE
/// retorna JSON con resultados de la consulta
public String getDataTablefromClause(string tab_name, string wclause, string wsent)
{
try
{
MySqlParameter[] _param = new MySqlParameter[3];
_param[0] = new MySqlParameter("@tab_name", tab_name);
_param[1] = new MySqlParameter("@wcol_name", wclause);
_param[2] = new MySqlParameter("@w_sent", wsent);
DataTable dtData = data.GetDataTableFromStoreProcedure("cloud_services.spskDy_tablefromclause", _param);
if (dtData.Rows.Count > 0)
{
string jsonString = DataTableToJson(dtData);
return jsonString;
}
else { return ""; }
}
catch (Exception e)
{ return e.Message; }
}
public String getTemporalContractedServiceID()
{
try
{
DataTable dtData = data.GetDataTableFromStoreProcedure("cloud_services.tmp_contracted_services_id", null);
if (dtData.Rows.Count > 0)
{
string jsonString = DataTableToJson(dtData);
return jsonString;
}
else { return ""; }
}
catch (Exception e)
{ return e.Message; }
}
#endregion
#region métodos de data
#region data
///
/// Método que obtiene las categorias de ofertas disponibles
///
/// IdCategoria, puede ir nulo
/// retorna una cadena de texto formato json
public DataTable? getProductType(Int32 idProductType = 0)
{
try
{
MySqlParameter[] parameters = {
new MySqlParameter("@idProductType", idProductType > 0 ? idProductType : null) };
DataTable dtCategories = data.GetDataTableFromStoreProcedure("cloud_services.spslGetProductType", parameters);
if (dtCategories.Rows.Count > 0)
return dtCategories;
else return null;
}
catch (Exception e)
{ return null; }
}
///
///Método que obtiene las categorias de ofertas disponibles
///
/// IdCategoria, puede ir nulo
/// Retorna el resultado en tipo DataTable
public DataTable getProductTypeAsDataTable(Int32 idProductType = 0)
{
try
{
MySqlParameter[] parameters = {
new MySqlParameter("@idProductType", idProductType>0 ? idProductType: null) };
DataTable dtCategories = data.GetDataTableFromStoreProcedure("cloud_services.spslGetProductType", parameters);
if (dtCategories.Rows.Count > 0)
{
return dtCategories;
}
else { return null; }
}
catch (Exception e)
{ return null; }
}
///
/// Método que obtiene el listado de servicios según categoría seleccionada
///
/// IdCategoria
/// Retorna el listado de servicios en una cadena de texto formato JSON
public String getServicesCatalog(Int32 idProductType = 0)
{
try
{
MySqlParameter[] parameters = {
new MySqlParameter("@product_type_id", idProductType > 0 ? idProductType : null) };
DataTable dataServicesCatalog = data.GetDataTableFromStoreProcedure("cloud_services.spslGetServicesByTypeId", parameters);
if (dataServicesCatalog.Rows.Count > 0)
{
string jsonString = DataTableToJson(dataServicesCatalog);
return jsonString;
}
else { return ""; }
}
catch (Exception e)
{ return e.Message; }
}
public DataTable? getPlansService(Int32 idService = 0)
{
try
{
MySqlParameter[] parameters = {
new MySqlParameter("@idService", idService>0 ? idService : null)
};
DataTable dataPlansService = data.GetDataTableFromStoreProcedure("cloud_services.spslGetPlansServicesById", parameters);
if (dataPlansService.Rows.Count > 0)
return dataPlansService;
else { return null; }
}
catch (Exception e)
{ return null; }
}
public string getServicesAllContracted()
{
try
{
DataTable dataPlansService = data.GetDataTableFromStoreProcedure("cloud_services.spslGetAllServicesContracted", null);
if (dataPlansService.Rows.Count > 0)
{
string jsonString = DataTableToJson(dataPlansService);
return jsonString;
}
else { return ""; }
}
catch (Exception e)
{ return e.Message; }
}
public string getIpServiceById(Int32 idFirewall = 0)
{
try
{
MySql.Data.MySqlClient.MySqlParameter[] parameters = {
new MySql.Data.MySqlClient.MySqlParameter("@idFirewall", idFirewall>0 ? idFirewall: null)
};
DataTable dataPlansService = data.GetDataTableFromStoreProcedure("cloud_services.spslGetIpServiceById", parameters);
if (dataPlansService.Rows.Count > 0)
{
string jsonString = DataTableToJson(dataPlansService);
return jsonString;
}
else { return ""; }
}
catch (Exception e)
{ return e.Message; }
}
public string setContractedServices(Int32 user_id = 0,
Int32 backup_scheduled_id = 0, Int32 plan_id = 0,
Int32 firewall_id = 0)
{
try
{
MySqlParameter[] _param = new MySqlParameter[4];
_param[0] = new MySqlParameter("@user_id", user_id );
_param[1] = new MySqlParameter("@backup_scheduled_id", backup_scheduled_id > 0 ? backup_scheduled_id : null);
_param[2] = new MySqlParameter("@plan_id", plan_id);
_param[3] = new MySqlParameter("@firewall_id", firewall_id > 0 ? firewall_id : null);
DataTable dataService = data.GetDataTableFromStoreProcedure("cloud_services.spinIntoContractedServices", _param);
if (dataService.Rows.Count > 0)
{
int value = 0;
if ((Int32.TryParse(dataService.Rows[0][0].ToString(), out value)) && value > 0)
{
string jsonString = DataTableToJson(dataService);
return jsonString;
}
else
throw new Exception("Couldn't get service information ID");
}
else { throw new Exception("Couldn't save service information"); }
}
catch (Exception e)
{ return e.Message; }
}
public string setFirewall(string ips = "", bool is_segment =false, Int32 firewall_id = 0)
{
try
{
MySqlParameter[] _param = new MySqlParameter[3];
_param[0] = new MySqlParameter("@ips", ips);
_param[1] = new MySqlParameter("@is_segment", is_segment);
_param[2] = new MySqlParameter("@firewall_id", firewall_id > 0 ? firewall_id : null);
DataTable dataPlansService = data.GetDataTableFromStoreProcedure("cloud_services.spinInsertIntoFirewall", _param);
if (dataPlansService.Rows.Count > 0)
{
string jsonString = DataTableToJson(dataPlansService);
return jsonString;
}
else { return ""; }
}
catch (Exception e)
{ return e.Message; }
}
public void setRequestQueue (int contracted_services_id, string resource_specs, DateTime request_datetime,
string identificator, string name_app)
{//spinInsertIntoRequestsQueue
}
public DataTable? getUserfromUserName(string userName = null, Int32 public_id = 0, Int32 user_id = 0,
Int32 org_id = 0)
{
try
{
MySqlParameter[] _param = new MySqlParameter[4];
_param[0] = new MySqlParameter("@user_name", userName);
_param[1] = new MySqlParameter("@public_id", public_id > 0 ? public_id : null);
_param[2] = new MySqlParameter("@user_id", user_id > 0 ? user_id : null);
_param[3] = new MySqlParameter("@org_id", org_id > 0 ? org_id : null);
DataTable dataService = data.GetDataTableFromStoreProcedure("cloud_services.spskGetUserVCD", _param);
if (dataService.Rows.Count > 0)
return dataService;
else
throw new Exception("Couldn't get user information");
}
catch (Exception e)
{ return null; }
}
public string setUserVcd(Int32 user_id, string username, string email, Int32 orgid)
{
try
{
MySqlParameter[] _param = new MySqlParameter[4];
_param[0] = new MySqlParameter("@userID", user_id);
_param[1] = new MySqlParameter("@username", username);
_param[2] = new MySqlParameter("@email", email);
_param[3] = new MySqlParameter("@org_id", orgid);
DataTable dataService = data.GetDataTableFromStoreProcedure("cloud_services.spinSetUserVCD", _param);
if (dataService.Rows.Count > 0)
{
int value = 0;
if ((Int32.TryParse(dataService.Rows[0][0].ToString(), out value)) && value > 0)
{
string jsonString = DataTableToJson(dataService);
return jsonString;
}
else
throw new Exception("Couldn't find organization information");
}
else
throw new Exception("Couldn't get user information");
}
catch (Exception e)
{ return e.Message; }
}
public DataTable? getOrgfromName(string name=null, Int32 OrgId = 0)
{
try
{
MySqlParameter[] _param = new MySqlParameter[2];
_param[0] = new MySqlParameter("@org_name", String.IsNullOrEmpty(name)==true ? null : name);
_param[1] = new MySqlParameter("@org_id", OrgId > 0 ? OrgId : null);
DataTable dataService = data.GetDataTableFromStoreProcedure("cloud_services.spskGetOrgVCD", _param);
if (dataService.Rows.Count > 0)
return dataService;
else
throw new Exception("Couldn't get organization information");
}
catch (Exception e)
{ return null; }
}
public string setOrgVcd(Int32 orgID, string orgname, string host, string apiversion )
{
try
{
MySqlParameter[] _param = new MySqlParameter[4];
_param[0] = new MySqlParameter("@orgID", orgID);
_param[1] = new MySqlParameter("@org_name", orgname);
_param[2] = new MySqlParameter("@vhost", host);
_param[3] = new MySqlParameter("@api_version", apiversion);
DataTable dataService = data.GetDataTableFromStoreProcedure("cloud_services.spinSetOrgVCD", _param);
if (dataService.Rows.Count > 0)
{
int value = 0;
if ((Int32.TryParse(dataService.Rows[0][0].ToString(), out value)) && value > 0)
{
string jsonString = DataTableToJson(dataService);
return jsonString;
}
else
throw new Exception("Couldn't save organization information");
}
else
throw new Exception("Couldn't save organization information");
}
catch (Exception e)
{ return e.Message; }
}
#endregion
#region axway
///
/// Método para almacenar en tabla Licenses
///
/// especificaciones en formato json tipo string
/// id del servicio contratado tipo entero
/// nombre de la organización tipo string
/// retorna idlicenses en formato json
public string saveLicenses(string specs, int contracted_services_id, string name)
{
try
{
MySqlParameter[] _param = new MySqlParameter[3];
_param[0] = new MySqlParameter("@nameValue", name);
_param[1] = new MySqlParameter("@specs", specs);
_param[2] = new MySqlParameter("@contracted_services_id", contracted_services_id);
DataTable dataService = data.GetDataTableFromStoreProcedure("cloud_services.spinNewLicense", _param);
int value = 0;
if (dataService.Rows.Count > 0)
{
if ((Int32.TryParse(dataService.Rows[0][0].ToString(), out value)) && value > 0)
{
string jsonString = DataTableToJson(dataService);
return jsonString;
}
else
throw new Exception("Couldn't get license information");
}
else
throw new Exception("Couldn't save license information");
}
catch (Exception e)
{ return e.Message; }
}
private string getParametersReport(string user_id)
{
String result = String.Empty;
try
{
MySqlParameter[] _param = new MySqlParameter[1];
_param[0] = new MySqlParameter("@userid", user_id);
DataTable dataPlansService = data.GetDataTableFromStoreProcedure("cloud_services.getInformationReport", _param);
if (dataPlansService.Rows.Count > 0)
{
result = DataTableToJson(dataPlansService);
}
else
throw new Exception("Couldn't find data history information");
}
catch (Exception e)
{ result = e.Message; }
return result;
}
#endregion
#endregion
}
}