Skip to main content

Criação de APIKey em hml (HARD)

 


declare @unidadeId INT,
        @UsuarioId INT,
        @correspondenteId INT,
        @hierarquiaNivelDetalhe INT,
        @senha VARCHAR(32),
        @pessoaid INT,
        @output_data varchar(max),
            @idApiKey int,
            @apikey uniqueidentifier,
            @put_data varchar(max) = '{
    "Id": null,
    "CorrespondenteId": _correspondenteId_, 
    "CanalId": 3,               ------------- ?
    "todasUnidades": 0,
    "operacao": "I"
    }'


select @correspondenteId = correspondenteid from unidade with(nolock) where cpfcnpj = '13054592000176' and Ativo = 1

-- Criando unidade do vendedor
    INSERT INTO Unidade(
        CorrespondenteId,
        UnidadeId,
        Tipo,
        CEP,
        CidadeId,
        Bairro,
        Logradouro,
        Numero,
        Complemento,
        Nome,
        Cadastro,
        CPFCNPJ,
        IndicadorId,
        Ativo,
        TipoModalidade
    )VALUES(
        @correspondenteId,
        NULL, ----------------- ?
        4,         ---------------- ?
        '60430730',          -------------------- ? 
        1749, -- SELECT * from Cidade WITH(nolock) where Nome like'%FORTALEZA%' ----------- cidade------
        'RODOLFO TEOFILO',  -----------
        'RUA TEODORETO SOUTO', ------------------- enderenço ------------
        null,  ------------? 
        null, ---------------?
        'EMILIANO LUCIUS LIMA VIANA ', ----------------- ?
        dbo.getdateBR(),
        '64190005304',        ----------- ?
        NULL,
        1,
        0
    )
    SET @unidadeId = @@IDENTITY

    SET @senha = CONVERT(VARCHAR(32), HashBytes('MD5', '641900'), 2) -- 6 primeiros difitos do cpf
    
    --Criando o usuario
    INSERT INTO Seguranca.Usuario(
        PessoaId,
        [Login],
        Senha,
        Ramal,
        CorrespondenteId,
        UnidadeId,
        Nome,
        CPFCNPJ,
        Ativo,
        Bloqueado,
        DepartamentoId,
        UsuarioTipoId,
        Cadastro
    )VALUES(
        NULL,
        'CC030177289',
        @senha,
        NULL,
        @correspondenteId,
        @unidadeId,
        'EMILIANO LUCIUS LIMA VIANA ',
        '64190005304',
        1,
        0,
        15,
        5,
        dbo.getdateBR()
    )
    SET @UsuarioId = @@IDENTITY

    INSERT INTO seguranca.UsuarioSenhaHistorico(
        UsuarioId,
        Senha,
        DataExpiracao,
        SofreExpiracao
        )VALUES(
            @usuarioId,
            @senha,
            dbo.getdateBR(),
            0
        )

 
-- Setando perfil
    INSERT INTO Seguranca.PerfilUsuario(
        PerfilId,
        UsuarioId
    )VALUES(
        18,
        @UsuarioId
    )
 
--Pegando posição do supervisor
    set  @hierarquiaNivelDetalhe =  57

-- Vinculando unidade a hierarquia/correspondente
        INSERT INTO CorrespondenteHierarquiaNivelDetalhe(
        CorrespondenteId,
        UnidadeId,
        HierarquiaNivelDetalheId,
        DataInicio,
        DataFim
    )VALUES(
        @correspondenteId,
        @unidadeId,
        @hierarquiaNivelDetalhe,
        dbo.getdateBR(),
        null
    )

   --Criando API Key

    set @put_data = replace(@put_data, '_correspondenteId_', @correspondenteId)
 
    exec Suporte.stpAPIKey @put_data, @output_data output
 
    select
        @idApiKey = id
    from openjson(@output_data) with (id int)
 
    set @output_data = null
    set @put_data = '{
    "id": null,
    "unidadeId": _unidadeID_,
    "apiKeyId": _apiKeyId_,
    "operacao": "I"
    }'
 
    set @put_data = replace(replace(@put_data, '_unidadeID_', @unidadeId), '_apiKeyId_', @idApiKey)
 
    exec Suporte.stpUnidadeAPIKey @put_data, @output_data output

    select @apikey = apikey from seguranca.apikey where Id = @idApiKey

    insert into 
        seguranca.ApikeyUnidade (Apikey, UnidadeId, DataHoraVigenciaInicio, DataHoraVigenciaFim, CanalId, VersaoApiParceirosIdMinima, VersaoApiParceirosIdMaxima)
    values
        (@apikey, @unidadeId, dbo.getdatebr(), null, 3, 1, 1)


        -----------------------------------DETALHAMENTOS--------------------------------------------------------------------------------



        
         ---------Declara variáveis de trabalho usadas ao longo do processo
