- Removed the .editorconfig file to simplify project configuration. - Refactored the ChatWidget component to enhance readability and maintainability, including the integration of current user data and improved notification handling. - Updated backend functions to utilize the new getCurrentUserFunction for user authentication, ensuring consistent user data retrieval across various modules. - Cleaned up code in multiple backend files, enhancing clarity and performance while maintaining functionality. - Improved error handling and user feedback mechanisms in user-related operations.
114 lines
3.2 KiB
TypeScript
114 lines
3.2 KiB
TypeScript
import { v } from 'convex/values';
|
|
import { mutation, query } from './_generated/server';
|
|
import { getCurrentUserFunction } from './auth';
|
|
|
|
/**
|
|
* Obter preferências de notificação para uma conversa
|
|
*/
|
|
export const obterPreferenciasConversa = query({
|
|
args: {
|
|
conversaId: v.id('conversas')
|
|
},
|
|
returns: v.union(
|
|
v.object({
|
|
pushAtivado: v.boolean(),
|
|
emailAtivado: v.boolean(),
|
|
somAtivado: v.boolean(),
|
|
silenciado: v.boolean(),
|
|
apenasMencoes: v.boolean()
|
|
}),
|
|
v.null()
|
|
),
|
|
handler: async (ctx, args) => {
|
|
const usuario = await getCurrentUserFunction(ctx);
|
|
if (!usuario) return null;
|
|
|
|
const preferencias = await ctx.db
|
|
.query('preferenciasNotificacaoConversa')
|
|
.withIndex('by_usuario_conversa', (q) =>
|
|
q.eq('usuarioId', usuario._id).eq('conversaId', args.conversaId)
|
|
)
|
|
.first();
|
|
|
|
if (!preferencias) {
|
|
// Retornar valores padrão
|
|
return {
|
|
pushAtivado: true,
|
|
emailAtivado: true,
|
|
somAtivado: true,
|
|
silenciado: false,
|
|
apenasMencoes: false
|
|
};
|
|
}
|
|
|
|
return {
|
|
pushAtivado: preferencias.pushAtivado,
|
|
emailAtivado: preferencias.emailAtivado,
|
|
somAtivado: preferencias.somAtivado,
|
|
silenciado: preferencias.silenciado,
|
|
apenasMencoes: preferencias.apenasMencoes
|
|
};
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Atualizar preferências de notificação para uma conversa
|
|
*/
|
|
export const atualizarPreferenciasConversa = mutation({
|
|
args: {
|
|
conversaId: v.id('conversas'),
|
|
pushAtivado: v.optional(v.boolean()),
|
|
emailAtivado: v.optional(v.boolean()),
|
|
somAtivado: v.optional(v.boolean()),
|
|
silenciado: v.optional(v.boolean()),
|
|
apenasMencoes: v.optional(v.boolean())
|
|
},
|
|
returns: v.object({ sucesso: v.boolean() }),
|
|
handler: async (ctx, args) => {
|
|
const usuario = await getCurrentUserFunction(ctx);
|
|
if (!usuario) return { sucesso: false };
|
|
|
|
// Verificar se usuário pertence à conversa
|
|
const conversa = await ctx.db.get(args.conversaId);
|
|
if (!conversa || !conversa.participantes.includes(usuario._id)) {
|
|
return { sucesso: false };
|
|
}
|
|
|
|
const preferenciasExistentes = await ctx.db
|
|
.query('preferenciasNotificacaoConversa')
|
|
.withIndex('by_usuario_conversa', (q) =>
|
|
q.eq('usuarioId', usuario._id).eq('conversaId', args.conversaId)
|
|
)
|
|
.first();
|
|
|
|
const agora = Date.now();
|
|
|
|
if (preferenciasExistentes) {
|
|
// Atualizar preferências existentes
|
|
await ctx.db.patch(preferenciasExistentes._id, {
|
|
pushAtivado: args.pushAtivado ?? preferenciasExistentes.pushAtivado,
|
|
emailAtivado: args.emailAtivado ?? preferenciasExistentes.emailAtivado,
|
|
somAtivado: args.somAtivado ?? preferenciasExistentes.somAtivado,
|
|
silenciado: args.silenciado ?? preferenciasExistentes.silenciado,
|
|
apenasMencoes: args.apenasMencoes ?? preferenciasExistentes.apenasMencoes,
|
|
atualizadoEm: agora
|
|
});
|
|
} else {
|
|
// Criar novas preferências com valores padrão
|
|
await ctx.db.insert('preferenciasNotificacaoConversa', {
|
|
usuarioId: usuario._id,
|
|
conversaId: args.conversaId,
|
|
pushAtivado: args.pushAtivado ?? true,
|
|
emailAtivado: args.emailAtivado ?? true,
|
|
somAtivado: args.somAtivado ?? true,
|
|
silenciado: args.silenciado ?? false,
|
|
apenasMencoes: args.apenasMencoes ?? false,
|
|
criadoEm: agora,
|
|
atualizadoEm: agora
|
|
});
|
|
}
|
|
|
|
return { sucesso: true };
|
|
}
|
|
});
|