diff --git a/prisma/schema.prisma b/prisma/schema.prisma index b0fd008..9fe293c 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -462,11 +462,11 @@ model NotificationPreferences { // Preferências por tipo de notificação (JSON) // Ex: { "ticket_created": true, "ticket_resolved": true, "comment_public": false } - typePreferences Json @default("{}") + typePreferences String @default("{}") // Preferências por categoria de ticket (JSON) // Ex: { "category_id_1": true, "category_id_2": false } - categoryPreferences Json @default("{}") + categoryPreferences String @default("{}") createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/src/app/api/notifications/preferences/route.ts b/src/app/api/notifications/preferences/route.ts index 3b3def9..fa5046c 100644 --- a/src/app/api/notifications/preferences/route.ts +++ b/src/app/api/notifications/preferences/route.ts @@ -80,10 +80,17 @@ export async function GET(_request: NextRequest) { ? Object.keys(NOTIFICATION_TYPES) : COLLABORATOR_VISIBLE_TYPES + // Parse JSON strings + const typePrefs: Record = prefs!.typePreferences + ? JSON.parse(prefs!.typePreferences as string) + : {} + const catPrefs = prefs!.categoryPreferences + ? JSON.parse(prefs!.categoryPreferences as string) + : {} + // Monta resposta com configuração de cada tipo const typeConfigs = availableTypes.map((type) => { const config = NOTIFICATION_TYPES[type as NotificationType] - const typePrefs = prefs!.typePreferences as Record const enabled = typePrefs[type] ?? config.defaultEnabled return { @@ -104,7 +111,7 @@ export async function GET(_request: NextRequest) { timezone: prefs.timezone, digestFrequency: prefs.digestFrequency, types: typeConfigs, - categoryPreferences: prefs.categoryPreferences, + categoryPreferences: catPrefs, isStaff, }) } catch (error) { @@ -194,11 +201,19 @@ export async function PUT(request: NextRequest) { quietHoursEnd: quietHoursEnd ?? null, timezone: timezone ?? "America/Sao_Paulo", digestFrequency: digestFrequency ?? "immediate", - typePreferences: validatedTypePrefs, - categoryPreferences: categoryPreferences ?? {}, + typePreferences: JSON.stringify(validatedTypePrefs), + categoryPreferences: JSON.stringify(categoryPreferences ?? {}), }, }) } else { + // Parse existing JSON strings + const existingTypePrefs = existingPrefs.typePreferences + ? JSON.parse(existingPrefs.typePreferences as string) + : {} + const existingCatPrefs = existingPrefs.categoryPreferences + ? JSON.parse(existingPrefs.categoryPreferences as string) + : {} + // Atualiza preferências existentes await prisma.notificationPreferences.update({ where: { userId }, @@ -208,11 +223,11 @@ export async function PUT(request: NextRequest) { quietHoursEnd: quietHoursEnd !== undefined ? quietHoursEnd : existingPrefs.quietHoursEnd, timezone: timezone ?? existingPrefs.timezone, digestFrequency: digestFrequency ?? existingPrefs.digestFrequency, - typePreferences: { - ...(existingPrefs.typePreferences as Record), + typePreferences: JSON.stringify({ + ...existingTypePrefs, ...validatedTypePrefs, - }, - categoryPreferences: categoryPreferences ?? existingPrefs.categoryPreferences, + }), + categoryPreferences: JSON.stringify(categoryPreferences ?? existingCatPrefs), }, }) } diff --git a/src/app/portal/profile/notifications/page.tsx b/src/app/portal/profile/notifications/page.tsx index f88d231..827afba 100644 --- a/src/app/portal/profile/notifications/page.tsx +++ b/src/app/portal/profile/notifications/page.tsx @@ -5,8 +5,8 @@ import { NotificationPreferencesForm } from "@/components/settings/notification- import { requireAuthenticatedSession } from "@/lib/auth-server" export const metadata: Metadata = { - title: "Preferencias de notificacao", - description: "Configure quais notificacoes por e-mail deseja receber.", + title: "Preferências de notificação", + description: "Configure quais notificações por e-mail deseja receber.", } export default async function PortalNotificationSettingsPage() { @@ -14,7 +14,7 @@ export default async function PortalNotificationSettingsPage() { const role = (session.user.role ?? "").toLowerCase() const persona = (session.user.machinePersona ?? "").toLowerCase() - // Colaboradores e maquinas com persona de colaborador podem acessar + // Colaboradores e máquinas com persona de colaborador podem acessar const allowedRoles = new Set(["collaborator", "manager", "admin", "agent"]) const isMachinePersonaAllowed = role === "machine" && (persona === "collaborator" || persona === "manager") const allowed = allowedRoles.has(role) || isMachinePersonaAllowed @@ -23,7 +23,7 @@ export default async function PortalNotificationSettingsPage() { redirect("/portal") } - // Staff deve usar a pagina de configuracoes completa + // Staff deve usar a página de configurações completa const staffRoles = new Set(["admin", "manager", "agent"]) if (staffRoles.has(role)) { redirect("/settings/notifications") @@ -32,9 +32,9 @@ export default async function PortalNotificationSettingsPage() { return (
-

Preferencias de notificacao

+

Preferências de notificação

- Configure quais notificacoes por e-mail deseja receber sobre seus chamados. + Configure quais notificações por e-mail deseja receber sobre seus chamados.

diff --git a/src/app/rate/[token]/page.tsx b/src/app/rate/[token]/page.tsx index 3d94192..67f500c 100644 --- a/src/app/rate/[token]/page.tsx +++ b/src/app/rate/[token]/page.tsx @@ -28,7 +28,7 @@ export default function RatePage() { const [comment, setComment] = useState("") const [error, setError] = useState(null) - // Se ja avaliou, mostra mensagem + // Se já avaliou, mostra mensagem if (alreadyRated && existingRating) { return (
@@ -37,9 +37,9 @@ export default function RatePage() {
- Chamado ja avaliado + Chamado já avaliado - Voce ja avaliou este chamado anteriormente. + Você já avaliou este chamado anteriormente. @@ -54,7 +54,7 @@ export default function RatePage() { ))}

- Sua avaliacao: {existingRating} estrela{existingRating > 1 ? "s" : ""} + Sua avaliação: {existingRating} estrela{existingRating > 1 ? "s" : ""}

@@ -62,7 +62,7 @@ export default function RatePage() { ) } - // Se acabou de avaliar, mostra formulario para comentario + // Se acabou de avaliar, mostra formulário para comentário if (submitted && rating > 0) { return (
@@ -71,9 +71,9 @@ export default function RatePage() {
- Obrigado pela avaliacao! + Obrigado pela avaliação! - Sua opiniao e muito importante para nos. + Sua opinião é muito importante para nós. @@ -89,10 +89,10 @@ export default function RatePage() {
- +