declare @unidadeId INT,                          ------ Id da nova Unidade que será criada
        @UsuarioId INT,                          ------ Id do novo Usuário que será criado
        @correspondenteId INT,                   ------ Id do Correspondente (matriz) ao qual a Unidade pertence
        @hierarquiaNivelDetalhe INT,             ------ Posição na hierarquia (nível/detalhe) para vincular a Unidade
        @senha VARCHAR(32),                      ------ Hash (MD5) da senha inicial do usuário
        @pessoaid INT,                           ------ (não utilizado neste script)
        @output_data varchar(max),               ------ Saída (JSON) das procedures de API
        @idApiKey int,                           ------ Id numérico da API Key criada
        @apikey uniqueidentifier,                ------ Valor GUID da API Key criada
        @put_data varchar(max) = '{              ------ JSON de entrada para criar a API Key do Correspondente
    "Id": null,
    "CorrespondenteId": _correspondenteId_, 
    "CanalId": 3,               ------------- ? VERIFICAR OS TIPOS DE CANALID
    "todasUnidades": 0,          ------------- 0 = a API Key NÃO vale para todas as unidades (escopo restrito)
    "operacao": "I"              ------------- "I" = Inserção (criar nova API Key)
    }'


------ Localiza o CorrespondenteId a partir de uma unidade ativa por CNPJ informado
select @correspondenteId = correspondenteid
from unidade with(nolock)
where cpfcnpj = '13054592000176' and Ativo = 1

------ Criando a nova Unidade do vendedor (filial/ponto) vinculada ao Correspondente
INSERT INTO Unidade(
    CorrespondenteId,           ------ Relaciona esta unidade ao correspondente (matriz)
    UnidadeId,                  ------ Unidade pai (NULL = unidade de topo/raiz ou sem pai neste contexto)
    Tipo,                       ------ Tipo de unidade (4 = código interno para tipo específico; ex.: unidade de vendedor)
    CEP,                        ------ CEP da unidade
    CidadeId,                   ------ Id da cidade (1749 = Fortaleza, conforme comentário)
    Bairro,                     ------ Bairro da unidade
    Logradouro,                 ------ Logradouro (rua/avenida) da unidade
    Numero,                     ------ Número do endereço (NULL = sem número informado)
    Complemento,                ------ Complemento do endereço (NULL = sem complemento)
    Nome,                       ------ Nome fantasia/identificação da unidade
    Cadastro,                   ------ Data/hora do cadastro (dbo.getdateBR() = data/hora no padrão do sistema)
    CPFCNPJ,                    ------ Documento (CPF/CNPJ) associado à unidade/responsável
    IndicadorId,                ------ (NULL = sem indicador associado)
    Ativo,                      ------ 1 = unidade ativa
    TipoModalidade              ------ 0 = modalidade padrão (regra do sistema)
)VALUES(
    @correspondenteId,
    NULL, ----------------- ?   ------ Sem unidade pai; esta unidade não está subordinada a outra unidade
    4,         ---------------- ? ------ Código interno do tipo da unidade (ex.: "unidade vendedor/representante")
    '60430730',          -------------------- ? ------ CEP da unidade (Rodolfo Teófilo, Fortaleza/CE)
    1749, -- SELECT * from Cidade WITH(nolock) where Nome like'%FORTALEZA%'  ----------- cidade------
    'RODOLFO TEOFILO',  ----------- Bairro da unidade
    'RUA TEODORETO SOUTO', ------------------- enderenço ------------ Logradouro (rua)
    null,  ------------?  ------ Número (não informado)
    null, ---------------? ------ Complemento (não informado)
    'EMILIANO LUCIUS LIMA VIANA ', ----------------- ? ------ Nome de exibição da unidade (responsável/identificação)
    dbo.getdateBR(),            ------ Data/hora de criação segundo função do sistema
    '64190005304',        ----------- ? ------ Documento (CPF) vinculado à unidade (responsável)
    NULL,
    1,                          ------ Ativo
    0                           ------ TipoModalidade padrão
)
SET @unidadeId = @@IDENTITY       ------ Captura o Id gerado para a unidade (ver observações: prefira SCOPE_IDENTITY())


------ Monta senha inicial: MD5 dos 6 primeiros dígitos do CPF "641900"
SET @senha = CONVERT(VARCHAR(32), HashBytes('MD5', '641900'), 2) -- 6 primeiros dígitos do CPF


