1- CREATE TABLE "user "(
2- " id" SERIAL NOT NULL ,
3- " nome" VARCHAR (255 ) NOT NULL ,
4- " email" VARCHAR (255 ) NOT NULL ,
5- " senha" VARCHAR (255 ) NOT NULL ,
6- " data_nascimento" DATE NOT NULL ,
7- " perfil" VARCHAR (255 ) NOT NULL ,
8- " criado_at" TIMESTAMP (0 ) WITH
9- TIME zone NOT NULL
1+ -- Usuários
2+ CREATE TABLE "user " (
3+ " id" SERIAL NOT NULL ,
4+ " nome" VARCHAR (255 ) NOT NULL ,
5+ " email" VARCHAR (255 ) NOT NULL ,
6+ " senha" VARCHAR (255 ) NOT NULL ,
7+ " data_nascimento" DATE NOT NULL ,
8+ " perfil" VARCHAR (255 ) NOT NULL ,
9+ " criado_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
10+ PRIMARY KEY (" id" ),
11+ CONSTRAINT " user_email_unique" UNIQUE (" email" )
1012);
11- ALTER TABLE
12- " user " ADD PRIMARY KEY ( " id " );
13- ALTER TABLE
14- " user " ADD CONSTRAINT " user_email_unique " UNIQUE( " email " );
15- CREATE TABLE " tool "(
16- " id " SERIAL NOT NULL ,
17- " nome " VARCHAR ( 255 ) NOT NULL ,
18- " descricao " TEXT NOT NULL ,
19- " url_oficial " TEXT NOT NULL ,
20- " linguagem " VARCHAR ( 255 ) NOT NULL ,
21- " status_ativo " BOOLEAN NOT NULL DEFAULT TRUE
13+
14+ -- Ferramentas
15+ CREATE TABLE " tool " (
16+ " id " SERIAL NOT NULL ,
17+ " nome " VARCHAR ( 255 ) NOT NULL ,
18+ " descricao " TEXT NOT NULL ,
19+ " url_oficial " TEXT NOT NULL ,
20+ " linguagem " VARCHAR ( 255 ) NOT NULL ,
21+ " status_ativo " BOOLEAN NOT NULL DEFAULT TRUE ,
22+ PRIMARY KEY ( " id " ) ,
23+ CONSTRAINT " tool_nome_unique " UNIQUE ( " nome " )
2224);
23- ALTER TABLE
24- " tool" ADD PRIMARY KEY (" id" );
25- ALTER TABLE
26- " tool" ADD CONSTRAINT " tool_nome_unique" UNIQUE(" nome" );
27- COMMENT
28- ON COLUMN
29- " tool" ." status_ativo" IS ' Por padrão, toda ferramenta nova cadastrada entra como ativa.' ;
30- CREATE TABLE "favorite "(
31- " usuario_id" INTEGER NOT NULL ,
32- " ferramenta_id" INTEGER NOT NULL ,
33- " adicionado_at" TIMESTAMP (0 ) WITH
34- TIME zone NOT NULL
25+
26+ COMMENT ON COLUMN "tool"."status_ativo" IS ' Por padrão, toda ferramenta nova cadastrada entra como ativa.' ;
27+
28+ -- Favoritos (PK composta corrigida — original tinha dois ADD PRIMARY KEY separados, o que é inválido)
29+ CREATE TABLE "favorite " (
30+ " usuario_id" INTEGER NOT NULL ,
31+ " ferramenta_id" INTEGER NOT NULL ,
32+ " adicionado_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
33+ PRIMARY KEY (" usuario_id" , " ferramenta_id" )
3534);
36- CREATE INDEX "favorite_usuario_id_index " ON
37- " favorite" (" usuario_id" );
38- CREATE INDEX "favorite_ferramenta_id_index " ON
39- " favorite" (" ferramenta_id" );
40- CREATE INDEX "favorite_adicionado_at_index " ON
41- " favorite" (" adicionado_at" );
42- CREATE INDEX "favorite_usuario_id_ferramenta_id_adicionado_at_index " ON
43- " favorite" (
44- " usuario_id" ,
45- " ferramenta_id" ,
46- " adicionado_at"
47- );
48- ALTER TABLE
49- " favorite" ADD PRIMARY KEY (" usuario_id" );
50- ALTER TABLE
51- " favorite" ADD PRIMARY KEY (" ferramenta_id" );
52- CREATE TABLE "private_link "(
53- " id" SERIAL NOT NULL ,
54- " usuario_id" INTEGER NOT NULL ,
55- " titulo" VARCHAR (255 ) NOT NULL ,
56- " url" TEXT NOT NULL
35+
36+ CREATE INDEX "favorite_usuario_id_idx " ON " favorite" (" usuario_id" );
37+ CREATE INDEX "favorite_ferramenta_id_idx " ON " favorite" (" ferramenta_id" );
38+ CREATE INDEX "favorite_adicionado_at_idx " ON " favorite" (" adicionado_at" );
39+
40+ -- Links Privados (FK corrigida — original apontava "id" para "user"."id", o correto é "usuario_id")
41+ CREATE TABLE "private_link " (
42+ " id" SERIAL NOT NULL ,
43+ " usuario_id" INTEGER NOT NULL ,
44+ " titulo" VARCHAR (255 ) NOT NULL ,
45+ " url" TEXT NOT NULL ,
46+ PRIMARY KEY (" id" )
5747);
58- CREATE INDEX " private_link_usuario_id_index " ON
59- " private_link" (" usuario_id" );
60- ALTER TABLE
61- " private_link " ADD PRIMARY KEY ( " id " );
62- CREATE TABLE "support_ticket "(
63- " id" SERIAL NOT NULL ,
64- " usuario_id" INTEGER NOT NULL ,
65- " email_contato" VARCHAR (255 ) NOT NULL ,
66- " mensagem" TEXT NOT NULL ,
67- " secao_site" VARCHAR (255 ) NOT NULL ,
68- " status" VARCHAR (255 ) NOT NULL DEFAULT ' Pendente' ,
69- " criado_at" TIMESTAMP ( 0 ) WITH
70- TIME zone NOT NULL DEFAULT CURRENT_TIMESTAMP
48+
49+ CREATE INDEX " private_link_usuario_id_idx " ON " private_link" (" usuario_id" );
50+
51+ -- Chamados de Suporte
52+ CREATE TABLE "support_ticket " (
53+ " id" SERIAL NOT NULL ,
54+ " usuario_id" INTEGER NOT NULL ,
55+ " email_contato" VARCHAR (255 ) NOT NULL ,
56+ " mensagem" TEXT NOT NULL ,
57+ " secao_site" VARCHAR (255 ) NOT NULL ,
58+ " status" VARCHAR (255 ) NOT NULL DEFAULT ' Pendente' ,
59+ " criado_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
60+ PRIMARY KEY ( " id " )
7161);
72- CREATE INDEX "support_ticket_usuario_id_index " ON
73- " support_ticket" (" usuario_id" );
74- ALTER TABLE
75- " support_ticket" ADD PRIMARY KEY (" id" );
76- COMMENT
77- ON COLUMN
78- " support_ticket" ." status" IS ' Todo ticket novo aparecerá automaticamente como "Pendente".' ;
79- COMMENT
80- ON COLUMN
81- " support_ticket" ." criado_at" IS ' O banco registra a data/hora exata do momento em que o registro foi criado.' ;
82- ALTER TABLE
83- " support_ticket" ADD CONSTRAINT " support_ticket_usuario_id_foreign" FOREIGN KEY (" usuario_id" ) REFERENCES " user" (" id" );
84- ALTER TABLE
85- " favorite" ADD CONSTRAINT " favorite_ferramenta_id_foreign" FOREIGN KEY (" ferramenta_id" ) REFERENCES " tool" (" id" );
86- ALTER TABLE
87- " favorite" ADD CONSTRAINT " favorite_usuario_id_foreign" FOREIGN KEY (" usuario_id" ) REFERENCES " user" (" id" );
88- ALTER TABLE
89- " private_link" ADD CONSTRAINT " private_link_id_foreign" FOREIGN KEY (" id" ) REFERENCES " user" (" id" );
62+
63+ CREATE INDEX "support_ticket_status_idx " ON " support_ticket" (" status" );
64+ CREATE INDEX "support_ticket_usuario_id_idx " ON " support_ticket" (" usuario_id" );
65+
66+ COMMENT ON COLUMN "support_ticket"."status" IS ' Todo ticket novo aparecerá automaticamente como "Pendente".' ;
67+ COMMENT ON COLUMN "support_ticket"."criado_at" IS ' O banco registra a data/hora exata do momento em que o registro foi criado.' ;
68+
69+ -- Foreign Keys
70+ ALTER TABLE " favorite" ADD CONSTRAINT " favorite_usuario_id_fk" FOREIGN KEY (" usuario_id" ) REFERENCES " user" (" id" );
71+ ALTER TABLE " favorite" ADD CONSTRAINT " favorite_ferramenta_id_fk" FOREIGN KEY (" ferramenta_id" ) REFERENCES " tool" (" id" );
72+ ALTER TABLE " private_link" ADD CONSTRAINT " private_link_usuario_id_fk" FOREIGN KEY (" usuario_id" ) REFERENCES " user" (" id" );
73+ ALTER TABLE " support_ticket" ADD CONSTRAINT " support_ticket_usuario_id_fk" FOREIGN KEY (" usuario_id" ) REFERENCES " user" (" id" );
0 commit comments