Last active
March 8, 2026 16:20
-
-
Save denoww/820866e727dfcdf679e0488189cfeb01 to your computer and use it in GitHub Desktop.
Restaura acessos deletados através da análise de logs em CSV do sistema seucondominio
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require 'csv' | |
| require 'csv' | |
| require 'open-uri' | |
| def extrair_linhas_do_arquivo_csv(url) | |
| resultados = [] | |
| URI.open(url) do |arquivo| | |
| csv = CSV.new( | |
| arquivo, | |
| headers: true, | |
| encoding: 'bom|utf-8', | |
| header_converters: ->(h) { h.to_s.strip } | |
| ) | |
| csv.each do |row| | |
| resp = linha_to_hash(row) | |
| resultados << resp if resp | |
| end | |
| end | |
| resultados | |
| end | |
| def linha_to_hash(row) | |
| acao = row['Ação'] || row['Acao'] | |
| codigo = row['Código'] || row['Codigo'] | |
| codigo_tipo = row['Código Tipo'] || row['Codigo Tipo'] | |
| email = row['Email'] || row['E-mail'] | |
| tipo = row['Tipo'] | |
| dono_acesso = row['Dono do Acesso'] | |
| return nil if [acao, tipo, codigo, dono_acesso, email].all?(&:blank?) | |
| { | |
| email: email&.strip, | |
| acao: acao&.strip, | |
| tipo: tipo&.strip, | |
| codigo: codigo&.strip, | |
| codigo_tipo: codigo_tipo&.strip, | |
| dono_acesso: dono_acesso&.strip, | |
| veiculo_id: row['veiculo_id']&.strip, | |
| utilizador_id: row['utilizador_id']&.strip, | |
| utilizador_key: row['utilizador_key']&.strip, | |
| unidade_id: row['unidade_id']&.strip, | |
| } | |
| end | |
| def get_veiculo(opt) | |
| Portaria::Veiculo.do_cliente(opt[:cliente_id]).where(id: opt[:veiculo_id]).first | |
| # veiculos = unidade.veiculos | |
| # veiculos.find { |v| v.nome == opt[:veiculo_id] } | |
| end | |
| def get_unidade(opt) | |
| Cliente::Unidade.do_cliente(opt[:cliente_id]).where(id: opt[:unidade_id]).first | |
| # veiculos = unidade.veiculos | |
| # veiculos.find { |v| v.nome == opt[:veiculo_id] } | |
| end | |
| def salvar_acesso(acesso_params) | |
| # acesso_params[:type]: "Portaria::Acesso::TagPassivo" | |
| tipo = acesso_params.delete(:tipo) | |
| tipo_obj = Portaria::Acesso::TIPOS.find { |i| tipo.to_s == i[:value] } || {} | |
| acesso_params[:type] ||= tipo_obj[:type] | |
| if acesso_params[:type].blank? | |
| p_red "type não pode ser vazio" | |
| fail ActiveRecord::Rollback | |
| end | |
| acesso = Portaria::Acesso.new(acesso_params) | |
| p_green "--------------" | |
| p_green "acesso_params" | |
| p_green acesso_params | |
| if !acesso.save | |
| p_red "--------------" | |
| p_red "Erro" | |
| p_red acesso.errors.full_messages | |
| fail ActiveRecord::Rollback | |
| end | |
| end | |
| def garantir_portaria_acesso_user_id(utilizador) | |
| if utilizador.portaria_acesso_user_id .blank? | |
| portaria_acesso_user_id = ::Cliente::UtilizadorAcesso.proximo_acesso_user_id utilizador.cliente_id | |
| utilizador.update_columns(portaria_acesso_user_id: portaria_acesso_user_id) | |
| utilizador.reload | |
| end | |
| utilizador | |
| end | |
| def get_utilizador(opt) | |
| utilizador = Cliente::UtilizadorAcesso.get_utilizador(opt[:cliente_id], {id: opt[:utilizador_id], key_utilizador: opt[:utilizador_key]) | |
| utilizador = garantir_portaria_acesso_user_id(utilizador) | |
| utilizador | |
| end | |
| def restaurar_tag_passivo(opt) | |
| p_green "restaurar_params" | |
| p_green opt | |
| unidade = get_unidade(opt) | |
| veiculo = get_veiculo(opt) | |
| utilizador = get_utilizador(opt) | |
| if utilizador.blank? | |
| p_red "utilizador não encontrado" | |
| return | |
| end | |
| unidade_id = unidade.id | |
| veiculo_id = veiculo&.id | |
| acesso_params = { | |
| tipo: opt[:tipo], | |
| codigo_tipo: opt[:codigo_tipo], | |
| codigo: opt[:codigo], | |
| unidade_id: unidade_id, | |
| cliente_id: opt[:cliente_id], | |
| veiculo_id: veiculo_id, | |
| } | |
| utilizador_obj = Cliente::UtilizadorAcesso.get_utilizador_obj utilizador | |
| acesso_params.merge!(utilizador_obj) | |
| salvar_acesso(acesso_params) | |
| end | |
| def restaurar_linha(linha, cliente_id) | |
| ApplicationRecord.transaction do | |
| p_yellow "-------------------------------------------" | |
| p_yellow "-------------------------------------------" | |
| p_yellow "log de #{linha[:acao]} em #{linha[:tipo]}" | |
| restaurar_params = linha | |
| restaurar_params[:cliente_id] = cliente_id | |
| case linha[:acao] | |
| when 'apagou' | |
| case linha[:tipo] | |
| when 'tag_passivo' | |
| restaurar_tag_passivo(restaurar_params) | |
| end | |
| end | |
| end | |
| end | |
| ############################################ | |
| ############################################ | |
| # COMO USAR | |
| ############################################ | |
| ############################################ | |
| cliente_id = 1718; | |
| csv_logs_acessos = 'https://testestreamcam.s3.us-east-1.amazonaws.com/portaria_acessos_logs_582b9d3ea7.csv' | |
| linhas = extrair_linhas_do_arquivo_csv(csv_logs_acessos); | |
| linhas.each do |linha| | |
| restaurar_linha(linha, cliente_id) | |
| end; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment