LevelcodeLicenseAPP/DataAccess/LicencaMaquinaDAL.cs
2026-03-25 16:26:11 -03:00

220 lines
6.9 KiB
C#

using LevelCode.License.Models;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
namespace LevelCode.License.DataAccess
{
public class LicencaMaquinaDAL
{
private readonly DbConexao _db;
public LicencaMaquinaDAL(DbConexao db)
{
_db = db;
}
// =========================
// REGISTRAR MÁQUINA
// =========================
public int Inserir(ModeloLicencaMaquina modelo)
{
SqlCommand cmd = new SqlCommand(
@"INSERT INTO Licencas_Maquinas
(LicencaId, HWID, HWID_Hash, PrimeiroUso, UltimoUso, DataAtivacao, Status)
VALUES
(@LicencaId, @HWID, @HWID_Hash, @PrimeiroUso, @UltimoUso, @DataAtivacao, @Status);
SELECT SCOPE_IDENTITY();",
_db.Conexao);
cmd.Parameters.AddWithValue("@LicencaId", modelo.LicencaId);
cmd.Parameters.AddWithValue("@HWID", (object)modelo.HWID ?? DBNull.Value);
cmd.Parameters.AddWithValue("@HWID_Hash", (object)modelo.HWID_Hash ?? DBNull.Value);
cmd.Parameters.AddWithValue("@PrimeiroUso", modelo.PrimeiroUso);
cmd.Parameters.AddWithValue("@UltimoUso", modelo.UltimoUso);
cmd.Parameters.AddWithValue("@DataAtivacao", (object)modelo.DataAtivacao ?? DBNull.Value);
cmd.Parameters.AddWithValue("@Status", modelo.Status);
_db.Abrir();
int id = Convert.ToInt32(cmd.ExecuteScalar());
_db.Fechar();
return id;
}
// =========================
// BUSCAR MÁQUINA POR LICENÇA + HWID
// =========================
public ModeloLicencaMaquina BuscarPorLicencaEHash(int licencaId, string hwidHash)
{
SqlCommand cmd = new SqlCommand(
@"SELECT * FROM Licencas_Maquinas
WHERE LicencaId = @LicencaId
AND HWID_Hash = @HWID_Hash",
_db.Conexao);
cmd.Parameters.AddWithValue("@LicencaId", licencaId);
cmd.Parameters.AddWithValue("@HWID_Hash", hwidHash);
_db.Abrir();
SqlDataReader dr = cmd.ExecuteReader();
ModeloLicencaMaquina modelo = null;
if (dr.Read())
{
modelo = Mapear(dr);
}
dr.Close();
_db.Fechar();
return modelo;
}
// =========================
// CONTAR MÁQUINAS ATIVAS
// =========================
public int ContarMaquinasAtivas(int licencaId)
{
SqlCommand cmd = new SqlCommand(
@"SELECT COUNT(*)
FROM Licencas_Maquinas
WHERE LicencaId = @LicencaId
AND Status = 1",
_db.Conexao);
cmd.Parameters.AddWithValue("@LicencaId", licencaId);
_db.Abrir();
int total = Convert.ToInt32(cmd.ExecuteScalar());
_db.Fechar();
return total;
}
// =========================
// ATUALIZAR ÚLTIMO USO
// =========================
public void AtualizarUltimoUso(int id)
{
SqlCommand cmd = new SqlCommand(
@"UPDATE Licencas_Maquinas
SET UltimoUso = GETDATE()
WHERE Id = @Id",
_db.Conexao);
cmd.Parameters.AddWithValue("@Id", id);
_db.Abrir();
cmd.ExecuteNonQuery();
_db.Fechar();
}
// =========================
// ATUALIZAR STATUS DA MÁQUINA
// =========================
public void AtualizarStatus(int id, int status)
{
SqlCommand cmd = new SqlCommand(
@"UPDATE Licencas_Maquinas
SET Status = @Status
WHERE Id = @Id",
_db.Conexao);
cmd.Parameters.AddWithValue("@Status", status);
cmd.Parameters.AddWithValue("@Id", id);
_db.Abrir();
cmd.ExecuteNonQuery();
_db.Fechar();
}
// =========================
// MAPEAR DATAREADER → MODELO
// =========================
public List<ModeloLicencaMaquina> ListarPorLicenca(int licencaId)
{
List<ModeloLicencaMaquina> lista = new List<ModeloLicencaMaquina>();
SqlCommand cmd = new SqlCommand(
@"SELECT
Id,
LicencaId,
HWID,
HWID_Hash,
PrimeiroUso,
UltimoUso,
DataAtivacao,
Status
FROM Licencas_Maquinas
WHERE LicencaId = @LicencaId
ORDER BY PrimeiroUso",
_db.Conexao);
cmd.Parameters.AddWithValue("@LicencaId", licencaId);
_db.Abrir();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(new ModeloLicencaMaquina
{
Id = Convert.ToInt32(dr["Id"]),
LicencaId = Convert.ToInt32(dr["LicencaId"]),
HWID = dr["HWID"].ToString(),
HWID_Hash = dr["HWID_Hash"] != DBNull.Value
? dr["HWID_Hash"].ToString()
: null,
PrimeiroUso = Convert.ToDateTime(dr["PrimeiroUso"]),
UltimoUso = Convert.ToDateTime(dr["UltimoUso"]),
DataAtivacao = dr["DataAtivacao"] != DBNull.Value
? (DateTime?)Convert.ToDateTime(dr["DataAtivacao"])
: null,
Status = Convert.ToInt32(dr["Status"])
});
}
dr.Close();
_db.Fechar();
return lista;
}
public void DesativarMaquina(int id)
{
SqlCommand cmd = new SqlCommand(
@"UPDATE Licencas_Maquinas
SET Status = 0
WHERE Id = @Id",
_db.Conexao);
cmd.Parameters.AddWithValue("@Id", id);
_db.Abrir();
cmd.ExecuteNonQuery();
_db.Fechar();
}
private ModeloLicencaMaquina Mapear(SqlDataReader dr)
{
return new ModeloLicencaMaquina
{
Id = Convert.ToInt32(dr["Id"]),
LicencaId = Convert.ToInt32(dr["LicencaId"]),
HWID = dr["HWID"] as string,
HWID_Hash = dr["HWID_Hash"] as string,
PrimeiroUso = Convert.ToDateTime(dr["PrimeiroUso"]),
UltimoUso = Convert.ToDateTime(dr["UltimoUso"]),
DataAtivacao = dr["DataAtivacao"] != DBNull.Value
? (DateTime?)Convert.ToDateTime(dr["DataAtivacao"])
: null,
Status = Convert.ToInt32(dr["Status"])
};
}
}
}