refactor: streamline chat widget and backend user management
- 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.
This commit is contained in:
@@ -1,136 +1,113 @@
|
||||
import { v } from "convex/values";
|
||||
import { mutation, query } from "./_generated/server";
|
||||
import { Id } from "./_generated/dataModel";
|
||||
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 identity = await ctx.auth.getUserIdentity();
|
||||
if (!identity?.email) {
|
||||
return null;
|
||||
}
|
||||
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 usuario = await ctx.db
|
||||
.query("usuarios")
|
||||
.withIndex("by_email", (q) => q.eq("email", identity.email!))
|
||||
.first();
|
||||
const preferencias = await ctx.db
|
||||
.query('preferenciasNotificacaoConversa')
|
||||
.withIndex('by_usuario_conversa', (q) =>
|
||||
q.eq('usuarioId', usuario._id).eq('conversaId', args.conversaId)
|
||||
)
|
||||
.first();
|
||||
|
||||
if (!usuario) {
|
||||
return null;
|
||||
}
|
||||
if (!preferencias) {
|
||||
// Retornar valores padrão
|
||||
return {
|
||||
pushAtivado: true,
|
||||
emailAtivado: true,
|
||||
somAtivado: true,
|
||||
silenciado: false,
|
||||
apenasMencoes: false
|
||||
};
|
||||
}
|
||||
|
||||
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,
|
||||
};
|
||||
},
|
||||
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 identity = await ctx.auth.getUserIdentity();
|
||||
if (!identity?.email) {
|
||||
return { sucesso: false };
|
||||
}
|
||||
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 };
|
||||
|
||||
const usuario = await ctx.db
|
||||
.query("usuarios")
|
||||
.withIndex("by_email", (q) => q.eq("email", identity.email!))
|
||||
.first();
|
||||
// Verificar se usuário pertence à conversa
|
||||
const conversa = await ctx.db.get(args.conversaId);
|
||||
if (!conversa || !conversa.participantes.includes(usuario._id)) {
|
||||
return { sucesso: false };
|
||||
}
|
||||
|
||||
if (!usuario) {
|
||||
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();
|
||||
|
||||
// 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 agora = Date.now();
|
||||
|
||||
const preferenciasExistentes = await ctx.db
|
||||
.query("preferenciasNotificacaoConversa")
|
||||
.withIndex("by_usuario_conversa", (q) =>
|
||||
q.eq("usuarioId", usuario._id).eq("conversaId", args.conversaId)
|
||||
)
|
||||
.first();
|
||||
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
|
||||
});
|
||||
}
|
||||
|
||||
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 };
|
||||
},
|
||||
return { sucesso: true };
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user