-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase-setup.sql
More file actions
132 lines (107 loc) · 4.52 KB
/
database-setup.sql
File metadata and controls
132 lines (107 loc) · 4.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
-- Script para criar banco de dados FamilyChat no PostgreSQL
-- Execute este script como usuário postgres no psql
-- =================================================================
-- CONFIGURAÇÕES DE AMBIENTE
-- =================================================================
-- Ambiente de Desenvolvimento Local
-- POSTGRESDB_HOST: 192.168.68.113
-- POSTGRESDB_PORT: 5432
-- REDIS_HOST: 192.168.68.113
-- REDIS_PORT: 6379
-- Ambiente Docker/Container
-- POSTGRESDB_HOST: host.docker.internal
-- POSTGRESDB_PORT: 5432
-- REDIS_HOST: host.docker.internal
-- REDIS_PORT: 6379
-- =================================================================
-- POSTGRESQL SETUP
-- =================================================================
-- 1. Criar o banco de dados
CREATE DATABASE FamilyChat_db
WITH
OWNER = postgres
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.utf8'
LC_CTYPE = 'en_US.utf8'
TABLESPACE = pg_default
CONNECTION LIMIT = -1;
-- 2. Criar usuário para a aplicação (opcional, se não usar o postgres)
CREATE USER FamilyChat_user WITH PASSWORD 'FamilyChat_password';
-- 3. Conceder permissões ao usuário
GRANT ALL PRIVILEGES ON DATABASE FamilyChat_db TO FamilyChat_user;
-- 4. Conceder permissões no schema public
\c FamilyChat;
GRANT ALL ON SCHEMA public TO FamilyChat_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO FamilyChat_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO FamilyChat_user;
-- 5. Habilitar extensões necessárias
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- 6. Criar índices otimizados para performance
-- Estes índices serão criados pela aplicação, mas podemos criar aqui para garantir
CREATE INDEX IF NOT EXISTS idx_chat_messages_group_created
ON "ChatMessages"("ChatGroupId", "CreatedAt" DESC);
CREATE INDEX IF NOT EXISTS idx_chat_groups_creator
ON "ChatGroups"("CreatorId");
CREATE INDEX IF NOT EXISTS idx_chat_group_members_user
ON "ChatGroupMembers"("UserId");
CREATE INDEX IF NOT EXISTS idx_chat_group_members_group
ON "ChatGroupMembers"("ChatGroupId");
-- 7. Criar funções para otimização de consultas
CREATE OR REPLACE FUNCTION update_chat_group_member_count()
RETURNS TRIGGER AS $$
BEGIN
UPDATE "ChatGroups"
SET "CurrentParticipantsCount" = (
SELECT COUNT(*) FROM "ChatGroupMembers"
WHERE "ChatGroupId" = NEW."ChatGroupId" AND "IsActive" = true
)
WHERE "Id" = NEW."ChatGroupId";
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- 8. Criar triggers para manter contadores atualizados
CREATE TRIGGER trigger_update_chat_group_member_count
AFTER INSERT OR DELETE OR UPDATE ON "ChatGroupMembers"
FOR EACH ROW EXECUTE FUNCTION update_chat_group_member_count();
-- 9. Mostrar informações do banco de dados
\l FamilyChat;
-- =================================================================
-- REDIS CONFIGURAÇÃO (separada - execute no Redis CLI)
-- =================================================================
-- Comandos para configurar Redis (execute no redis-cli):
-- redis-cli -h 192.168.68.113 -p 6379
-- Configurações recomendadas para desenvolvimento:
-- CONFIG SET maxmemory 256mb
-- CONFIG SET maxmemory-policy allkeys-lru
-- CONFIG SET save 900 1
-- CONFIG SET save 300 10
-- CONFIG SET save 60 10000
-- Para testar conexão:
-- PING
-- SET test_key "Hello Redis!"
-- GET test_key
-- =================================================================
-- NOTAS IMPORTANTES
-- =================================================================
-- PostgreSQL:
-- - A aplicação irá criar automaticamente as tabelas quando iniciar (Code-First)
-- - Os dados iniciais (seed) serão inseridos automaticamente
-- - Para desenvolvimento local: use postgres/192.168.68.113:5432
-- - Para Docker: use host.docker.internal:5432
-- - Em produção, crie usuário dedicado com senha forte
-- Redis:
-- - Usado para cache de sessões, mensagens e estado de chamadas
-- - Porta padrão: 6379
-- - Para desenvolvimento local: 192.168.68.113:6379
-- - Para Docker: host.docker.internal:6379
-- - Configure maxmemory-policy para evitar estouro de memória
-- Performance:
-- - Índices compostos em ChatGroupId + CreatedAt para paginação eficiente
-- - Cache Redis para dados frequentemente acessados (grupos, usuários online)
-- - Connection pooling configurado no application settings
-- - Soft delete implementado para histórico de mensagens
-- Segurança:
-- - Use SSL/TLS em produção
-- - Configure firewall para permitir apenas IPs necessários
-- - Use senhas fortes para usuários de banco
-- - Configure Redis com autenticação (requirepass)