This repository was archived by the owner on Apr 22, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbytedb_schema.sql
713 lines (642 loc) · 24.3 KB
/
bytedb_schema.sql
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
-- aviso: banco feito para MySQL, não compatível com MariaDB ou SQL Server!
-- copie e cole no PHPMyAdmin e rode o código
CREATE DATABASE IF NOT EXISTS bd_Byte;
USE bd_Byte;
-- mudei "password" pra "password_" com underline já que "password" é palavra reservada
-- adicionei o "isAdmin" pra diferenciar se o usuário é ou não administrador
CREATE TABLE IF NOT EXISTS tb_user (
idUser INT UNSIGNED not null AUTO_INCREMENT,
userName varchar(300) NOT NULL,
email varchar(300) NOT NULL,
password_ varchar(300) NOT NULL,
userPhoto varchar(300),
profileImg varchar(300),
vocation varchar(300),
bio varchar (300),
isAdmin boolean,
PRIMARY KEY (idUser)
);
CREATE TABLE IF NOT EXISTS post (
id_post INT UNSIGNED NOT NULL AUTO_INCREMENT,
postTitle varchar(300) NOT NULL,
postText varchar(3000) NOT NULL,
postPhoto varchar(300) NOT NULL,
postDescription varchar(512) NOT NULL,
postCode varchar(3000) NOT NULL,
fk_idUser INT UNSIGNED not null,
FOREIGN KEY (fk_idUser) REFERENCES tb_user(idUser),
PRIMARY KEY (id_post)
);
-- essa tabela irá ser as tecnologias que cada post terá, só que em forma de tags, primeiro a tabela de tag representará um id (obrigatório pra todas as tabelas) e depois um post_tag que relaciona os posts com mais de uma tag, assim um post tendo mais de uma tag.
CREATE TABLE IF NOT EXISTS tag (
id_tag INT UNSIGNED NOT NULL AUTO_INCREMENT,
tagName varchar (50),
-- cada tag terá um nome, por exemplo "Java", "JavaScript", "Python" e etc, cada uma dessas pode ser adicionada ao sistema por um insert, obviamente cada tag terá um id numérico pra representar
PRIMARY KEY (id_tag)
);
-- relação entre post e tag
CREATE TABLE IF NOT EXISTS post_tag (
id_post_tag INT UNSIGNED NOT NULL AUTO_INCREMENT,
fk_tagName INT UNSIGNED NOT NULL,
fk_id_post INT UNSIGNED NOT NULL,
PRIMARY KEY (id_post_tag),
FOREIGN KEY (fk_tagName) REFERENCES tag(id_tag),
FOREIGN KEY (fk_id_post) REFERENCES post(id_post)
);
-- modificações que fiz na tabela likes:
-- primeiro, eu adicionei o id do usuário que deu o like para a contabilização ser feita como chave estrangeira
-- segundo, eu coloquei o id do post como chave estrangeira
-- terceiro, eu removi o quantLikeComent pois a contabilização é calculada pelo select usando COUNT
CREATE TABLE IF NOT EXISTS likes (
idLike INT UNSIGNED NOT NULL AUTO_INCREMENT,
fk_likePost INT UNSIGNED NOT NULL,
fk_idUser INT UNSIGNED NOT NULL,
-- quantLikeComent INT UNSIGNED NOT NULL, -- esse campo foi removido pois a quantidade de like irá ser calculada no próprio SELECT DO SQL com o COUNT ou semelhante.
PRIMARY KEY (idLike),
FOREIGN KEY (fk_likePost) REFERENCES post(id_post),
FOREIGN KEY (fk_idUser) REFERENCES tb_user(idUser)
);
-- modificações que fiz na tabela comentários:
-- eu coloquei o foreign key de post e usuário, pois cada comentário é feito por um usuário direcionado à um post
CREATE TABLE IF NOT EXISTS comentarios (
id_comentario INT UNSIGNED NOT NULL AUTO_INCREMENT,
fk_idUser INT UNSIGNED NOT NULL,
fk_id_post INT UNSIGNED NOT NULL,
textComent varchar(3000) NOT NULL,
imageComent varchar(300) NOT NULL,
codeComent varchar(3000) NOT NULL,
PRIMARY KEY (id_comentario),
FOREIGN KEY (fk_id_post) REFERENCES post(id_post),
FOREIGN KEY (fk_idUser) REFERENCES tb_user(idUser)
);
-- STORED PROCEDURES para as ações do backend:
-- (os underlines a mais são pra diferenciar o nome das colunas das variáveis dos procedures)
-- criação de usuário
DELIMITER @@
CREATE PROCEDURE sp_CriarUsuario(
IN username VARCHAR(300),
IN email_ VARCHAR(300),
IN password__ VARCHAR(300)
)
BEGIN
INSERT INTO tb_user (userName, email, password_)
VALUES (username, email_, password__);
END @@
DELIMITER ;
-- exemplo
-- CALL sp_CriarUsuario('João', '[email protected]', '12345678');
-- adicionar/mudar foto de PERFIL de usuário já existente:
DELIMITER @@
CREATE PROCEDURE sp_mudarFotoPerfil(
IN id INT UNSIGNED,
IN foto_perfil VARCHAR(300)
)
BEGIN
UPDATE tb_user
SET profileImg = foto_perfil
WHERE idUser = id;
END @@
DELIMITER ;
-- adicionar foto de usuário já existente:
DELIMITER @@
CREATE PROCEDURE sp_mudarFotoUsuario(
IN id INT UNSIGNED,
IN userPhoto_ VARCHAR(300)
)
BEGIN
UPDATE tb_user
SET userPhoto = userPhoto_
WHERE idUser = id;
END @@
DELIMITER ;
-- adicionar bio de usuário já existente:
DELIMITER @@
CREATE PROCEDURE sp_mudarBio(
IN id INT UNSIGNED,
IN bio_ VARCHAR(300)
)
BEGIN
UPDATE tb_user
SET bio = bio_
WHERE idUser = id;
END @@
DELIMITER ;
-- criar posts:
DELIMITER @@
CREATE PROCEDURE sp_adicionarPost(
IN title VARCHAR(300),
IN text_ VARCHAR(3000),
IN photo VARCHAR(300),
IN description_ VARCHAR(500),
IN code VARCHAR(3000),
IN idUser INT UNSIGNED
)
BEGIN
INSERT INTO post (postTitle, postText, postPhoto, postDescription, postCode, fk_idUser)
VALUES (title, text_, photo, description_, code, idUser);
END @@
DELIMITER ;
-- adicionar tags aos posts:
DELIMITER @@
CREATE PROCEDURE sp_adicionarTagsPost(
IN idPost INT UNSIGNED,
IN idTag INT UNSIGNED
)
BEGIN
INSERT INTO post_tag (fk_post_tag, fk_tagName)
VALUES (idPost, idTag);
END @@
DELIMITER ;
-- adicionar as tags na tabela de tags:
DELIMITER @@
CREATE PROCEDURE sp_adicionarTags(
IN tag_name varchar (50)
)
BEGIN
INSERT INTO tag (tagName)
VALUES (tag_name);
END @@
DELIMITER ;
-- dar like nos posts:
DELIMITER @@
CREATE PROCEDURE sp_darLike(
IN idPost INT UNSIGNED,
IN idUser INT UNSIGNED
)
BEGIN
INSERT INTO likes (fk_likePost, fk_idUser)
VALUES (idPost, idUser);
END @@
DELIMITER ;
-- remover o like dos posts:
DELIMITER @@
CREATE PROCEDURE sp_removerLike(
IN idPost INT UNSIGNED,
IN idUser INT UNSIGNED
)
BEGIN
DELETE FROM likes
WHERE fk_likePost = idPost AND fk_idUser = idUser;
END @@
DELIMITER ;
-- remover post (função para o usuário remover seu próprio post):
DELIMITER @@
CREATE PROCEDURE sp_removerPostUser(
IN idPost INT UNSIGNED,
IN idUser INT UNSIGNED
)
BEGIN
DELETE FROM post
WHERE id_post = idPost AND fk_idUser = idUser;
END @@
DELIMITER ;
-- remover post (funçao pra admin que pode remover qualquer post):
DELIMITER @@
CREATE PROCEDURE sp_removerPostAdmin(
IN idPost INT UNSIGNED,
IN idAdmin INT UNSIGNED
)
BEGIN
-- remove APENAS SE isAdmin foi verdadeiro:
IF (SELECT isAdmin FROM tb_user WHERE idUser = idAdmin) = TRUE THEN
DELETE FROM post
WHERE id_post = idPost;
END IF;
END @@
DELIMITER ;
-- remover comentário (função para o usuário remover seu próprio comentário):
DELIMITER @@
CREATE PROCEDURE sp_removerComentarioUser(
IN idComentario INT UNSIGNED,
IN idUser INT UNSIGNED
)
BEGIN
DELETE FROM comentarios
WHERE id_comentario = idComentario AND fk_idUser = idUser;
END @@
DELIMITER ;
-- remover comentário (funçao pra admin que pode remover qualquer comentário):
DELIMITER @@
CREATE PROCEDURE sp_removerComentarioAdmin(
IN idComentario INT UNSIGNED,
IN idUser INT UNSIGNED
)
BEGIN
-- remove APENAS SE isAdmin foi verdadeiro:
IF (SELECT isAdmin FROM tb_user WHERE idUser = idUser) = TRUE THEN
DELETE FROM comentarios
WHERE id_comentario = idComentario;
END IF;
END @@
DELIMITER ;
-- editar post:
DELIMITER @@
CREATE PROCEDURE sp_editarPost(
IN idPost INT UNSIGNED,
IN title VARCHAR(300),
IN text_ VARCHAR(300),
IN photo VARCHAR(300),
IN description_ VARCHAR(300),
IN code VARCHAR(300),
IN idUser INT UNSIGNED
)
BEGIN
UPDATE post
SET postTitle = title, postText = text_, postPhoto = photo, postDescription = description_, postCode = code
WHERE id_post = idPost AND fk_idUser = idUser;
END @@
DELIMITER ;
-- editar comentário:
DELIMITER @@
CREATE PROCEDURE sp_editarComentario(
IN idComentario INT UNSIGNED,
IN text_ VARCHAR(300),
IN photo VARCHAR(300),
IN code VARCHAR(300),
IN idUser INT UNSIGNED
)
BEGIN
UPDATE comentarios
SET textComent = text_, imageComent = photo, codeComent = code
WHERE id_comentario = idComentario AND fk_idUser = idUser;
END @@
DELIMITER ;
-- mostrar numeros de likes de post:
DELIMITER @@
CREATE PROCEDURE sp_mostrarLikesPost(
IN idPost INT UNSIGNED
)
BEGIN
SELECT COUNT(*) AS quantLikes
FROM likes
WHERE fk_likePost = idPost;
END @@
DELIMITER ;
-- listar posts COM TAGS de acordo com pesquisa de titulo, descrição ou código:
DELIMITER @@
CREATE PROCEDURE sp_listarPostsPorPesquisa(
IN pesquisa VARCHAR(300)
)
BEGIN
SELECT * FROM post
WHERE postTitle LIKE CONCAT('%', pesquisa, '%') OR postDescription LIKE CONCAT('%', pesquisa, '%') OR postCode LIKE CONCAT('%', pesquisa, '%')
ORDER BY id_post;
END @@
DELIMITER ;
-- listar posts com varias tags e retornar as tags em uma unica coluna com JSON:
-- além disso também será retornado o usuário com id, nome e foto
-- e os primeiros 100 digitos do post
-- IMPORTANTE: essa parte eu fiz com IA porque ficou muito complexo pra mim
-- exemplo de uso:
-- CALL ListarPostsPorTagsConcat("'Python','JavaScript'");
DELIMITER @@
CREATE PROCEDURE sp_ListarPostsPorTags(IN tags VARCHAR(255))
BEGIN
DECLARE sql_query TEXT;
SET sql_query = 'SELECT
p.postTitle AS titulo,
SUBSTRING(p.postText, 1, 100) AS resumo,
u.userName AS nome_usuario,
u.idUser AS id_usuario,
u.userPhoto AS foto_usuario,
p.postPhoto AS foto_post,
JSON_ARRAYAGG(t.tagName) AS tags
FROM post p
JOIN tb_user u ON p.fk_idUser = u.idUser
JOIN post_tag pt ON p.id_post = pt.fk_id_post
JOIN tag t ON pt.fk_tagName = t.id_tag
WHERE t.tagName IN (';
SET sql_query = CONCAT(sql_query, tags, ') GROUP BY p.id_post');
PREPARE stmt FROM sql_query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END @@
DELIMITER ;
-- listar post com tags, porém considerando o conteudo textual delas:
-- IMPORTANTE: essa parte eu fiz com IA porque ficou muito complexo pra mim
-- exemplo de uso:
-- CALL ListarPostsPorTagsOuConteudoConcat("'Python','JavaScript'", "programação");
DELIMITER @@
CREATE PROCEDURE sp_ListarPostsPorTagsEConteudo(
IN tags VARCHAR(255),
IN searchTerm VARCHAR(255)
)
BEGIN
DECLARE sql_query TEXT;
SET sql_query = 'SELECT
p.postTitle AS titulo,
SUBSTRING(p.postText, 1, 100) AS resumo,
u.userName AS nome_usuario,
u.idUser AS id_usuario,
u.userPhoto AS foto_usuario,
p.postPhoto AS foto_post,
JSON_ARRAYAGG(t.tagName) AS tags
FROM post p
JOIN tb_user u ON p.fk_idUser = u.idUser
JOIN post_tag pt ON p.id_post = pt.fk_id_post
JOIN tag t ON pt.fk_tagName = t.id_tag
WHERE (t.tagName IN (';
SET sql_query = CONCAT(sql_query, tags, ') OR (p.postTitle LIKE ''%', searchTerm, '%'' OR p.postText LIKE ''%', searchTerm, '%'')) GROUP BY p.id_post');
PREPARE stmt FROM sql_query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END @@
DELIMITER ;
-- listar usuários:
DELIMITER @@
CREATE PROCEDURE sp_listarUsuarios()
BEGIN
SELECT * FROM tb_user ORDER BY idUser;
END @@
DELIMITER ;
-- listar usuários porém com um numero X de limite de usuários a serem listados:
DELIMITER @@
CREATE PROCEDURE sp_listarUsuariosLimit(IN limit_ INT UNSIGNED)
BEGIN
SELECT * FROM tb_user ORDER BY idUser LIMIT limit_;
END @@
DELIMITER ;
-- listar usuários conforme o username deles:
DELIMITER @@
CREATE PROCEDURE sp_listarUsuariosPorNome(IN nome VARCHAR(300))
BEGIN
SELECT * FROM tb_user WHERE userName LIKE CONCAT(nome, '%');
END @@
DELIMITER ;
-- remover usuário, seus posts, seus comentários e seus likes (apenas admins podem):
DELIMITER @@
CREATE PROCEDURE sp_removerUsuario(
IN idUserRemover INT UNSIGNED,
IN idUserAdmin INT UNSIGNED
)
BEGIN
IF (SELECT isAdmin FROM tb_user WHERE idUser = idUserAdmin) = TRUE THEN
-- deletar os likes:
DELETE FROM likes
WHERE fk_idUser = idUserRemover;
-- deletar os posts
DELETE FROM post
WHERE fk_idUser = idUserRemover;
-- deletar os comentários:
DELETE FROM comentarios
WHERE fk_idUser = idUserRemover;
-- por fim deletar o usuário
DELETE FROM tb_user
WHERE idUser = idUserRemover;
END IF;
END @@
DELIMITER ;
-- remover permissão de admin de usuário:
DELIMITER @@
CREATE PROCEDURE sp_removerPermissaoAdmin(
IN idUser INT UNSIGNED
)
BEGIN
UPDATE tb_user
SET isAdmin = FALSE
WHERE idUser = idUser;
END @@
DELIMITER ;
-- dar permissão de admin de usuário:
DELIMITER @@
CREATE PROCEDURE sp_darPermissaoAdmin(
IN idUser INT UNSIGNED
)
BEGIN
UPDATE tb_user
SET isAdmin = TRUE
WHERE idUser = idUser;
END @@
DELIMITER ;
-- verificar se usuário é admin, se sim retornar TRUE, senão retornar FALSE:
DELIMITER @@
CREATE PROCEDURE sp_verificarAdmin(
IN idUser INT UNSIGNED
)
BEGIN
SELECT isAdmin FROM tb_user WHERE idUser = idUser;
END @@
DELIMITER ;
-- retornar lista de tags com id e nome da tag:
DELIMITER @@
CREATE PROCEDURE sp_listarTags()
BEGIN
SELECT id_tag, tag_name FROM tag;
END @@
DELIMITER ;
-- ter acesso ao id de um usuário com base em seu username:
DELIMITER @@
CREATE PROCEDURE sp_obterIdUsuarioPorNome(IN nome VARCHAR(300))
BEGIN
SELECT idUser FROM tb_user WHERE userName = nome;
END @@
DELIMITER ;
-- retornar um post com base em seu id, retorando o id do usuário que postou, o username, a foto do usuário, a foto do post, o titulo, o texto, a descrição, o código, o número de likes e o número de comentários:
DELIMITER @@
CREATE PROCEDURE sp_obterPostPorId(IN idPost INT UNSIGNED)
BEGIN
SELECT
p.id_post AS id_post,
p.postTitle AS postTitle,
p.postText AS postText,
p.postPhoto AS postPhoto,
p.postDescription AS postDescription,
p.postCode AS postCode,
u.idUser AS idUser,
u.userName AS userName,
u.userPhoto AS userPhoto,
(SELECT COUNT(*) FROM likes WHERE fk_likePost = p.id_post) AS quantLikes,
(SELECT COUNT(*) FROM comentarios WHERE fk_id_post = p.id_post) AS quantComentarios
FROM post p
JOIN tb_user u ON p.fk_idUser = u.idUser
WHERE p.id_post = idPost;
END @@
DELIMITER ;
-- retornar comentários de um post com base em seu id:
DELIMITER @@
CREATE PROCEDURE sp_obterComentariosPorIdPost(IN idPost INT UNSIGNED)
BEGIN
SELECT
c.id_comentario AS id_comentario,
c.textComent AS textComent,
c.imageComent AS imageComent,
c.codeComent AS codeComent,
u.idUser AS idUser,
u.userName AS userName,
u.userPhoto AS userPhoto
FROM comentarios c
JOIN tb_user u ON c.fk_idUser = u.idUser
WHERE c.fk_id_post = idPost;
END @@
DELIMITER ;
-- obter quantidade limitada de comentários de um post com base em seu id:
DELIMITER @@
CREATE PROCEDURE sp_obterComentariosPorIdPostLimit(IN idPost INT UNSIGNED, IN limit_ INT UNSIGNED)
BEGIN
SELECT
c.id_comentario AS id_comentario,
c.textComent AS textComent,
c.imageComent AS imageComent,
c.codeComent AS codeComent,
u.idUser AS idUser,
u.userName AS userName,
u.userPhoto AS userPhoto
FROM comentarios c
JOIN tb_user u ON c.fk_idUser = u.idUser
WHERE c.fk_id_post = idPost
LIMIT limit_;
END @@
DELIMITER ;
-- procedure para a inserção de dados para testar o banco de dados, testar TODAS as procedures, adicionando usuários de teste, posts de teste, likes, comentários, permissão admin em alguns usuários, etc:
DELIMITER @@
CREATE PROCEDURE sp_testarBanco()
BEGIN
-- adicionar usuários:
CALL sp_CriarUsuario('joao', '[email protected]', '12345678');
CALL sp_CriarUsuario('pedro', '[email protected]', '12345678');
CALL sp_CriarUsuario('paulo', '[email protected]', '12345678');
CALL sp_CriarUsuario('Maria', '[email protected]', '12345678');
CALL sp_CriarUsuario('Ana', '[email protected]', '12345678');
-- adicionar permição de admin a alguns usuários:
CALL sp_darPermissaoAdmin((SELECT idUser FROM tb_user WHERE userName = 'joao'));
CALL sp_darPermissaoAdmin((SELECT idUser FROM tb_user WHERE userName = 'pedro'));
-- adicionar posts:
CALL sp_adicionarPost(
'Introdução ao JavaScript',
'JavaScript é uma das linguagens de programação mais populares para o desenvolvimento web. Com ela, é possível criar sites Interativos e dinâmicos, além de ser amplamente utilizado tanto no front-end quanto no back-end com Node.js. Sua flexibilidade e compatibilidade com diferentes navegadores tornam-na indispensável no desenvolvimento moderno.',
'javascript.png',
'Este post apresenta uma Introdução ao JavaScript, destacando sua importância no desenvolvimento de sites e aplicativos web Interativos.',
'console.log("Hello, JavaScript!");',
(SELECT idUser FROM tb_user WHERE userName = 'joao')
);
CALL sp_adicionarPost(
'Java: A Linguagem de Programação Clássica',
'Java é uma das linguagens de programação mais utilizadas no mundo, conhecida por sua robustez e portabilidade. Utilizada principalmente em sistemas corporativos, aplicações móveis (Android) e sistemas em grande escala, ela é uma escolha sólida para desenvolvedores que buscam criar soluções de alto desempenho.',
'java.png',
'Este post explora a linguagem Java, seus principais usos e as razões pelas quais ela permanece uma das mais populares no desenvolvimento de software.',
'public class Main {
public static void main(String[] args) {
System.out.prINT UNSIGNEDln("Hello, Java!");
}
}',
(SELECT idUser FROM tb_user WHERE userName = 'joao')
);
CALL sp_adicionarPost(
'Java: Orientação a Objetos',
'A programação orientada a objetos (OOP) é um dos pilares do Java. Conceitos como classes, objetos, herança e polimorfismo são fundamentais para criar aplicações eficientes e de fácil manutenção. Java utiliza esses conceitos para estruturar código de forma modular e reutilizável.',
'java_oop.png',
'Este post explora o conceito de orientação a objetos em Java e como ele pode ser usado para criar código mais modular e reutilizável.',
'class Car {
String model;
public Car(String model) {
this.model = model;
}
}',
(SELECT idUser FROM tb_user WHERE userName = 'maria')
);
CALL sp_adicionarPost(
'Frameworks Java: Spring e Hibernate',
'Java é conhecido por suas poderosas ferramentas e frameworks. O Spring Framework facilita o desenvolvimento de aplicações empresariais, enquanto o Hibernate é usado para simplificar o mapeamento objeto-relacional. Juntos, eles permitem que desenvolvedores criem soluções escaláveis e de alto desempenho.',
'java_spring_hibernate.png',
'Este post aborda os frameworks Java mais populares, Spring e Hibernate, e como eles ajudam a simplificar o desenvolvimento de aplicações corporativas.',
'public class Application {
public static void main(String[] args) {
@@ Exemplo de uso do Spring Boot
}
}',
(SELECT idUser FROM tb_user WHERE userName = 'maria')
);
CALL sp_adicionarPost(
'TypeScript: A Evolução do JavaScript',
'TypeScript é um superconjunto de JavaScript que adiciona tipagem estática à linguagem, permitindo que o desenvolvedor escreva código mais seguro e com menos erros. Ideal para projetos grandes, TypeScript oferece melhor escalabilidade e manutenção em comparação com JavaScript.',
'typescript.png',
'Este post explora as vantagens do TypeScript sobre JavaScript e como ele pode melhorar a segurança e a escalabilidade do código.',
'let message: string = "Hello, TypeScript!";',
(SELECT idUser FROM tb_user WHERE userName = 'pedro')
);
CALL sp_adicionarPost(
'Combinando TypeScript com React',
'O uso de TypeScript com React é uma prática recomendada para garantir que os componentes sejam tipados corretamente, facilitando a manutenção do código e a detecção de erros em tempo de desenvolvimento. Com TypeScript, é possível criar INT UNSIGNEDerfaces e tipos para as props e states dos componentes React.',
'typescript_react.png',
'Este post mostra como usar TypeScript com React para criar componentes mais seguros e robustos.',
'import React, { useState } from "react";
const MyComponent: React.FC = () => {
const [message, setMessage] = useState<string>("Hello, React with TypeScript!");
return <div>{message}</div>;
}',
(SELECT idUser FROM tb_user WHERE userName = 'ana')
);
CALL sp_adicionarPost(
'Mercado de Trabalho para Programadores',
'O mercado de trabalho para programadores está em constante crescimento, com uma alta demanda por profissionais qualificados. As habilidades em linguagens como Python, Java, JavaScript e TypeScript são altamente valorizadas, especialmente com a ascensão de novas tecnologias e a transformação digital das empresas.',
'mercado_trabalho_programadores.png',
'Este post discute as tendências do mercado de trabalho para programadores e como as habilidades em tecnologias emergentes estão em alta demanda.',
'prINT UNSIGNED("O mercado de trabalho está em crescimento para programadores!")',
(SELECT idUser FROM tb_user WHERE userName = 'paulo')
);
CALL sp_adicionarPost(
'PHP: A Linguagem de Servidores Web',
'PHP continua sendo uma das linguagens mais populares para desenvolvimento web. Com uma enorme base de código legado e frameworks poderosos como Laravel, PHP é uma escolha sólida para aplicações web rápidas e escaláveis.',
'php.png',
'Este post explora como o PHP continua sendo relevante para o desenvolvimento de sites e aplicações web.',
'<?php echo "Hello, PHP!"; ?>',
(SELECT idUser FROM tb_user WHERE userName = 'pedro')
);
CALL sp_adicionarPost(
'PHP e MySQL: A Dupla Dinâmica',
'PHP e MySQL formam uma combinação poderosa para o desenvolvimento de aplicações web dinâmicas. Juntos, eles permitem que desenvolvedores criem sites INT UNSIGNEDerativos e conectados a bancos de dados de forma eficiente.',
'php_mysql.png',
'Este post explora como combinar PHP e MySQL para criar aplicações web INT UNSIGNEDerativas e com armazenamento de dados eficiente.',
'$conn = new mysqli("localhost", "username", "password", "database");',
(SELECT idUser FROM tb_user WHERE userName = 'ana')
);
CALL sp_adicionarPost(
'PHP Frameworks: Laravel e Symfony',
'Laravel e Symfony são dois dos frameworks PHP mais populares. Ambos oferecem recursos avançados para desenvolvimento web, como roteamento, segurança e gerenciamento de dependências, facilitando o desenvolvimento de aplicações robustas.',
'php_frameworks.png',
'Este post apresenta os principais frameworks PHP, Laravel e Symfony, e como eles ajudam a otimizar o desenvolvimento de aplicações web.',
'composer create-project --prefer-dist laravel/laravel my-app',
(SELECT idUser FROM tb_user WHERE userName = 'maria')
);
CALL sp_adicionarPost(
'As Principais Tecnologias para Programadores',
'As tecnologias que mais impactam o mercado de trabalho para programadores incluem frameworks como React, Angular, e Vue.js para o front-end, além de ferramentas de DevOps como Docker, Jenkins, e CI/CD. Conhecer essas tecnologias pode abrir portas para ótimas oportunidades.',
'principais_tecnologias.png',
'Este post destaca as principais tecnologias que estão em alta no mercado de trabalho para programadores e desenvolvedores.',
'import React from "react"; // exemplo de uso de tecnologia em alta',
(SELECT idUser FROM tb_user WHERE userName = 'paulo')
);
-- adicionar likes conforme o id do post:
CALL sp_darLike(1, (SELECT idUser FROM tb_user WHERE userName = 'joao'));
CALL sp_darLike(1, (SELECT idUser FROM tb_user WHERE userName = 'pedro'));
CALL sp_darLike(1, (SELECT idUser FROM tb_user WHERE userName = 'paulo'));
CALL sp_darLike(2, (SELECT idUser FROM tb_user WHERE userName = 'joao'));
CALL sp_darLike(2, (SELECT idUser FROM tb_user WHERE userName = 'pedro'));
CALL sp_darLike(2, (SELECT idUser FROM tb_user WHERE userName = 'paulo'));
-- adicionar tags:
CALL sp_adicionarTags('Java');
CALL sp_adicionarPost('JavaScript');
CALL sp_adicionarTags('React');
-- adicionar tags ao post:
CALL sp_adicionarTagPost(1, 2);
CALL sp_adicionarTagPost(1, 2);
CALL sp_adicionarTagPost(2, 1);
-- obter informações do post:
-- CALL sp_obterPostPorId(1);
-- CALL sp_obterPostPorId(2);
-- CALL sp_obterPostPorId(3);
-- CALL sp_obterPostPorId(4);
-- CALL sp_obterPostPorId(5);
-- CALL sp_obterPostPorId(6);
-- CALL sp_obterPostPorId(7);
-- CALL sp_obterPostPorId(8);
-- CALL sp_obterPostPorId(9);
-- CALL sp_obterPostPorId(10);
-- CALL sp_obterPostPorId(11);
-- CALL sp_obterPostPorId(12);
-- -- obter posts por tags:
-- CALL sp_obterPostsPorTags('java');
-- -- obter posts por tags com limite:
-- CALL sp_obterPostsPorTagsLimit('java', 2);
END @@
DELIMITER ;