1
+ class JsonProcessorService
2
+ def self . import_all_data
3
+ begin
4
+ # Carregar os arquivos JSON
5
+ classes_path = Rails . root . join ( 'classes.json' )
6
+ members_path = Rails . root . join ( 'class_members.json' )
7
+
8
+ # Verificar existência dos arquivos
9
+ unless File . exist? ( classes_path ) && File . exist? ( members_path )
10
+ Rails . logger . error ( "Arquivos JSON não encontrados: #{ classes_path } , #{ members_path } " )
11
+ return {
12
+ success : false ,
13
+ error : "Arquivos JSON não encontrados" ,
14
+ class_members : { error : "Arquivo não encontrado" , errors : [ ] } ,
15
+ classes : { error : "Arquivo não encontrado" , errors : [ ] }
16
+ }
17
+ end
18
+
19
+ # Ler os conteúdos dos arquivos
20
+ classes_data = File . read ( classes_path )
21
+ members_data = File . read ( members_path )
22
+
23
+ # Processar os dados
24
+ classes_result = process_classes ( classes_data )
25
+ members_result = process_discentes ( members_data )
26
+
27
+ # Verificar se houve erros em algum dos processos
28
+ all_success = classes_result [ :success ] && members_result [ :success ]
29
+ all_errors = classes_result [ :errors ] + members_result [ :errors ]
30
+
31
+ return {
32
+ success : all_success ,
33
+ class_members : {
34
+ total_processed : members_result [ :total_processed ] ,
35
+ errors : members_result [ :errors ]
36
+ } ,
37
+ classes : {
38
+ total_processed : classes_result [ :total_processed ] ,
39
+ errors : classes_result [ :errors ]
40
+ }
41
+ }
42
+ rescue StandardError => e
43
+ Rails . logger . error ( "Erro na importação: #{ e . message } \n #{ e . backtrace . join ( "\n " ) } " )
44
+ return {
45
+ success : false ,
46
+ error : e . message ,
47
+ class_members : { error : e . message , errors : [ ] } ,
48
+ classes : { error : e . message , errors : [ ] }
49
+ }
50
+ end
51
+ end
52
+
53
+ def self . process_classes ( data )
54
+ Rails . logger . info ( "Método process_classes chamado mas está desativado conforme solicitado" )
55
+ Rails . logger . info ( "Não estamos criando disciplinas/turmas, apenas usuários serão associados à turma ID 1" )
56
+
57
+ return { success : true , total_processed : 0 , errors : [ ] }
58
+ rescue JSON ::ParserError => e
59
+ Rails . logger . error ( "JSON inválido de classes: #{ e . message } " )
60
+ raise "JSON inválido de classes: #{ e . message } "
61
+ end
62
+ def self . process_discentes ( data )
63
+ parsed_data = JSON . parse ( data )
64
+ errors = [ ]
65
+ processed_users = 0
66
+
67
+ # Simplificar a abordagem - usar turma com ID 1
68
+ begin
69
+ turma = Turma . find ( 1 )
70
+ Rails . logger . info ( "Usando turma fixa com ID 1: #{ turma . inspect } " )
71
+ rescue => e
72
+ Rails . logger . error ( "Não foi possível encontrar a turma com ID 1: #{ e . message } " )
73
+ # Não vamos criar turmas para simplificar, conforme solicitado
74
+ return { success : false , total_processed : 0 , errors : [ "Turma com ID 1 não encontrada. Certifique-se de que existe ao menos uma turma no sistema." ] }
75
+ end
76
+
77
+ parsed_data . each do |turma_data |
78
+ begin
79
+ disciplina_code = turma_data [ 'code' ]
80
+ Rails . logger . info ( "Processando dados para disciplina com código: #{ disciplina_code } - (apenas para registro, não criando disciplinas)" )
81
+
82
+ # Não vamos mais verificar ou criar disciplinas/turmas
83
+ # Comentado conforme solicitado:
84
+ # Não criamos turmas, apenas usamos a turma ID 1
85
+
86
+ alunos = turma_data [ 'dicente' ]
87
+
88
+ if alunos . nil? || !alunos . is_a? ( Array )
89
+ errors << "Formato inválido para alunos na turma com código: #{ disciplina_code } "
90
+ Rails . logger . error ( "Formato inválido para alunos na turma com código: #{ disciplina_code } " )
91
+ next
92
+ end
93
+
94
+ Rails . logger . info ( "Processando #{ alunos . length } alunos" )
95
+
96
+ alunos . each do |aluno_data |
97
+ begin
98
+ Rails . logger . info ( "Processando aluno: #{ aluno_data . inspect } " )
99
+
100
+ # Validar dados do aluno
101
+ unless aluno_data [ 'email' ] . present? && aluno_data [ 'matricula' ] . present?
102
+ errors << "Dados incompletos para aluno: #{ aluno_data . inspect } "
103
+ Rails . logger . error ( "Dados incompletos para aluno: #{ aluno_data . inspect } " )
104
+ next
105
+ end
106
+
107
+ # Verificar se o aluno já existe pelo email ou matrícula
108
+ existing_user = User . find_by ( email : aluno_data [ 'email' ] ) ||
109
+ User . find_by ( registration : aluno_data [ 'matricula' ] )
110
+
111
+ if existing_user
112
+ Rails . logger . info ( "Aluno já existe: #{ existing_user . name } - #{ existing_user . email } " )
113
+ # Associar à turma ID 1
114
+ unless TurmaAluno . exists? ( turma_id : turma . id , aluno_id : existing_user . id )
115
+ TurmaAluno . create! ( turma_id : turma . id , aluno_id : existing_user . id )
116
+ Rails . logger . info ( "Aluno associado à turma ID 1" )
117
+ else
118
+ Rails . logger . info ( "Aluno já associado à turma ID 1" )
119
+ end
120
+ processed_users += 1
121
+ next
122
+ end
123
+
124
+ # Criar apenas usuário, não criar disciplinas/turmas (conforme solicitado)
125
+ Rails . logger . info ( "Criando novo aluno: #{ aluno_data [ 'nome' ] } - #{ aluno_data [ 'email' ] } " )
126
+
127
+ # Determinar o papel do usuário
128
+ role = 'student'
129
+ if aluno_data [ 'ocupacao' ] . present?
130
+ ocupacao = aluno_data [ 'ocupacao' ] . to_s . downcase
131
+ role = ( ocupacao == 'dicente' || ocupacao == 'aluno' || ocupacao == 'estudante' ) ? 'student' :
132
+ ( ocupacao == 'professor' || ocupacao == 'docente' ) ? 'professor' : 'student'
133
+ end
134
+
135
+ aluno = User . create! (
136
+ name : aluno_data [ 'nome' ] || "Usuário #{ aluno_data [ 'matricula' ] } " ,
137
+ major : aluno_data [ 'curso' ] || 'Não informado' ,
138
+ registration : aluno_data [ 'matricula' ] ,
139
+ email : aluno_data [ 'email' ] ,
140
+ role : role ,
141
+ password : "padrao123"
142
+ )
143
+
144
+ # Associar à turma ID 1
145
+ if aluno . persisted?
146
+ TurmaAluno . create! (
147
+ turma_id : turma . id ,
148
+ aluno_id : aluno . id
149
+ )
150
+ Rails . logger . info ( "Aluno criado e associado à turma ID 1" )
151
+ processed_users += 1
152
+ else
153
+ errors << "Erro ao criar o usuário: #{ aluno_data [ 'email' ] } - #{ aluno . errors . full_messages . join ( ', ' ) } "
154
+ Rails . logger . error ( "Erro ao criar o usuário: #{ aluno_data [ 'email' ] } - #{ aluno . errors . full_messages . join ( ', ' ) } " )
155
+ end
156
+ rescue => e
157
+ errors << "Erro ao processar aluno #{ aluno_data [ 'email' ] || 'sem email' } : #{ e . message } "
158
+ Rails . logger . error ( "Erro ao processar aluno #{ aluno_data [ 'email' ] || 'sem email' } : #{ e . message } " )
159
+ Rails . logger . error ( e . backtrace . join ( "\n " ) )
160
+ end
161
+ end
162
+ rescue => e
163
+ errors << "Erro ao processar dados de alunos: #{ e . message } "
164
+ Rails . logger . error ( "Erro ao processar dados de alunos: #{ e . message } " )
165
+ Rails . logger . error ( e . backtrace . join ( "\n " ) )
166
+ end
167
+ end
168
+
169
+ Rails . logger . info ( "Processamento de alunos concluído: #{ processed_users } alunos processados, #{ errors . length } erros" )
170
+ return { success : errors . empty? , total_processed : processed_users , errors : errors }
171
+ rescue JSON ::ParserError => e
172
+ Rails . logger . error ( "JSON inválido de discentes: #{ e . message } " )
173
+ Rails . logger . error ( e . backtrace . join ( "\n " ) )
174
+ raise "JSON inválido de discentes: #{ e . message } "
175
+ end
176
+ end
0 commit comments