umarley / seteapi Goto Github PK
View Code? Open in Web Editor NEWLicense: BSD 3-Clause "New" or "Revised" License
License: BSD 3-Clause "New" or "Revised" License
O endpoint da API que recupera os veículos (/veiculos/cod_cidade) retorna os seguintes campos:
Entretanto, a tabela de listagem do SETE requer os seguintes campos adicionais:
Como devemos proceder? Vamos incluir os campos ou modificar a tabela?
A API CRUD de ordens de serviço ainda não foi desenvolvida.
A API está requisitando campos opcionais (no caso o campo nome_responsavel). Favor verificar se está pedindo outros campos.
{
"nome": "AAAA",
"data_nascimento": "10/10/1980",
"sexo": 2,
"cor": 1,
"def_caminhar": "N",
"def_ouvir": "N",
"def_enxergar": "N",
"def_mental": "N",
"mec_tp_localizacao": 2,
"turno": 2,
"nivel": 1,
"da_porteira": "N",
"da_mataburro": "N",
"da_colchete": "N",
"da_atoleiro": "N",
"da_ponterustica": "N",
"loc_latitude": "-16.819554",
"loc_longitude": "-49.246532",
"grau_responsavel": 1
}
Os campos vinculo
e salario
devem ser optativos, para manter compatibilidade no banco de dados (uma vez que não eram obrigatórios antes).
A operação DELETE está retornando uma mensagem de erro:
https://sete.transportesufg.eng.br/rotas/{codigo_cidade}/{id_rota}
DELETE
https://sete.transportesufg.eng.br/rotas/5201405/1
{
"result": false,
"messages": "Falha ao excluir o registro. Contacte o administrador do sistema para maiores informações. <br />SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at end of input\nLINE 1: ...sete_rotas\" WHERE codigo_cidade = '5201405' AND id_escola =\n ^"
}
O endpoint de DETELE deverá excluir todos os alunos associados com os id enviados da tabela escolatemalunos.
[
{ "id_aluno": 12 },
{ "id_aluno": 14 }
]
Já o endpoint de POST deverá associar todos os alunos enviados a escola do endpoint.
O parâmetro será um vetor de objetos, em que cada objeto possui o id_aluno.
[
{ "id_aluno": 21 },
{ "id_aluno": 15 }
]
Estou desenvolvendo a integração com a API no módulo de Alunos. Atualmente no SETE DESKTOP, ao cadastrar um aluno já existe a opção de o vincular a escolas e rotas como mostra na imagem abaixo.
Fica claro então, que no modelo que foi feito para o SETE API eu preciso cadastrar o Aluno primeiramente e depois o vincular com as escolas e as rotas. E realmente não há nenhum problema quanto a isso.Ao criar um aluno, percebi que recebo um json no seguinte formato:
{
"result": true,
"messages": {
"id": 11573
}
}
Eu vejo essa resposta como algo problemático, pois na minha concepção o campo messages
serve apenas para informar erros para o usuário. Inclusive o tratamento de erros está sendo feito contando com esse campo messages
como o principal.
Com isso, gostaria de propor uma discussão sobre essa prática. É realmente necessário que seja assim? Qual seria uma outra forma de retornar essa informação?
Criar o crud fornecedores conforme swagger.
Semelhante ao issue #47
Parece que o endpoint da garagem não está funcionando. Segue um exemplo de atualização.
{
"nome": "FFFF Garagem",
"loc_latitude": "-18.821649",
"loc_longitude": "-51.256463",
"loc_endereco": "Teste",
"loc_cep": "74645-440"
}
descrição dos parâmetros todos em caixa alta
adição do campo valor_padrao
adição do campo descricao_detalhada
Ao tentar realizar a operação de DELETE da escola de um aluno me deparo com a seguinte mensagem:
DELETE https://sete.transportesufg.eng.br/alunos/5201405/3141/escola
{
"result": false,
"messages": "Falha ao excluir o registro. Contacte o administrador do sistema para maiores informações. <br />SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at end of input\nLINE 1: ...digo_cidade = '5201405' AND id_aluno = 3141 AND id_escola =\n ^"
}
Resultado esperado, remover o aluno de sua escola caso tenha.
Nome da Variável | Tipo | Exemplo | Unidade |
---|---|---|---|
codigo_cidade | INT | 5201415 | IBGE |
id_rota | INT | 2 | N/A (fk e pk) |
id_monitor | INT | 4 | N/A (fk e pk) |
Adicionar o campo vinculo a entidade Motorista
Nome da Variável | Tipo | Exemplo | Unidade |
---|---|---|---|
vinculo | INT | 1 - servidor efetivo, 2 - servidor comissionado, 3 - terceirizado , 4 - outro | N/A |
O endpoint retorna a resposta correta, mas tá vindo com 404 o que gera um erro na hora de tratar no sistema.
Template da resposta:
{
"result": "true caso calculou o custo/false caso contário",
"data": {
"custo": "valor real (ex: 10413.11)",
"params": [
{
"codigo_parametro": "NUM_MOTORISTAS",
"modulo": "Rotas",
"result": true,
"valor": 1
},
{
"codigo_parametro": "NUM_VEICULOS",
"modulo": "Rotas",
"result": false,
"valor": "Parâmetro não informado"
},
{
"codigo_parametro": "SALARIO_MEDIO_MOTORISTA",
"modulo": "Motoristas",
"result": true,
"valor": 1401.99
}
]
}
}
Caso não seja possível calcular a rota, algum parâmetro está faltando, a resposta deverá retornar result: false
.
Caso contrário, deverá retornar true
Segue os parâmetros a serem considerados:
Nome da Variável | Módulo | Origem |
---|---|---|
NUM_MOTORISTAS | Rotas | Tabela sete_rota_dirigida_por_motorista . |
NUM_VEICULOS | Rotas | Tabela sete_rota_possui_veiculo . |
SALARIO_MEDIO_MOTORISTA | Motoristas | Para cada motorista em sete_motoristas (vindo de sete_rota_dirigida_por_motorista ) pegar o campo salario e calcular a média.Resultado é a média. |
PERC_ENCARGO_SOCIAIS | Parâmetros | Tabela sete_parametros . |
PERC_CFT_CUSTO_MANUTENCAO_RODO | Parâmetros | Tabela sete_parametros (só necessário se a ROTA for rodoviária (tipo == 1)). |
PERC_CFT_CUSTO_MANUTENCAO_AQUA | Parâmetros | Tabela sete_parametros (só necessário se a ROTA for aquaviária (tipo == 2)). |
NUM_MONITORES | Monitores | Tabela sete_rota_atendida_por_monitor . |
SALARIO_MEDIO_MONITORES | Monitores | Para cada motorista em sete_monitores (vindo de sete_rota_atendida_por_monitor ) pegar o campo salario e calcular a média.Resultado é a média. Só aplicável se a ROTA possuir monitores. |
IPVA_FROTA | Frota | Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo ) pegar o campo ipva . Só necessário se a ROTA for rodoviária (tipo == 1). Resultado é o somatório. |
DPVAT_FROTA | Frota | Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo ) pegar o campo dpvat . Só necessário se a ROTA for rodoviária (tipo == 1). Resultado é o somatório. |
SRC_FROTA | Frota | Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo ) pegar o campo seguro_anual . Resultado é o somatório. |
VIDA_UTIL_RODO | Parâmetros | Tabela sete_parametros (só necessário se a ROTA for rodoviária (tipo == 1)). |
VIDA_UTIL_AQUA | Parâmetros | Tabela sete_parametros (só necessário se a ROTA for aquaviária (tipo == 2)). |
PERC_RESIDUAL_RODO | Parâmetros | Tabela sete_parametros (só necessário se a ROTA for rodoviária (tipo == 1)). |
PERC_RESIDUAL_AQUA | Parâmetros | Tabela sete_parametros (só necessário se a ROTA for aquaviária (tipo == 2)). |
PRECO_MEDIO_VEICULOS | Frota | Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo ) pegar o campo preco . Resultado é a média. |
PERC_TRC | Parâmetros | Tabela sete_parametros . |
KM_MENSAL_ROTA | Rotas | Tabela sete_rotas , campo km . Resultado é a somatória por 20 dias (x20). |
CFT_CONSUMO_COMBUSTIVEL | Frota | Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo ) pegar o campo consumo (km/l). Resultado é a média. |
PRECO_MEDIO_COMBUSTIVEIS | Parâmetros | Tabela sete_parametros . |
CFT_CONSUMO_OLEO_LUBRIFICANTE | Parâmetros | Tabela sete_parametros . |
PRECO_MEDIO_COMBUSTIVEIS | Parâmetros | Tabela sete_parametros . |
PRECO_MEDIO_PNEUS | Parâmetros | Tabela sete_parametros . NÃO ESTÁ ATUALMENTE NA TABELA PARÂMETROS. Só necessário se a ROTA for rodoviária (tipo == 1) |
NUMERO_PNEUS | Frota | Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo ) pegar o campo numero_de_pneus . Resultado é a soma. Só necessário se a ROTA for rodoviária (tipo == 1) |
PRECO_MEDIO_COMBUSTIVEIS | Parâmetros | Tabela sete_parametros . |
PRECO_MEDIO_RECAPAGEM | Parâmetros | Tabela sete_parametros . NÃO ESTÁ ATUALMENTE NA TABELA PARÂMETROS |
NUM_RECAPAGEM | Parâmetros | Tabela sete_parametros . |
VIDA_UTIL_PNEU | Frota | Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo ) pegar o campo vida_util_do_pneu . Resultado é a soma. |
CFT_CONSUMO_PECAS | Parâmetros | Tabela sete_parametros . |
PRECO_MEDIO_VEICULOS | Frota | Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo ) pegar o campo preco . Resultado é a média. |
PERC_SEGURO_AQUA | Parâmetros | Tabela sete_parametros .Só necessário se a ROTA for aquaviária (tipo == 2) |
POTENCIA_MOTOR | Frota | Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo ) pegar o campo potencia_do_motor .Só necessário se a ROTA for aquaviária (tipo == 2) |
TEMPO_ROTA | Rotas | Tabela sete_rotas , campo tempo . Só necessário se a ROTA for aquaviária (tipo == 2) |
DENSIDADE_COMBUSTIVEL | Parâmetros | Tabela sete_parametros .Só necessário se a ROTA for aquaviária (tipo == 2) |
CONSUMO_LUBRIFICANTE | Parâmetros | Tabela sete_parametros .Só necessário se a ROTA for aquaviária (tipo == 2) |
DENSIDADE_LUBRIFICANTE | Parâmetros | Tabela sete_parametros .Só necessário se a ROTA for aquaviária (tipo == 2) |
PRECO_MEDIO_LUBRIFICANTE | Parâmetros | Tabela sete_parametros .Só necessário se a ROTA for aquaviária (tipo == 2) |
PERC_MANUTENCAO_EMBARCACAO | Parâmetros | Tabela sete_parametros .Só necessário se a ROTA for aquaviária (tipo == 2) |
NUM_ALUNOS | Rotas | Tabela sete_rota_atende_aluno . |
Criar o endpoint /veiculos/modelos para retornar os modelos de veículos para o usuário poder selecionar no cadastro de veículo.
A requisição de vínculo a um monitor a uma rota retorna método não permitido (erro 405).
POST: https://sete.transportesufg.eng.br/monitores/5201405/49944398004/rota
Body:
{
"id_rota": 8
}
Resultado esperado: vínculo do monitor 49944398004 com a rota 8
Adicionar obrigatoriedade para:
mec_co_municipio
Adicionar o campo e deixá-lo como obrigatório:
mec_tp_localizacao_diferenciada
Erro ao importar o seguinte código no endpoint censo.
Parece que por algum motivo ele está tentando fazer o update no registro, quando deveria se fazer o insert.
UPDATE "sete"."sete_alunos" SET "nome" = 'VANDERLEIA REIS KAHL', "data_nascimento" = '09/10/1969', "nome_responsavel" =
'SALMA CAMATINI REIS', "sexo" = '2', "cor" = '3', "mec_tp_localizacao" = '2', "turno" = '4', "nivel" = '2',
"def_caminhar" = 'N', "def_ouvir" = 'N', "def_enxergar" = 'N', "def_mental" = 'N', "mec_id_inep" = '185483372300',
"loc_cep" = '88230000', "cpf" = '00010572945', "codigo_cidade" = '5201405', "dt_alteracao" = '2021-12-07 18:45:54',
"alterado_por" = '[email protected]' WHERE "codigo_cidade" = '4203709' AND "id_aluno" = '884'<br />SQLSTATE[23503]: Foreign key violation: 7 ERROR: insert or update on table "sete_escola_tem_alunos" violates foreign key constraint "sete_escola_tem_alunos_ibfk_2"
DETAIL: Key (id_escola, codigo_cidade)=(42081564, 5201405) is not present in table "sete_escolas".
Dado de entrada:
{
"alunos": [
{
"id_escola": 42081564,
"nome": "VANDERLEIA REIS KAHL",
"data_nascimento": "09/10/1969",
"nome_responsavel": "SALMA CAMATINI REIS",
"sexo": 2,
"cor": 3,
"mec_tp_localizacao": 2,
"turno": 4,
"nivel": 2,
"def_caminhar": "N",
"def_ouvir": "N",
"def_enxergar": "N",
"def_mental": "N",
"mec_id_inep": "185483372300",
"loc_cep": "88230000",
"cpf": "00010572945"
},
{
"id_escola": 42081564,
"nome": "ZAQUEL GUERIA DA VEIGA",
"data_nascimento": "24/09/1998",
"nome_responsavel": "MARIA DE LOURDES CORDEIRO DA VEIGA",
"sexo": 1,
"cor": 0,
"mec_tp_localizacao": 2,
"turno": 4,
"nivel": 2,
"def_caminhar": "N",
"def_ouvir": "N",
"def_enxergar": "N",
"def_mental": "N",
"mec_id_inep": "185483244302",
"loc_cep": "88230000"
},
{
"id_escola": 42081564,
"nome": "MARIA VALDETE DA SILVA",
"data_nascimento": "27/10/1966",
"nome_responsavel": "SONIA MARIA DA SILVA",
"sexo": 2,
"cor": 2,
"mec_tp_localizacao": 1,
"turno": 4,
"nivel": 2,
"def_caminhar": "N",
"def_ouvir": "N",
"def_enxergar": "N",
"def_mental": "N",
"mec_id_inep": "178516405981",
"loc_cep": "88230000",
"cpf": "05034762935"
},
{
"id_escola": 42081564,
"nome": "SOLANGE RAMOS DE SOUZA",
"data_nascimento": "15/08/1981",
"nome_responsavel": "TEREZINHA BANDEIRA",
"sexo": 2,
"cor": 0,
"mec_tp_localizacao": 2,
"turno": 4,
"nivel": 2,
"def_caminhar": "N",
"def_ouvir": "N",
"def_enxergar": "N",
"def_mental": "N",
"mec_id_inep": "185483493361",
"loc_cep": "88230000"
},
{
"id_escola": 42081564,
"nome": "EDJANE MARIA GUEDES",
"data_nascimento": "18/08/1967",
"nome_responsavel": "MARIA DE LOURDES GUEDES",
"sexo": 2,
"cor": 2,
"mec_tp_localizacao": 2,
"turno": 4,
"nivel": 2,
"def_caminhar": "N",
"def_ouvir": "N",
"def_enxergar": "N",
"def_mental": "N",
"mec_id_inep": "122273034090",
"loc_cep": "88230000",
"cpf": "05289438475"
},
{
"id_escola": 42081564,
"nome": "FLORIANO TAVARES DO NASCIMENTO",
"data_nascimento": "21/06/1987",
"nome_responsavel": "JOVELINA PATRICIO TAVARES",
"sexo": 1,
"cor": 3,
"mec_tp_localizacao": 2,
"turno": 4,
"nivel": 2,
"def_caminhar": "N",
"def_ouvir": "N",
"def_enxergar": "N",
"def_mental": "N",
"mec_id_inep": "185483290509",
"loc_cep": "88230000"
},
{
"id_escola": 42081564,
"nome": "EDSON LUIZ HERMES",
"data_nascimento": "08/08/1971",
"nome_responsavel": "OSMARINA HERMES",
"sexo": 1,
"cor": 1,
"mec_tp_localizacao": 2,
"turno": 4,
"nivel": 2,
"def_caminhar": "N",
"def_ouvir": "N",
"def_enxergar": "N",
"def_mental": "N",
"mec_id_inep": "185483505637",
"loc_cep": "88230000",
"cpf": "82815569949"
},
{
"id_escola": 42081564,
"nome": "MARIA SALVELINA FUCK",
"data_nascimento": "06/06/1958",
"nome_responsavel": "AGUEDA MARCOLINA FUCK",
"sexo": 2,
"cor": 1,
"mec_tp_localizacao": 2,
"turno": 4,
"nivel": 2,
"def_caminhar": "N",
"def_ouvir": "N",
"def_enxergar": "N",
"def_mental": "N",
"mec_id_inep": "178514414711",
"loc_cep": "88230000",
"cpf": "57788049972"
}
],
"escolas": [
{
"contato_responsavel": "SOLANGE MAFEZZOLI",
"contato_telefone": "(48) 32644000",
"mec_in_regular": "N",
"mec_in_eja": "S",
"mec_in_profissionalizante": "N",
"mec_in_especial_exclusiva": "N",
"horario_matutino": "N",
"horario_vespertino": "N",
"horario_noturno": "S",
"ensino_pre_escola": "N",
"ensino_fundamental": "S",
"ensino_medio": "N",
"ensino_superior": "N",
"id_escola": 42081564,
"mec_co_entidade": 42081564,
"nome": "UNEJA - UNIDADE EDUCACIONAL DE JOVENS E ADULTOS",
"mec_no_entidade": "UNEJA - UNIDADE EDUCACIONAL DE JOVENS E ADULTOS",
"loc_cep": "88230000",
"mec_co_municipio": "5201405",
"loc_endereco": "AV CANTORIO FLORENTINO DA SILVA - NUM 1663 - FUNDO SECRETARIA SME - BAIRRO: CENTRO",
"mec_tp_localizacao": 1,
"mec_tp_localizacao_diferenciada": 7,
"mec_tp_dependencia": 3,
"contato_email": "[email protected]",
"mec_co_uf": 42
}
]
}
A idéia é usarmos o operador de upsert para processar o lote de dados enviado abaixo.
O lote deve seguir o seguinte formato. Observe que teremos um array de alunos (com os dados no formato esperado), escolas (no formado esperado) e um array de escolatemalunos que relaciona as duas entidades. Como os alunos não tem ID por padrão, será criado um ID para cada aluno para realizar a vinculação.
{
"alunos": [
{
"id_censo": "aleatorio",
"nome": "ENZO FELIPE FANDARUFF",
"data_nascimento": "15/11/2013",
"nome_responsavel": "PALOMA APARECIDA SARMENTO INNOCENZO",
"sexo": 1,
"cor": 1,
"turno": 1,
"nivel": 1,
"def_caminhar": "S",
"def_ouvir": "S",
"def_enxergar": "S",
"def_mental": "S",
"mec_tp_localizacao": 1,
"cpf": "Não OBRIGATÓRIO",
"loc_cep": "NÃO OBRIGATÓRIO",
"origem": 1,
}
],
"escolas": [
{
"*nome": "string",
"*mec_co_entidade": 0,
"*mec_co_uf": 0,
"*mec_co_municipio": 0,
"*mec_no_entidade": "string",
"*mec_tp_dependencia": 1,
"*mec_tp_localizacao": 1,
"*mec_in_regular": "S",
"*mec_in_eja": "S",
"*mec_in_profissionalizante": "S",
"*mec_in_especial_exclusiva": "S",
"*contato_responsavel": "string",
"*horario_matutino": "S",
"*horario_vespertino": "S",
"*horario_noturno": "S",
"*ensino_superior": "S",
"*ensino_medio": "S",
"*ensino_fundamental": "S",
"*ensino_pre_escola": "S",
"loc_latitude": "string",
"loc_longitude": "string",
"loc_endereco": "string",
"loc_cep": "string",
"contato_telefone": "string",
"contato_email": "string",
}
],
"escolatemalunos": [
{
"mec_co_entidade": "",
"id_aluno": "Hash",
}
]
}
De forma semelhante ao relacionamento com a escola, devemos ter um endpoint para recuperar a rota de um determinado aluno.
/alunos/{codigo_cidade}/{id_aluno}/rota
O endpoint da API que recupera os alunos (/alunos/cod_cidade) retorna os seguintes campos:
Entretanto, a tabela de listagem do SETE requer os seguintes campos adicionais:
Como devemos proceder? Vamos incluir os campos ou modificar a tabela?
Ao tentar vincular uma escola a um aluno, recebo um erro. Para reprodução, listarei os parâmetros que estou usando:
Request:
{
"Url": "/alunos/5201405/11576/escola",
"Body": {
"id_escola": 11020490
}
}
Response:
{
"result": false,
"messages": {
"nome": "O nome do aluno deve ser informado!",
"data_nascimento": "O campo data de nascimento deve ser informado!",
"nome_responsavel": "O nome do responsável pelo aluno deve ser informado!",
"grau_responsavel": "Informe o grau de parentesco do responsável pelo aluno!"
}
}
Olá,
Por favor, adicionar os seguintes campos e atualizar a documentação da entidade alunos.
Uma utiliza 0 e a outra -1 por convenção do próprio MEC.
cor = 0
Não declarada
grau_responsavel = -1
Não Informado
O operador GET retorna um vetor com as escolas associada à aquela escola.
[
{
"id_escola": 12,
"nome": "XYZ",
} ,
{ },
{ }
]
O operador DELETE apaga o vínculo da rotas com aquela escola. Recebe como parâmetro um conjunto de escolas.
[
{ "id_escola": 2 },
{ "id_escola": 10}
]
O operador POST vincula a rotas com as escolas do endpoint.
[
{ "id_escola": 2 },
{ "id_escola": 10}
]
Umarley,
A API está retornando o seguinte erro ao tentar atualizar o shape de uma rota de um município via PUT.
Erro:
SQLSTATE[42703]: Undefined column: 7 ERROR: column "id_escola" does not exist
LINE 1: ..."5201405"}' WHERE "codigo_cidade" = '5201405' AND "id_escola...
^
Requisição:
PUT https://sete.transportesufg.eng.br/rotas/5201405/9/shape
Corpo:
{
"type": "FeatureCollection",
"id_rota": 9,
"features": [
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
-5474389.921006995,
-1902627.2729023115
],
[
-5474423.983128329,
-1902638.02936168
],
[
-5474487.087689956,
-1902761.0115471215
],
[
-5474515.771581606,
-1902834.155470826
],
[
-5474751.696590415,
-1902826.984497913
],
[
-5474880.774102834,
-1902827.7015952046
],
[
-5475060.765522927,
-1902822.681914166
],
[
-5475122.435889972,
-1902832.004178952
],
[
-5475640.180134228,
-1903062.192409432
],
[
-5475736.988268542,
-1903099.4814685744
],
[
-5476219.594745527,
-1902998.370750514
],
[
-5476289.153182776,
-1902984.7459019828
],
[
-5476522.926899711,
-1902970.4039561586
],
[
-5477070.789230198,
-1902948.8910374222
],
[
-5477310.299725463,
-1902945.3055509645
],
[
-5477643.032868586,
-1902952.476523877
],
[
-5478156.474529093,
-1902803.3202873047
],
[
-5478407.45858102,
-1902614.7236997152
],
[
-5478487.056380345,
-1902393.1406367305
],
[
-5478645.534881701,
-1902153.630141467
]
]
},
"properties": null
},
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
-5478645.534881701,
-1902153.630141467
],
[
-5478723.247911857,
-1902039.0083851747
],
[
-5478872.020347378,
-1902102.50881497
],
[
-5478737.7622958105,
-1902026.3082992155
],
[
-5478806.705619592,
-1901922.8933135488
]
]
},
"properties": {
"estilo": "Pavimentada"
}
}
]
}
Criar um endpoint para receber os shapes sem necessidade de autenticação.
Parece que o endpoint de atualização de veículo não está ligado. Verificar se o mesmo está OK.
Segue um input para atualizar um veículo.
{
"modo": 1,
"marca": "8",
"tipo": "9",
"modelo": "1",
"ano": "2000",
"origem": 1,
"placa": "AAA-1234",
"renavam": "5555555555-5",
"km_inicial": "",
"km_atual": "",
"capacidade": "100",
"manutencao": "N",
"potencia_do_motor": "100",
"preco": 19999.99,
"ipva": 2000,
"dpvat": 3000.10,
"seguro_anual": 1000.00,
"consumo": 51.12
}
Quando envio um body vazio a API retorna a seguinte mensagem.
{
"result": false,
"messages": {
"nome": "O nome do aluno deve ser informado!",
"data_nascimento": "O campo data de nascimento deve ser informado!",
"data_validade_cnh": "O campo data de validade da CNH deve ser informado!"
}
}
Veja que os campos estão com o texto de alunos e não motoristas.
Além disso, a API está exigindo o campo data_validade_cnh
que não é obrigatório.
Os campos obrigatórios são:
cpf, nome, data_nascimento, sexo, cnh, turno_manha, turno_tarde, turno_noite, tem_cnh_a, tem_cnh_b, tem_cnh_c, tem_cnh_d, tem_cnh_e
Além disso, falta incluir também o campo optativo ant_criminais
cujo valor é uma String.
Quando tento criar um novo aluno recebo a seguinte mensagem de erro:
{
"result": false,
"messages": "Falha ao inserir registro. Contacte o administrador do sistema! Statement could not be executed (42501 - 7 - ERROR: permission denied for sequence seq_alunos)"
}
Dado que utilizei na requisição. (Um novo cpf pode ser obtido em https://www.4devs.com.br/gerador_de_cpf).
{
"nome": "AAAAAA",
"data_nascimento": "19/01/1988",
"nome_responsavel": "ALINE MOREIRA DA SILVA",
"sexo": 1,
"cor": 1,
"def_caminhar": "N",
"def_ouvir": "N",
"def_enxergar": "N",
"def_mental": "N",
"mec_tp_localizacao": 2,
"turno": 1,
"cpf": "15672002064",
"nivel": 3,
"da_porteira": "N",
"da_mataburro": "N",
"da_colchete": "N",
"da_atoleiro": "N",
"da_ponterustica": "N",
"loc_latitude": "-16.692665615936",
"loc_longitude": "-49.2195544397",
"loc_cep": "68840-000",
"telefone_responsavel": "(62) 98296-5480",
"grau_responsavel": 1
}
O endpoint GET: /localidades/municipios/{codigo} não me retorna informações de identificação do município, em vez disso ele me retorna algumas informações de estado que não são tão necessárias. Segue um exemplo:
{
"nm_cidade": "Tarauacá",
"codigo_uf": 12,
"estado": "Acre"
},
{
"nm_cidade": "Xapuri",
"codigo_uf": 12,
"estado": "Acre"
}
É esperado que o endpoint retorne algum identificador da própria cidade.
Retornar o id da rota ao criá-la via uma requisição POST
{
"tipo": 1,
"nome": "ROTA-1",
"hora_ida_inicio": "10:00",
"hora_ida_termino": "11:00",
"hora_volta_inicio": "12:30",
"hora_volta_termino": "12:55",
"km": 144.44,
"tempo": 90,
"da_porteira": "S",
"da_mataburro": "S",
"da_colchete": "N",
"da_atoleiro": "N",
"da_ponterustica": "N",
"turno_matutino": "S",
"turno_vespertino": "S",
"turno_noturno": "N"
}
Falha ao excluir o registro.
Não é possível excluir o registro sete_monitores, pois está violando um fkey da tabela sete_rota_atendida_por_monitor.
DELETE https://sete.transportesufg.eng.br/monitores/5201405/49944398004
{
"result": false,
"messages": "Falha ao excluir o registro. Contacte o administrador do sistema para maiores informações. <br />SQLSTATE[23503]: Foreign key violation: 7 ERROR: update or delete on table \"sete_monitores\" violates foreign key constraint \"sete_rota_atendida_por_monitor_fk_monitor\" on table \"sete_rota_atendida_por_monitor\"\nDETAIL: Key (codigo_cidade, cpf)=(5201405, 49944398004) is still referenced from table \"sete_rota_atendida_por_monitor\"."
}
Prezado,
Estou recebendo um erro interno (500) ao tentar criar um usuário via API.
O erro se repete independente do tipo de usuário (leitor, adm, usuário)
Segue o link da requisição:
POST https://sete.transportesufg.eng.br/registro/5201405
Corpo:
{
"nome": "Teste",
"cpf": "32529688001",
"telefone": "(62) 99999-9999",
"email": "[email protected]",
"password": "e10adc3949ba59abbe56e057f20f883e",
"tipo_permissao": "leitor"
}
O operador GET retorna um vetor com os alunos associada à aquela rota.
[
{
"id_aluno": 12,
"nome": "XYZ",
} ,
{ },
{ }
]
O operador DELETE apaga o vínculo da rotas com aquele aluno. Recebe como parâmetro um conjunto de alunos.
[
{ "id_aluno": 2 },
{ "id_aluno": 10}
]
O operador POST vincula a rotas com os alunos do endpoint.
[
{ "id_aluno": 2 },
{ "id_aluno": 10}
]
Favor verificar possível problema com o endpoint, uma vez que está indicando que o veículo informado não existe.
Apesar disso, a operação GET /veiculos/{cod_cidade}/
retorna o id indicado.
{
"id_veiculo": 96
}
Retorno:
{
"data": {
"result": false,
"messages": "Veículo informada não existe!"
},
"total": 2,
"result": false
}
O operador GET retorna um vetor com as rotas associada à aquela escola, incluindo o shape.
[ { } , { }, { }]
O operador DELETE apaga o vínculo das rotas com essa escola. Recebe como parâmetro o conjunto de rotas.
[
{ "id_rota": 2 },
{ "id_rota": 10}
]
O operador POST
vincula as rotas enviadas a escola do endpoint.
[
{ "id_rota": 2 },
{ "id_rota": 10}
]
O endpoint da API que recupera as escolas (/escolas/cod_cidade) retorna os seguintes campos:
Entretanto, a tabela de listagem do SETE requer os seguintes campos adicionais:
Como devemos proceder? Vamos incluir os campos ou modificar a tabela?
Nome da Variável | Tipo | Exemplo |
---|---|---|
codigo_cidade | INT | 5201415 |
codigo_parametro | VARCHAR | ENCARGOS_SOCIAIS |
valor_parametro | TEXT | '20' |
descricao_parametro | TEXT | Porcentagem de valores a serem pagos em impostos |
Quando faço a busca por fornecedores, o JSON vem nesse formato:
{
"data": [
{
"codigo_cidade": 5201405,
"id_fornecedor": 1,
"cnpj": "04306341000140",
"nome": "Irwin S.A.",
"ramo_mecanica": "Sim",
"ramo_combustivel": "Sim",
"ramo_seguro": "Sim",
"loc_latitude": "-16.732113",
"loc_longitude": "-49.326080",
"loc_endereco": "",
"loc_cep": "74680-360",
"telefone": "(62) 99999-9999",
"dt_criacao": "2021-11-18 20:48:30",
"dt_alteracao": null,
"_links": {
"_self": "https://sete.transportesufg.eng.br/fornecedores/5201405/1"
}
}
],
"total": 1,
"result": true
}
Para motivos de padronização com outros módulos, eu prefiro que os campos "booleanos" venham de fato com 'S' ou 'N' em vez de 'Sim' ou 'Não', pois eu tenho mais controle do que fazer com eles.
O mesmo erro que acontece aqui, está acontecendo na issue #30
Request:
{
"Url": "/alunos/5201405/11576/rota",
"Body": {
"id_rota": 3
}
}
Response:
{
"result": false,
"messages": {
"nome": "O nome do aluno deve ser informado!",
"data_nascimento": "O campo data de nascimento deve ser informado!",
"nome_responsavel": "O nome do responsável pelo aluno deve ser informado!",
"grau_responsavel": "Informe o grau de parentesco do responsável pelo aluno!"
}
}
Ao tentar adicionar ou atualizar uma garagem o endpoint está exigindo que os campos loc_endereco
e loc_cep
estejam presentes.
Endpoints afetados:
POST /garagens/{codigo_cidade}
PUT /garagens/{codigo_cidade}/{id_garagem}
{
"nome": "GARAGEM",
"loc_latitude": "-16.817582",
"loc_longitude": "-49.253083",
"loc_endereco": "",
"loc_cep": "74645-210"
}
Erro retornado:
{
"result": false,
"messages": {
"loc_endereco": "O endereco da garagem deve ser informado!"
},
"_links": {
"self": {
"href": "https://sete.transportesufg.eng.br/garagens/5201405/5"
}
}
}
Na tabela motorista adicionar os seguintes campos:
Nome da Variável | Tipo | Exemplo | Unidade |
---|---|---|---|
salario | DECIMAL(15,4) | 1257.03 | R$ |
vinculo | INT | 1 - servidor efetivo, 2 - servidor comissionado, 3 - terceirizado , 4 - outro | N/A |
Na tabela veículo adicionar os seguintes campos:
Nome da Variável | Tipo | Exemplo | Unidade |
---|---|---|---|
ipva | DECIMAL(15,4) | 1257.03 | R$ |
dpvat | DECIMAL(15,4) | 592.01 | R$ |
seguro_anual | DECIMAL(15,4) | 2500 | R$ |
consumo | DECIMAL(15,4) | 10.5 | KM/L ou L/hora |
tipo_combustivel | CHAR | * 'G' = Gasolina * 'D' = Diesel * 'E' = Etanol * 'N' = Gás Natural * 'O' = Outro | N/A |
numero_de_pneus | INT | 4 | N/A |
vida_util_do_pneu | DECIMAL(15,4) | 12 | KM |
preco | DECIMAL(15,4) | 59999.20 | R$ |
potencia_do_motor | DECIMAL(15,4) | 75 | cavalos |
Prezados,
Ao tentar fazer a requisição abaixo, o servidor retorna que o CPF já existe e não permite atualizar o aluno.
Dados para reprodução:
URL:
PUT https://sete.transportesufg.eng.br/alunos/5201405/1
Corpo:
{ "loc_latitude": "-16.819225", "loc_longitude": "-49.240670", "loc_endereco": "", "loc_cep": "76929-000", "mec_tp_localizacao": 2, "da_porteira": "N", "da_mataburro": "N", "da_colchete": "S", "da_atoleiro": "S", "da_ponterustica": "N", "nome": "ADELSON JUNIOR AMORIM DIAS DO CARMO", "cpf": "07940453246", "data_nascimento": "09/02/2014", "nome_responsavel": "SARA AMORIM DIAS DO CARMO", "telefone_responavel": "", "grau_responsavel": "-1", "sexo": 1, "cor": 3, "def_caminhar": "N", "def_ouvir": "N", "def_enxergar": "N", "def_mental": "N", "turno": 2, "nivel": 4 }
Utilizaremos os seguintes campos:
Nome da Variável | Tipo | Exemplo | Unidade |
---|---|---|---|
nome | VARCHAR | Fulano da Silva | R$ |
cpf | VARCHAR | 0923818313 | N/A (sem char especial) |
data_nascimento | DATE | 19/10/2020 | N/A |
sexo | INT | 1 - M 2 - F 3 - N/I | N/A |
telefone | VARCHAR | (62) 9348-4381 | N/A |
vinculo | INT | 1 - servidor efetivo, 2 - servidor comissionado, 3 - terceirizado , 4 - outro | N/A |
salario | DECIMAL(15,4) | 2000.00 | R$ |
turno_manha | CHAR | 'S' ou 'N' | N/A |
turno_tarde | CHAR | 'S' ou 'N' | N/A |
turno_noite | CHAR | 'S' ou 'N' | N/A |
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.