Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions backend/prisma/manual-copy/0055-f_insere_log_atividade.pgsql
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
CREATE OR REPLACE FUNCTION f_insere_log_atividade(
p_pessoa_id INTEGER,
p_ip INET,
p_pessoa_sessao_id INTEGER
)
RETURNS VOID
LANGUAGE plpgsql
AS $$
DECLARE
v_existing_count INTEGER;
BEGIN
INSERT INTO pessoa_ultima_atividade
(pessoa_id, pessoa_sessao_id, ip, ultima_atividade_em)
VALUES
(p_pessoa_id, p_pessoa_sessao_id, p_ip, NOW())
ON CONFLICT (pessoa_id) DO UPDATE
SET pessoa_sessao_id = EXCLUDED.pessoa_sessao_id,
ip = EXCLUDED.ip,
ultima_atividade_em = EXCLUDED.ultima_atividade_em;

SELECT COUNT(*)
INTO v_existing_count
FROM pessoa_atividade_log
WHERE pessoa_sessao_id = p_pessoa_sessao_id
AND criado_em > (NOW() - INTERVAL '1 minute');

IF v_existing_count = 0 THEN
INSERT INTO pessoa_atividade_log
(pessoa_id, ip, pessoa_sessao_id, criado_em)
VALUES
(p_pessoa_id, p_ip, p_pessoa_sessao_id, NOW());
END IF;
END;
$$;
23 changes: 0 additions & 23 deletions backend/prisma/migrations/20231228211508_session/migration.sql
Original file line number Diff line number Diff line change
Expand Up @@ -44,26 +44,3 @@ ALTER TABLE "pessoa_atividade_log" ADD CONSTRAINT "pessoa_atividade_log_pessoa_i

-- AddForeignKey
ALTER TABLE "pessoa_atividade_log" ADD CONSTRAINT "pessoa_atividade_log_pessoa_sessao_id_fkey" FOREIGN KEY ("pessoa_sessao_id") REFERENCES "pessoa_sessao"("id") ON DELETE RESTRICT ON UPDATE CASCADE;


CREATE OR REPLACE FUNCTION f_insere_log_atividade(
p_pessoa_id INTEGER,
p_ip INET,
p_pessoa_sessao_id INTEGER
)
RETURNS VOID AS $$
DECLARE
v_existing_count INTEGER;
BEGIN
SELECT COUNT(*)
INTO v_existing_count
FROM pessoa_atividade_log
WHERE pessoa_sessao_id = p_pessoa_sessao_id
AND criado_em > (NOW() - INTERVAL '1 minute');

IF v_existing_count = 0 THEN
INSERT INTO pessoa_atividade_log (pessoa_id, ip, pessoa_sessao_id, criado_em)
VALUES (p_pessoa_id, p_ip, p_pessoa_sessao_id, NOW());
END IF;
END;
$$ LANGUAGE plpgsql;
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
-- CreateTable
CREATE TABLE "pessoa_ultima_atividade" (
"id" SERIAL NOT NULL,
"pessoa_id" INTEGER NOT NULL,
"pessoa_sessao_id" INTEGER,
"ip" INET NOT NULL,
"ultima_atividade_em" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,

CONSTRAINT "pessoa_ultima_atividade_pkey" PRIMARY KEY ("id")
);

-- CreateIndex
CREATE INDEX "pessoa_ultima_atividade_ultima_atividade_em_idx" ON "pessoa_ultima_atividade"("ultima_atividade_em");

-- CreateIndex
CREATE UNIQUE INDEX "pessoa_ultima_atividade_pessoa_id_key" ON "pessoa_ultima_atividade"("pessoa_id");

-- AddForeignKey
ALTER TABLE "pessoa_ultima_atividade" ADD CONSTRAINT "pessoa_ultima_atividade_pessoa_id_fkey" FOREIGN KEY ("pessoa_id") REFERENCES "pessoa"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "pessoa_ultima_atividade" ADD CONSTRAINT "pessoa_ultima_atividade_pessoa_sessao_id_fkey" FOREIGN KEY ("pessoa_sessao_id") REFERENCES "pessoa_sessao"("id") ON DELETE SET NULL ON UPDATE CASCADE;
26 changes: 22 additions & 4 deletions backend/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,8 @@ model Pessoa {
AtualizacoesEmLoteCriadas AtualizacaoEmLote[] @relation("AtualizacaoEmLoteCriador")
AtualizacoesEmLoteRemovidas AtualizacaoEmLote[] @relation("AtualizacaoEmLoteRemovedor")

ultimaAtividade PessoaUltimaAtividade?

@@index([email])
@@map("pessoa")
}
Expand Down Expand Up @@ -3502,7 +3504,7 @@ model Relatorio {

sistema ModuloSistema @default(SMAE)

resumo_saida Json @db.Json @default("{}")
resumo_saida Json @default("{}") @db.Json

// Coluna espelhada da RelatorioFilha, para facilitar a busca.
processado_em DateTime? @db.Timestamptz(6)
Expand Down Expand Up @@ -4853,9 +4855,10 @@ model PessoaSessao {
removido_em DateTime?
removido_ip String? @db.Inet

PessoaSessaoAtiva PessoaSessaoAtiva[]
PessoaAtividadeLog PessoaAtividadeLog[]
LogGenerico LogGenerico[]
PessoaSessaoAtiva PessoaSessaoAtiva[]
PessoaAtividadeLog PessoaAtividadeLog[]
LogGenerico LogGenerico[]
PessoaUltimaAtividade PessoaUltimaAtividade[]

@@index([pessoa_id])
@@map("pessoa_sessao")
Expand Down Expand Up @@ -7822,3 +7825,18 @@ enum ApiRequestLogControlStatus {
FAILED_BACKUP
FAILED_RESTORE
}

model PessoaUltimaAtividade {
id Int @id @default(autoincrement())
pessoa_id Int
pessoa_sessao_id Int?
ip String @db.Inet
ultima_atividade_em DateTime @default(now()) @db.Timestamptz(6)

pessoa Pessoa @relation(fields: [pessoa_id], references: [id], onDelete: Cascade)
sessao PessoaSessao? @relation(fields: [pessoa_sessao_id], references: [id], onDelete: SetNull)

@@unique([pessoa_id])
@@index([ultima_atividade_em])
@@map("pessoa_ultima_atividade")
}
2 changes: 2 additions & 0 deletions backend/src/pessoa/entities/list-pessoa.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,6 @@ export class ListPessoa {
cargo?: string | null;
registro_funcionario?: string | null;
cpf?: string | null;

ultima_atividade_em?: Date | null;
}
4 changes: 2 additions & 2 deletions backend/src/pessoa/pessoa.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1416,6 +1416,7 @@ export class PessoaService implements OnModuleInit {
perfil_acesso_id: true,
},
},
ultimaAtividade: { select: { ultima_atividade_em: true } },
},
});

Expand All @@ -1433,11 +1434,10 @@ export class PessoaService implements OnModuleInit {
lotacao: p.pessoa_fisica?.lotacao ? p.pessoa_fisica.lotacao : undefined,
orgao_id: p.pessoa_fisica?.orgao_id || undefined,
perfil_acesso_ids: p.PessoaPerfil.map((e) => e.perfil_acesso_id).filter((e) => visiblePriv.includes(e)),
ultima_atividade_em: p.ultimaAtividade?.ultima_atividade_em ?? null,
};
});

this.logger.log(`encontrado ${listFixed.length} resultados`);

return listFixed;
}

Expand Down