refactor: optimize database queries in almoxarifado and configuracaoAlmoxarifado files by replacing filter methods with indexed queries for improved performance and clarity
This commit is contained in:
@@ -33,18 +33,21 @@ export const listarMateriais = query({
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
let query = ctx.db.query('materiais');
|
let materiais;
|
||||||
|
|
||||||
if (args.ativo !== undefined) {
|
if (args.ativo !== undefined) {
|
||||||
query = query.withIndex('by_ativo', (q) => q.eq('ativo', args.ativo));
|
materiais = await ctx.db
|
||||||
|
.query('materiais')
|
||||||
|
.withIndex('by_ativo', (q) => q.eq('ativo', args.ativo!))
|
||||||
|
.collect();
|
||||||
} else if (args.categoria) {
|
} else if (args.categoria) {
|
||||||
query = query.withIndex('by_categoria', (q) => q.eq('categoria', args.categoria));
|
materiais = await ctx.db
|
||||||
|
.query('materiais')
|
||||||
|
.withIndex('by_categoria', (q) => q.eq('categoria', args.categoria!))
|
||||||
|
.collect();
|
||||||
} else {
|
} else {
|
||||||
query = query;
|
materiais = await ctx.db.query('materiais').collect();
|
||||||
}
|
}
|
||||||
|
|
||||||
let materiais = await query.collect();
|
|
||||||
|
|
||||||
// Filtros adicionais
|
// Filtros adicionais
|
||||||
if (args.busca) {
|
if (args.busca) {
|
||||||
const buscaLower = args.busca.toLowerCase();
|
const buscaLower = args.busca.toLowerCase();
|
||||||
@@ -98,20 +101,29 @@ export const listarMovimentacoes = query({
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
let query = ctx.db.query('movimentacoesEstoque');
|
let movimentacoes;
|
||||||
|
|
||||||
if (args.materialId) {
|
if (args.materialId) {
|
||||||
query = query.withIndex('by_materialId', (q) => q.eq('materialId', args.materialId));
|
movimentacoes = await ctx.db
|
||||||
|
.query('movimentacoesEstoque')
|
||||||
|
.withIndex('by_materialId', (q) => q.eq('materialId', args.materialId!))
|
||||||
|
.collect();
|
||||||
} else if (args.tipo) {
|
} else if (args.tipo) {
|
||||||
query = query.withIndex('by_tipo', (q) => q.eq('tipo', args.tipo));
|
movimentacoes = await ctx.db
|
||||||
|
.query('movimentacoesEstoque')
|
||||||
|
.withIndex('by_tipo', (q) => q.eq('tipo', args.tipo!))
|
||||||
|
.collect();
|
||||||
} else if (args.funcionarioId) {
|
} else if (args.funcionarioId) {
|
||||||
query = query.withIndex('by_funcionarioId', (q) => q.eq('funcionarioId', args.funcionarioId));
|
movimentacoes = await ctx.db
|
||||||
|
.query('movimentacoesEstoque')
|
||||||
|
.withIndex('by_funcionarioId', (q) => q.eq('funcionarioId', args.funcionarioId!))
|
||||||
|
.collect();
|
||||||
} else {
|
} else {
|
||||||
query = query.withIndex('by_data');
|
movimentacoes = await ctx.db
|
||||||
|
.query('movimentacoesEstoque')
|
||||||
|
.withIndex('by_data')
|
||||||
|
.collect();
|
||||||
}
|
}
|
||||||
|
|
||||||
let movimentacoes = await query.collect();
|
|
||||||
|
|
||||||
// Filtros de data
|
// Filtros de data
|
||||||
if (args.dataInicio) {
|
if (args.dataInicio) {
|
||||||
movimentacoes = movimentacoes.filter((m) => m.data >= args.dataInicio!);
|
movimentacoes = movimentacoes.filter((m) => m.data >= args.dataInicio!);
|
||||||
@@ -146,18 +158,26 @@ export const listarRequisicoes = query({
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
let query = ctx.db.query('requisicoesMaterial');
|
let requisicoes;
|
||||||
|
|
||||||
if (args.status) {
|
if (args.status) {
|
||||||
query = query.withIndex('by_status', (q) => q.eq('status', args.status));
|
requisicoes = await ctx.db
|
||||||
|
.query('requisicoesMaterial')
|
||||||
|
.withIndex('by_status', (q) => q.eq('status', args.status!))
|
||||||
|
.collect();
|
||||||
} else if (args.solicitanteId) {
|
} else if (args.solicitanteId) {
|
||||||
query = query.withIndex('by_solicitanteId', (q) => q.eq('solicitanteId', args.solicitanteId));
|
requisicoes = await ctx.db
|
||||||
|
.query('requisicoesMaterial')
|
||||||
|
.withIndex('by_solicitanteId', (q) => q.eq('solicitanteId', args.solicitanteId!))
|
||||||
|
.collect();
|
||||||
} else if (args.setorId) {
|
} else if (args.setorId) {
|
||||||
query = query.withIndex('by_setorId', (q) => q.eq('setorId', args.setorId));
|
requisicoes = await ctx.db
|
||||||
|
.query('requisicoesMaterial')
|
||||||
|
.withIndex('by_setorId', (q) => q.eq('setorId', args.setorId!))
|
||||||
|
.collect();
|
||||||
|
} else {
|
||||||
|
requisicoes = await ctx.db.query('requisicoesMaterial').collect();
|
||||||
}
|
}
|
||||||
|
|
||||||
const requisicoes = await query.collect();
|
|
||||||
|
|
||||||
// Ordenar por data de criação (mais recente primeiro)
|
// Ordenar por data de criação (mais recente primeiro)
|
||||||
requisicoes.sort((a, b) => b.criadoEm - a.criadoEm);
|
requisicoes.sort((a, b) => b.criadoEm - a.criadoEm);
|
||||||
|
|
||||||
@@ -207,16 +227,21 @@ export const listarAlertas = query({
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
let query = ctx.db.query('alertasEstoque');
|
let alertas;
|
||||||
|
|
||||||
if (args.status) {
|
if (args.status) {
|
||||||
query = query.withIndex('by_status', (q) => q.eq('status', args.status));
|
alertas = await ctx.db
|
||||||
|
.query('alertasEstoque')
|
||||||
|
.withIndex('by_status', (q) => q.eq('status', args.status!))
|
||||||
|
.collect();
|
||||||
} else if (args.tipo) {
|
} else if (args.tipo) {
|
||||||
query = query.withIndex('by_tipo', (q) => q.eq('tipo', args.tipo));
|
alertas = await ctx.db
|
||||||
|
.query('alertasEstoque')
|
||||||
|
.withIndex('by_tipo', (q) => q.eq('tipo', args.tipo!))
|
||||||
|
.collect();
|
||||||
|
} else {
|
||||||
|
alertas = await ctx.db.query('alertasEstoque').collect();
|
||||||
}
|
}
|
||||||
|
|
||||||
const alertas = await query.collect();
|
|
||||||
|
|
||||||
// Ordenar por data de criação (mais recente primeiro)
|
// Ordenar por data de criação (mais recente primeiro)
|
||||||
alertas.sort((a, b) => b.criadoEm - a.criadoEm);
|
alertas.sort((a, b) => b.criadoEm - a.criadoEm);
|
||||||
|
|
||||||
@@ -486,7 +511,7 @@ export const editarMaterial = mutation({
|
|||||||
if (args.codigo && args.codigo !== material.codigo) {
|
if (args.codigo && args.codigo !== material.codigo) {
|
||||||
const codigoExistente = await ctx.db
|
const codigoExistente = await ctx.db
|
||||||
.query('materiais')
|
.query('materiais')
|
||||||
.withIndex('by_codigo', (q) => q.eq('codigo', args.codigo))
|
.withIndex('by_codigo', (q) => q.eq('codigo', args.codigo!))
|
||||||
.unique();
|
.unique();
|
||||||
|
|
||||||
if (codigoExistente) {
|
if (codigoExistente) {
|
||||||
@@ -1100,11 +1125,13 @@ export const listarMateriaisInterno = internalQuery({
|
|||||||
ativo: v.optional(v.boolean())
|
ativo: v.optional(v.boolean())
|
||||||
},
|
},
|
||||||
handler: async (ctx, args) => {
|
handler: async (ctx, args) => {
|
||||||
let query = ctx.db.query('materiais');
|
|
||||||
if (args.ativo !== undefined) {
|
if (args.ativo !== undefined) {
|
||||||
query = query.withIndex('by_ativo', (q) => q.eq('ativo', args.ativo));
|
return await ctx.db
|
||||||
|
.query('materiais')
|
||||||
|
.withIndex('by_ativo', (q) => q.eq('ativo', args.ativo!))
|
||||||
|
.collect();
|
||||||
}
|
}
|
||||||
return await query.collect();
|
return await ctx.db.query('materiais').collect();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1114,11 +1141,11 @@ export const listarAlertasPorMaterial = internalQuery({
|
|||||||
status: v.optional(alertaStatus)
|
status: v.optional(alertaStatus)
|
||||||
},
|
},
|
||||||
handler: async (ctx, args) => {
|
handler: async (ctx, args) => {
|
||||||
let query = ctx.db
|
const query = ctx.db
|
||||||
.query('alertasEstoque')
|
.query('alertasEstoque')
|
||||||
.withIndex('by_materialId', (q) => q.eq('materialId', args.materialId));
|
.withIndex('by_materialId', (q) => q.eq('materialId', args.materialId));
|
||||||
if (args.status) {
|
if (args.status) {
|
||||||
query = query.filter((q) => q.eq(q.field('status'), args.status));
|
return await query.filter((q) => q.eq(q.field('status'), args.status!)).collect();
|
||||||
}
|
}
|
||||||
return await query.collect();
|
return await query.collect();
|
||||||
}
|
}
|
||||||
@@ -1129,11 +1156,13 @@ export const listarAlertasInterno = internalQuery({
|
|||||||
status: v.optional(alertaStatus)
|
status: v.optional(alertaStatus)
|
||||||
},
|
},
|
||||||
handler: async (ctx, args) => {
|
handler: async (ctx, args) => {
|
||||||
let query = ctx.db.query('alertasEstoque');
|
|
||||||
if (args.status) {
|
if (args.status) {
|
||||||
query = query.withIndex('by_status', (q) => q.eq('status', args.status));
|
return await ctx.db
|
||||||
|
.query('alertasEstoque')
|
||||||
|
.withIndex('by_status', (q) => q.eq('status', args.status!))
|
||||||
|
.collect();
|
||||||
}
|
}
|
||||||
return await query.collect();
|
return await ctx.db.query('alertasEstoque').collect();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export const obterConfiguracao = query({
|
|||||||
|
|
||||||
const config = await ctx.db
|
const config = await ctx.db
|
||||||
.query('configuracoesAlmoxarifado')
|
.query('configuracoesAlmoxarifado')
|
||||||
.filter((q) => q.eq(q.field('ativo'), true))
|
.withIndex('by_ativo', (q) => q.eq('ativo', true))
|
||||||
.first();
|
.first();
|
||||||
|
|
||||||
// Se não existe configuração, retornar valores padrão
|
// Se não existe configuração, retornar valores padrão
|
||||||
@@ -142,7 +142,7 @@ export const obterConfiguracaoInterno = internalQuery({
|
|||||||
handler: async (ctx) => {
|
handler: async (ctx) => {
|
||||||
const config = await ctx.db
|
const config = await ctx.db
|
||||||
.query('configuracoesAlmoxarifado')
|
.query('configuracoesAlmoxarifado')
|
||||||
.filter((q) => q.eq(q.field('ativo'), true))
|
.withIndex('by_ativo', (q) => q.eq('ativo', true))
|
||||||
.first();
|
.first();
|
||||||
|
|
||||||
if (!config) {
|
if (!config) {
|
||||||
|
|||||||
@@ -143,7 +143,5 @@ export const almoxarifadoTables = {
|
|||||||
ativo: v.boolean(),
|
ativo: v.boolean(),
|
||||||
atualizadoPor: v.id('usuarios'),
|
atualizadoPor: v.id('usuarios'),
|
||||||
atualizadoEm: v.number()
|
atualizadoEm: v.number()
|
||||||
})
|
}).index('by_ativo', ['ativo'])
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user