diff --git a/create_messages_table.sql b/create_messages_table.sql
new file mode 100644
index 0000000..65b2697
--- /dev/null
+++ b/create_messages_table.sql
@@ -0,0 +1,17 @@
+-- Criar tabela de mensagens no schema gpi
+CREATE TABLE IF NOT EXISTS gpi.messages (
+ id uuid DEFAULT uuid_generate_v4() PRIMARY KEY,
+ organization_id uuid REFERENCES gpi.organizations(id) ON DELETE CASCADE,
+ from_user_id uuid REFERENCES gpi.users(id) ON DELETE SET NULL,
+ to_user_id uuid REFERENCES gpi.users(id) ON DELETE SET NULL,
+ message text NOT NULL,
+ is_read boolean DEFAULT false,
+ read_at timestamp with time zone,
+ is_archived boolean DEFAULT false,
+ is_deleted_by_recipient boolean DEFAULT false,
+ created_at timestamp with time zone DEFAULT now(),
+ updated_at timestamp with time zone DEFAULT now()
+);
+
+-- Permissões para as roles do Supabase
+GRANT ALL ON gpi.messages TO postgres, anon, authenticated, service_role;
diff --git a/src/client/components/TeamPresence.tsx b/src/client/components/TeamPresence.tsx
index 0044a5c..69d9d6a 100644
--- a/src/client/components/TeamPresence.tsx
+++ b/src/client/components/TeamPresence.tsx
@@ -72,7 +72,7 @@ export const TeamPresence: React.FC = () => {
// Create a map of pending messages by recipient ID
const pendingMessagesByRecipient = new Map(
- pendingMessages.map(msg => [msg.toUser?.email, msg])
+ (pendingMessages || []).map(msg => [msg.toUser?.email, msg])
);
const handleMemberClick = (member: OrganizationMember) => {
@@ -102,11 +102,11 @@ export const TeamPresence: React.FC = () => {
- Equipe ({activeUsers.length}/{allMembers.length} online)
+ Equipe ({(activeUsers || []).length}/{(allMembers || []).length} online)
- {allMembers.map((member) => {
+ {(allMembers || []).map((member) => {
const isOnline = activeUserLogtoIds.has(member.logto_id);
const isCurrentUser = member.logto_id === appUser?.logtoId;
const hasPendingMessage = pendingMessagesByRecipient.has(member.email);
diff --git a/src/client/context/AuthContext.tsx b/src/client/context/AuthContext.tsx
index 8dca2d0..f409f00 100644
--- a/src/client/context/AuthContext.tsx
+++ b/src/client/context/AuthContext.tsx
@@ -9,7 +9,7 @@ interface AuthProviderProps {
}
const defaultUser: AppUser = {
- id: 'guest-user',
+ id: '00000000-0000-0000-0000-000000000000',
email: 'guest@gpi.app',
name: 'Guest User',
role: 'user',
@@ -18,7 +18,7 @@ const defaultUser: AppUser = {
updatedAt: new Date().toISOString()
};
-const DEFAULT_ORGANIZATION_ID = 'default-org';
+const DEFAULT_ORGANIZATION_ID = '00000000-0000-0000-0000-000000000001';
const DEFAULT_ORGANIZATION_NAME = 'Organização Padrão';
export const AuthProvider: React.FC
= ({ children }) => {
diff --git a/src/client/contexts/NotificationContext.tsx b/src/client/contexts/NotificationContext.tsx
index b2fcd1a..51fcc23 100644
--- a/src/client/contexts/NotificationContext.tsx
+++ b/src/client/contexts/NotificationContext.tsx
@@ -83,7 +83,7 @@ export const NotificationProvider: React.FC<{ children: React.ReactNode }> = ({
}
}, [isSignedIn, fetchNotifications]);
- const unreadCount = notifications.filter(n => !n.isRead).length;
+ const unreadCount = (notifications || []).filter(n => !n.isRead).length;
return (
{
try {
if (!req.appUser) {
return res.json({
- id: 'guest-user',
+ id: '00000000-0000-0000-0000-000000000000',
email: 'guest@gpi.app',
name: 'Guest User',
role: 'user'
diff --git a/src/server/middleware/authMiddleware.ts b/src/server/middleware/authMiddleware.ts
index fec4164..75600b0 100644
--- a/src/server/middleware/authMiddleware.ts
+++ b/src/server/middleware/authMiddleware.ts
@@ -18,12 +18,12 @@ declare module 'express-serve-static-core' {
export const extractUser = async (req: Request, res: Response, next: NextFunction) => {
req.appUser = {
- id: 'guest-user',
+ id: '00000000-0000-0000-0000-000000000000',
logtoId: 'guest',
email: 'guest@gpi.app',
name: 'Guest User',
role: 'user',
- organizationId: req.headers['x-organization-id'] as string || 'default-org',
+ organizationId: req.headers['x-organization-id'] as string || '00000000-0000-0000-0000-000000000001',
organizationRole: 'user'
};
next();