- Recerber requisição
- Validar token
- Identificar serviço
- Executar serviço
Neste fluxo, quando dizemos "sincronizar" significa: 1. caso não exista: crie; 2. caso já exista: atualizar alguns campos. Para saber se já existe é usada uma chave externa vinda do arquivo a ser sincronizado.
ATENÇÃO: Se a chave for alterada manualmente ou por outro plugin a sincronização quebrará. Via de regra, a chave é o
idnumber
. Mas também pode ser o username, como no caso douser
.
Após realizar o fluxo padrão
- Validar JSON
- Sucesso: O JSON veio
- Sucesso: O JSON consegue ser decodificado com sucesso
- Sucesso: O JSON está conforme o esquema (falta)
- Sincronizar o Issuer oAuth2 do SUAP (Mover isso pra ser feito no upgrade, aqui apenas pegaríamos o já existente)
- Sincronizar Diário e Sala de Coordenação
- Sincronizar estrutura das categorias.
- Sincronizar a categoria "Diários"
- Chave:
idnumber
='diarios' - Insere:
idnumber
='diarios'name
='Diários'parent
=0
- Atualiza: nada
- Exclui: nunca
- Chave:
- Sincronizar a categoria do "Campus"
- Chave:
idnumber
=campus.sigla - Insere:
idnumber
=campus.siglaname
=campus.descricaoparent
=diario_category.id
- Atualiza: nada
- Exclui: nunca
- Chave:
- Sincronizar a categoria do "Curso"
- Chave:
idnumber
=curso.codigo - Insere:
idnumber
=curso.codigoname
=curso.nomeparent
=campus_category.id
- Atualiza: nada
- Exclui: nunca
- Chave:
- Sincronizar a categoria do "Semestre", se Diário
- Chave:
idnumber
=curso.codigo + '.' + ano_periodo - Insere:
idnumber
=curso.codigo + '.' + ano_periodoname
=ano_periodoparent
=curso_category.id
- Atualiza: nada
- Exclui: nunca
- Chave:
- Sincronizar a categoria da "Turma", se Diário
- Chave:
idnumber
=turma.codigo - Insere:
idnumber
=turma.codigoname
=turma.codigoparent
=semestre_category.id
- Atualiza: nada
- Exclui: nunca
- Chave:
- Retornar o ID da categoria da "Turma", se Diário, ou o ID da categoria do "Curso", se Coordenação
- Sincronizar a categoria "Diários"
- Sincronizar o Diário na categoria da Turma
- Chave:
idnumber
=turma.codigo + '.' + componente.sigla + '#' + diario.id. Se Diárioidnumber
=turma.codigo + '.' + componente.sigla + '#' + diario.id. Se Sala de coordenação
- Insere:
idnumber
=turma.codigo + '.' + componente.sigla + '#' + diario.idshortname
=turma.codigo + '.' + componente.sigla + '#' + diario.idcategory
=turma_category.idfullname
=componente.descricaovisible
=>0enablecompletion
=>1showreports
=>1completionnotify
=>1customfield_campus_id
=campus.idcustomfield_campus_descricao
=campus.descricaocustomfield_campus_sigla
=campus.siglacustomfield_curso_id
=curso.idcustomfield_curso_codigo
=curso.codigo,customfield_curso_descricao
=curso.descricaocustomfield_curso_nome
=curso.nomecustomfield_curso_sala_coordenacao
='Não' || 'Sim'customfield_turma_id
=turma.id. Se Diáriocustomfield_turma_codigo
=turma.codigo. Se Diáriocustomfield_turma_ano_periodo
=turma.ano_periodo. Se Diáriocustomfield_diario_id
=diario.id. Se Diáriocustomfield_diario_situacao
=diario.situacao. Se Diáriocustomfield_disciplina_id
=componente.id. Se Diáriocustomfield_disciplina_sigla
=componente.sigla. Se Diáriocustomfield_disciplina_descricao
=componente.descricao. Se Diáriocustomfield_disciplina_descricao_historico
=componente.descricao_historico. Se Diáriocustomfield_disciplina_tipo
=componente.qtd_avaliacoes. Se Diáriocustomfield_disciplina_optativo
=componente.qtd_avaliacoes. Se Diáriocustomfield_disciplina_qtd_avaliacoes
=componente.qtd_avaliacoes. Se Diário
- Atualiza:
shortname
=turma.codigo + '.' + componente.sigla + '#' + diario.id. Se Diário - Exclui: nunca
- Chave:
- Sincronizar usuarios
- Sincronizar usuário
- Chave:
username
=ifrnid. Sendo que para servidores ou alunos é a matricula, para os demais é o CPF - Insere:
username
=usuario.ifrnidfirstname
=usuario.apenas_o_primeiro_do_nome_completolastname
=usuario.todo_o_resto_do_nome_completoauth
=config('default_student_auth' || 'default_teacher_auth' || 'default_assistant_auth' || 'default_instructor_auth')email
=usuario.email || usuario.email_secundariosuspended
=(usuario.status || usuario.situacao) != 'ativo'password
=uniqid()timezone
='99'confirmed
=1mnethostid
=1
- Atualiza:
firstname
=usuario.apenas_o_primeiro_do_nome_completolastname
=usuario.todo_o_resto_do_nome_completoauth
=config('default_student_auth' || 'default_teacher_auth' || 'default_assistant_auth' || 'default_instructor_auth')email
=usuario.email || usuario.email_secundariosuspended
=(usuario.status || usuario.situacao) != 'ativo'profile__programa_nome
=aluno.programa || 'Institucional'. Apenas para alunosprofile__curso_descricao
=aluno.curso.nome. Apenas para alunosprofile__curso_codigo
=aluno.curso.codigo. Apenas para alunosprofile__polo_id
=aluno.polo.id. Apenas para alunosprofile__polo_nome
=aluno.polo.descricao. Apenas para alunos
- Exclui: nunca
- Chave:
- Sincronizar grupos do usuário
- Cada grupo será conforme
- Entrada: YYYYS, onde: YYYY é o ano de entrada, S é o semestre de entrada. Estes dados estão nos 5 primeiros caracteres da matrícula do aluno.
- Turma: turma.codigo
- Polo: aluno.polo.descricao
- Programa: aluno.programa || 'Institucional'
- Sincronizar grupo
- Chave:
courseid
=course.idname
=aluno.entrada || diario.turma || aluno.polo || aluno.programa
- Insere:
courseid
=course.idname
=aluno.entrada || diario.turma || aluno.polo || aluno.programa
- Atualiza: nada
- Exclui: nunca
- Chave:
- Sincronizar inscrição do usuário no grupo
- Chave:
groupid
=group.iduserid
=usuario.id
- Insere:
groupid
=group.iduserid
=usuario.id
- Atualiza: nada
- Exclui: nunca
- Chave:
- Cada grupo será conforme
- Sincronizar usuário autenticação oAuth2
- Chave:
username
=usuario.ifrnidissuerid
=default.issuerid
- Insere:
username
=usuario.ifrnidissuerid
=default.issueridemail
=usuario.todo_o_resto_do_nome_completotimecreated
=time()usermodified
=0confirmtoken
=''confirmtokenexpires
=0timemodified
=time()
- Atualiza: nada
- Exclui: nunca
- Chave:
- Sincronizar preferencias padrões do usuário
- Conforme configurado no admin do Moodle
- Sincronizar inscrição
- Chave:
courseid
=course.iduserid
=usuario.user.id
- Insere:
enrol_instanceid
=aluno_enrol.instance || professor_enrol.instance || tutor_enrol.instance || docente_enrol.instanceuserid
=usuario.user.idroleid
=aluno_enrol.roleid || professor_enrol.roleid || tutor_enrol.roleid || docente_enrol.roleidstatus
=aluno.situacao_diario == 'ativo'. Apenas para alunos, os demais sempreENROL_USER_ACTIVE
.timestart
=time()timeend
=0recovergrades
=null
- Atualiza:
enrol_instanceid
=aluno_enrol.instance || professor_enrol.instance || tutor_enrol.instance || docente_enrol.instanceuserid
=usuario.user.idroleid
=aluno_enrol.roleid || professor_enrol.roleid || tutor_enrol.roleid || docente_enrol.roleidstatus
=aluno.situacao_diario == 'ativo'. Apenas para alunos, os demais sempreENROL_USER_ACTIVE
- Exclui: nunca
- Chave:
- Inativar os ALUNOS que não vieram na sicronização, se Diário
- Chave:
roleid
=aluno_enrol.roleidcourseid
=course.iduserid
=not in (alunos_sincronizados)
- Insere: nada
- Atualiza:
enrol
=aluno_enrol.enrolenrol_instanceid
=aluno_enrol.instanceuserid
=aluno.user.idstatus
=ENROL_USER_SUSPENDED
- Exclui: nunca
- Chave:
- Sincronizar usuário
- Sincronizar coortes
- Sincronizar coorte
- Chave:
idnumber
=coorte.idnumber - Insere:
idnumber
=coorte.idnumbername
=coorte.nomedescription
=coorte.descricaovisible
=coorte.ativocontextid
=1
- Atualiza: nada
name
=coorte.nomedescription
=coorte.descricaovisible
=coorte.ativocontextid
=1
- Exclui: nunca
- Chave:
- Sincronizar colaboradores da coorte
- Sincronizar usuário
- Chave:
username
=ifrnid. Sendo que para servidores ou alunos é a matricula, para os demais é o CPF - Insere:
username
=colaborador.ifrnidfirstname
=colaborador.apenas_o_primeiro_do_nome_completolastname
=colaborador.todo_o_resto_do_nome_completoemail
=colaborador.email || usuario.email_secundarioauth
=config('default_assistant_auth')suspended
=!colaborador.vinculo_ativopassword
=uniqid()timezone
='99'confirmed
=1mnethostid
=1
- Atualiza:
firstname
=colaborador.apenas_o_primeiro_do_nome_completolastname
=colaborador.todo_o_resto_do_nome_completoemail
=colaborador.email || usuario.email_secundarioauth
=config('default_assistant_auth')suspended
=!colaborador.vinculo_ativo
- Exclui: nunca
- Chave:
- Adicionar colaborador à coorte. se já existir dará certo?
cohortid
=coorte.idcohortid
=colaborador.user.id
- Sincronizar usuário
- Sincroniza o enrol no curso
- Sincronizar usuário
- Chave:
enrol
=cohortcustomint1
=coorte.idcourseid
=course.id
- Insere:
enrol
=cohortcustomint1
=coorte.idcourseid
=course.idroleid
=colaborador.roleid
- Atualiza: nada
- Exclui: nunca
- Chave:
- Adicionar colaborador à coorte. se já existir dará certo?
cohortid
=cooote.idcohortid
=colaborador.user.id
- Sincronizar usuário
- Sincronizar coorte
- Sincronizar estrutura das categorias.
- Retornar URL do Diário e URL da Sala de Coordenação
- Validar JSON
- Sucesso: O JSON veio
- Sucesso: O JSON consegue ser decodificado com sucesso
- Sucesso: O JSON está conforme o esquema (falta)
- Sincronizar o Issuer oAuth2 do SUAP (Mover isso pra ser feito no upgrade, aqui apenas pegaríamos o já existente)
- Sincronizar Diário e Sala de Coordenação
- Sincronizar estrutura das categorias.
- Sincronizar a categoria "Diários"
- Sincronizar a categoria do "Campus"
- Sincronizar a categoria do "Curso"
- Sincronizar a categoria do "Semestre", se Diário
- Sincronizar a categoria da "Turma", se Diário
- Retornar o ID da categoria da "Turma", se Diário, ou o ID da categoria do "Curso", se Coordenação
- Sincronizar o Diário na categoria da Turma ou Coordenação na categoria da Curso
- Sincronizar usuarios
- Sincronizar usuário
- Sincronizar grupos do usuário
- Cada grupo será conforme
- Sincronizar grupo (grupos: Entrada, Turma, Polo, Programa)
- Sincronizar inscrição do usuário no grupo
- Sincronizar usuário autenticação oAuth2
- Sincronizar preferencias padrões do usuário
- Sincronizar inscrição
- Inativar os ALUNOS que não vieram na sicronização, se Diário
- Sincronizar coortes
- Sincronizar coorte
- Sincronizar colaboradores da coorte
- Sincronizar usuário
- Adicionar colaborador à coorte. se já existir dará certo?
- Sincroniza o enrol no curso
- Sincronizar usuário
- Adicionar colaborador à coorte. se já existir dará certo?
- Sincronizar estrutura das categorias.
- Retornar URL do Diário e URL da Sala de Coordenação
- Descrever mais.
- Descrever mais....
feat:
novas funcionalidades.fix:
correção de bugs.refactor:
refatoração ou performances (sem impacto em lógica).style:
estilo ou formatação de código (sem impacto em lógica).test:
testes.doc:
documentação no código ou do repositório.env:
CI/CD ou settings.build:
build ou dependências.