[P2606] WebServer NGINX: plan actualizado, ficha nodo, HTTPS operativo
- P2606: Plan v1.1 EN EJECUCIÓN. Fases 1-3 completadas. - Ficha nodo srvv-nginx-rm.md. P2606 en adn/07_proyectos.md. - Incluye cambios acumulados de sesiones anteriores.
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'pg'
|
||||
require 'json'
|
||||
|
||||
module ADN
|
||||
module AmbitosDB
|
||||
module BaseOperations
|
||||
# Listar ámbitos
|
||||
def list_ambitos(activo: nil)
|
||||
query = "SELECT a.*, p.nombre as parent_nombre,
|
||||
(SELECT COUNT(*) FROM bitacoras.nodos WHERE ambito_id = a.id) as count_nodos
|
||||
FROM bitacoras.ambitos a
|
||||
LEFT JOIN bitacoras.ambitos p ON a.parent_id = p.id"
|
||||
params = []
|
||||
|
||||
unless activo.nil?
|
||||
query += " WHERE a.activo = $1"
|
||||
params << (activo ? 't' : 'f')
|
||||
end
|
||||
|
||||
query += " ORDER BY a.parent_id NULLS FIRST, a.nombre ASC"
|
||||
|
||||
res = execute(query, params)
|
||||
res.map do |r|
|
||||
r['activo'] = (r['activo'] == 't') if r.key?('activo')
|
||||
r
|
||||
end
|
||||
end
|
||||
|
||||
# Obtener información de un ámbito
|
||||
def get_ambito(id_or_nombre)
|
||||
query = "SELECT a.*, p.nombre as parent_nombre,
|
||||
(SELECT COUNT(*) FROM bitacoras.nodos WHERE ambito_id = a.id) as count_nodos
|
||||
FROM bitacoras.ambitos a
|
||||
LEFT JOIN bitacoras.ambitos p ON a.parent_id = p.id
|
||||
WHERE a.id = $1 OR a.nombre = $2 LIMIT 1"
|
||||
|
||||
id = id_or_nombre.to_i > 0 ? id_or_nombre.to_i : 0
|
||||
|
||||
res = execute(query, [id, id_or_nombre.to_s])
|
||||
return nil if res.ntuples == 0
|
||||
|
||||
row = res[0]
|
||||
row['activo'] = (row['activo'] == 't') if row.key?('activo')
|
||||
row
|
||||
end
|
||||
|
||||
# Crear un nuevo ámbito
|
||||
def create_ambito(nombre:, descripcion: nil, parent_id: nil, activo: true)
|
||||
query = "INSERT INTO bitacoras.ambitos (nombre, descripcion, parent_id, activo)
|
||||
VALUES ($1, $2, $3, $4) RETURNING *"
|
||||
params = [nombre, descripcion, parent_id, activo ? 't' : 'f']
|
||||
|
||||
res = execute(query, params)
|
||||
row = res[0]
|
||||
row['activo'] = (row['activo'] == 't') if row.key?('activo')
|
||||
row
|
||||
end
|
||||
|
||||
# Actualizar ámbito
|
||||
def update_ambito(id, campos = {})
|
||||
return nil if campos.empty?
|
||||
|
||||
set_parts = []
|
||||
params = []
|
||||
campos.each_with_index do |(k, v), i|
|
||||
set_parts << "#{k} = $#{i + 1}"
|
||||
params << (v.is_a?(TrueClass) || v.is_a?(FalseClass) ? (v ? 't' : 'f') : v)
|
||||
end
|
||||
|
||||
params << id
|
||||
query = "UPDATE bitacoras.ambitos SET #{set_parts.join(', ')}, updated_at = CURRENT_TIMESTAMP WHERE id = $#{params.length} RETURNING *"
|
||||
|
||||
res = execute(query, params)
|
||||
return nil if res.ntuples == 0
|
||||
|
||||
row = res[0]
|
||||
row['activo'] = (row['activo'] == 't') if row.key?('activo')
|
||||
row
|
||||
end
|
||||
|
||||
# Eliminar ámbito
|
||||
def delete_ambito(id)
|
||||
query = "DELETE FROM bitacoras.ambitos WHERE id = $1 RETURNING *"
|
||||
res = execute(query, [id.to_i])
|
||||
res.ntuples > 0
|
||||
end
|
||||
|
||||
# Listar nodos de un ámbito
|
||||
def get_nodos_by_ambito(ambito_id)
|
||||
query = "SELECT * FROM bitacoras.nodos WHERE ambito_id = $1 ORDER BY nombre ASC"
|
||||
res = execute(query, [ambito_id.to_i])
|
||||
res.map do |r|
|
||||
r['activo'] = (r['activo'] == 't') if r.key?('activo')
|
||||
r
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user