------ Criação do Usuário vinculado ao Correspondente e à nova Unidade
INSERT INTO Seguranca.Usuario(
    PessoaId,                   ------ (NULL = sem pessoa vinculada na tabela de pessoas)
    [Login],                    ------ Login de acesso
    Senha,                      ------ Hash da senha (MD5 em hex)
    Ramal,                      ------ (NULL = sem ramal)
    CorrespondenteId,           ------ Vincula ao correspondente
    UnidadeId,                  ------ Vincula à unidade recém-criada
    Nome,                       ------ Nome do usuário
    CPFCNPJ,                    ------ Documento do usuário
    Ativo,                      ------ 1 = ativo
    Bloqueado,                  ------ 0 = não bloqueado
    DepartamentoId,             ------ Departamento (15 = código interno)
    UsuarioTipoId,              ------ Tipo do usuário (5 = código interno)
    Cadastro                    ------ Data/hora de criação
)VALUES(
    NULL,
    'CC030177289',
    @senha,
    NULL,
    @correspondenteId,
    @unidadeId,
    'EMILIANO LUCIUS LIMA VIANA ',
    '64190005304',
    1,
    0,
    15,
    5,
    dbo.getdateBR()
)
SET @UsuarioId = @@IDENTITY        ------ Captura o Id do usuário criado (ver observações: prefira SCOPE_IDENTITY())


------ Registro no histórico de senhas do usuário
INSERT INTO seguranca.UsuarioSenhaHistorico(
    UsuarioId,
    Senha,
    DataExpiracao,
    SofreExpiracao
)VALUES(
    @usuarioId,
    @senha,
    dbo.getdateBR(),            ------ Data de geração/validação
    0                           ------ 0 = senha não sofre expiração automática (regra do sistema)
)


------ Concessão de perfil/acesso ao usuário
INSERT INTO Seguranca.PerfilUsuario(
    PerfilId,                   ------ Perfil de acesso (18 = perfil interno definido pelo negócio)
    UsuarioId
)VALUES(
    18,
    @UsuarioId
)


------ Define a posição (nível detalhe) na hierarquia organizacional
set  @hierarquiaNivelDetalhe =  57   ------ 57 = código da posição/nível (ex.: supervisor/região), conforme a hierarquia do negócio


------ Vincula a Unidade à hierarquia do Correspondente (vigência aberta)
INSERT INTO CorrespondenteHierarquiaNivelDetalhe(
    CorrespondenteId,
    UnidadeId,
    HierarquiaNivelDetalheId,
    DataInicio,
    DataFim
)VALUES(
    @correspondenteId,
    @unidadeId,
    @hierarquiaNivelDetalhe,
    dbo.getdateBR(),            ------ Início de vigência
    null                        ------ Sem data fim (vigente)
)


------ Criação da API Key do Correspondente (escopo no CanalId=3)
set @put_data = replace(@put_data, '_correspondenteId_', @correspondenteId)  ------ Injeta o id do correspondente no JSON

exec Suporte.stpAPIKey @put_data, @output_data output  ------ Chama a procedure que cria a API Key e retorna JSON em @output_data

------ Lê do JSON retornado o id numérico da API Key criada
select @idApiKey = id
from openjson(@output_data) with (id int)

------ Prepara JSON para vincular a API Key à Unidade
set @output_data = null
set @put_data = '{
    "id": null,
    "unidadeId": _unidadeID_,
    "apiKeyId": _apiKeyId_,
    "operacao": "I"
}'

------ Injeta ids de unidade e apiKey no JSON
set @put_data = replace(replace(@put_data, '_unidadeID_', @unidadeId), '_apiKeyId_', @idApiKey)

------ Chama a procedure que cria o vínculo Unidade x API Key
exec Suporte.stpUnidadeAPIKey @put_data, @output_data output

------ Obtém o GUID da API Key recém-criada
select @apikey = apikey
from seguranca.apikey
where Id = @idApiKey


------ Registra a vigência da API Key na Unidade (Canal 3; versões mín/máx = 1)
insert into seguranca.ApikeyUnidade (
    Apikey,                         ------ Valor GUID da API Key
    UnidadeId,                      ------ Unidade à qual a chave ficará válida
    DataHoraVigenciaInicio,         ------ Início da vigência
    DataHoraVigenciaFim,            ------ Fim da vigência (NULL = vigente)
    CanalId,                        ------ Canal de uso (3 = canal/parceiros/integração)
    VersaoApiParceirosIdMinima,     ------ Versão mínima suportada para parceiros
    VersaoApiParceirosIdMaxima      ------ Versão máxima suportada para parceiros
) values (
    @apikey,
    @unidadeId,
    dbo.getdatebr(),
    null,
    3,
    1,
    1
)