Skip to content

Commit 4e628fa

Browse files
Merge pull request #19 from C216-Distribuid-System-Project/refact/MF-database
Database Refactor + Project Colors + StickWall Module
2 parents 6a7592c + 38c482d commit 4e628fa

File tree

13 files changed

+454
-62
lines changed

13 files changed

+454
-62
lines changed

database/02_seed.sql

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,33 @@
1-
-- insert users
1+
USE todolist;
2+
3+
-- INSERT USERS
24
INSERT INTO users (name, email, phone, birth_date, password_hash)
35
VALUES
4-
('Alice Silva', 'alice@example.com', '11999999999', '1995-05-10', '$2b$12$hashfakealice'),
5-
('Bruno Costa', 'bruno@example.com', '21988888888', '1990-07-22', '$2b$12$hashfakebruno'),
6+
('Alice Silva', 'alice@example.com', '11999999999', '1995-05-10', '$2b$12$hashfakealice'),
7+
('Bruno Costa', 'bruno@example.com', '21988888888', '1990-07-22', '$2b$12$hashfakebruno'),
68
('Carla Mendes', 'carla@example.com', '31977777777', '1988-11-03', '$2b$12$hashfakecarla');
79

8-
-- insert projects
9-
INSERT INTO projects (user_id, title, description)
10+
-- INSERT PROJECTS
11+
INSERT INTO projects (user_id, title, description, color)
1012
VALUES
11-
(1, 'Projeto Casa', 'Organizar tarefas domésticas'),
12-
(1, 'Trabalho', 'Atividades da empresa'),
13-
(2, 'Viagem', 'Planejamento da viagem para 2025');
13+
(1, 'Projeto Casa', 'Organizar tarefas domésticas', '#FF6B6B'),
14+
(1, 'Trabalho', 'Atividades da empresa', '#4D96FF'),
15+
(2, 'Viagem', 'Planejamento da viagem para 2025', '#6BCB77');
1416

15-
-- insert tasks
17+
-- INSERT TASKS
1618
INSERT INTO tasks (user_id, project_id, title, description, due_date, reminder, completed)
1719
VALUES
18-
(1, 1, 'Lavar roupa', 'Separar roupas coloridas e brancas', '2025-09-30 18:00:00', TRUE, FALSE),
19-
(1, 1, 'Comprar mantimentos', 'Ir ao mercado comprar frutas e verduras', '2025-09-25 20:00:00', FALSE, FALSE),
20-
(1, 2, 'Revisar relatório', 'Revisão do relatório trimestral', '2025-09-28 10:00:00', TRUE, FALSE),
21-
(2, 3, 'Reservar hotel', 'Hotel em Florianópolis', '2025-10-10 12:00:00', TRUE, FALSE),
22-
(2, 3, 'Comprar passagens', 'Passagens aéreas ida e volta', '2025-09-27 15:00:00', FALSE, TRUE),
23-
(3, NULL, 'Estudar Python', 'Praticar FastAPI para o backend', '2025-09-26 19:00:00', FALSE, FALSE);
20+
(1, 1, 'Lavar roupa', 'Separar roupas coloridas e brancas', '2025-09-30 18:00:00', TRUE, FALSE),
21+
(1, 1, 'Comprar mantimentos', 'Ir ao mercado comprar frutas e verduras', '2025-09-25 20:00:00', FALSE, FALSE),
22+
(1, 2, 'Revisar relatório', 'Revisão do relatório trimestral', '2025-09-28 10:00:00', TRUE, FALSE),
23+
(2, 3, 'Reservar hotel', 'Hotel em Florianópolis', '2025-10-10 12:00:00', TRUE, FALSE),
24+
(2, 3, 'Comprar passagens', 'Passagens aéreas ida e volta', '2025-09-27 15:00:00', FALSE, TRUE),
25+
(3, NULL, 'Estudar Python', 'Praticar FastAPI para o backend', '2025-09-26 19:00:00', FALSE, FALSE);
26+
27+
-- INSERT STICK_WALL
28+
INSERT INTO stick_wall (user_id, name, text, color)
29+
VALUES
30+
(1, 'Recado rápido', 'Comprar café e filtro ainda hoje', '#FFF176'),
31+
(1, 'Ideia de projeto', 'Criar board para organizar estudos da C216', '#FFD54F'),
32+
(2, 'Lembrete', 'Enviar relatório até sexta-feira', '#FFAB40'),
33+
(3, 'Estudos', 'Terminar capítulo de Redes Distribuídas hoje', '#81C784');

database/database_schema.sql

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,15 @@ CREATE TABLE IF NOT EXISTS projects (
2424
user_id INT NOT NULL,
2525
title VARCHAR(255) NOT NULL,
2626
description TEXT NULL,
27+
color VARCHAR(7) NOT NULL DEFAULT '#FFFFFF',
2728
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
2829
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
2930
CONSTRAINT fk_projects_user
3031
FOREIGN KEY (user_id) REFERENCES users(id)
31-
ON DELETE CASCADE
32-
ON UPDATE CASCADE
32+
ON DELETE CASCADE
33+
ON UPDATE CASCADE,
34+
CONSTRAINT chk_projects_color_hex
35+
CHECK (color REGEXP '^#[0-9A-Fa-f]{6}$')
3336
) ENGINE=InnoDB;
3437

3538
-- 3) TASKS
@@ -46,21 +49,42 @@ CREATE TABLE IF NOT EXISTS tasks (
4649
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
4750
CONSTRAINT fk_tasks_user
4851
FOREIGN KEY (user_id) REFERENCES users(id)
49-
ON DELETE CASCADE
50-
ON UPDATE CASCADE,
52+
ON DELETE CASCADE
53+
ON UPDATE CASCADE,
5154
CONSTRAINT fk_tasks_project
5255
FOREIGN KEY (project_id) REFERENCES projects(id)
53-
ON DELETE SET NULL
54-
ON UPDATE CASCADE
56+
ON DELETE SET NULL
57+
ON UPDATE CASCADE
58+
) ENGINE=InnoDB;
59+
60+
-- 4) STICK_WALL
61+
CREATE TABLE IF NOT EXISTS stick_wall (
62+
id INT AUTO_INCREMENT PRIMARY KEY,
63+
user_id INT NOT NULL,
64+
name VARCHAR(255) NOT NULL,
65+
text TEXT NOT NULL,
66+
color VARCHAR(7) NOT NULL DEFAULT '#FFFF88',
67+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
68+
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
69+
CONSTRAINT fk_stick_wall_user
70+
FOREIGN KEY (user_id) REFERENCES users(id)
71+
ON DELETE CASCADE
72+
ON UPDATE CASCADE,
73+
CONSTRAINT chk_stick_wall_color_hex
74+
CHECK (color REGEXP '^#[0-9A-Fa-f]{6}$')
5575
) ENGINE=InnoDB;
5676

5777
-- Indexes for performance optimization
5878
CREATE INDEX idx_users_email ON users(email);
5979
CREATE INDEX idx_users_phone ON users(phone);
80+
6081
CREATE INDEX idx_projects_user ON projects(user_id);
82+
CREATE INDEX idx_projects_color ON projects(color);
6183
CREATE INDEX idx_tasks_user ON tasks(user_id);
6284
CREATE INDEX idx_tasks_project ON tasks(project_id);
6385
CREATE INDEX idx_tasks_due_date ON tasks(due_date);
6486
CREATE INDEX idx_tasks_completed ON tasks(completed);
6587
CREATE INDEX idx_tasks_reminder ON tasks(reminder);
6688
CREATE INDEX idx_tasks_user_completed ON tasks(user_id, completed);
89+
CREATE INDEX idx_stick_wall_user ON stick_wall(user_id);
90+
CREATE INDEX idx_stick_wall_color ON stick_wall(color);

docs/en/backend_proposal_todo_list_en.md

Lines changed: 65 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Table that stores user data.
2525
📌 **Relationships**:
2626
- 1:N**Projects**
2727
- 1:N**Tasks**
28+
- 1:N**StickWall**
2829

2930
---
3031

@@ -37,6 +38,7 @@ Table that groups tasks related to a common objective.
3738
| `user_id` | INT NOT NULL | Project owner |
3839
| `title` | VARCHAR(255) NOT NULL | Project title |
3940
| `description` | TEXT | Project description |
41+
| `color` | VARCHAR(7) NOT NULL DEFAULT '#FFFFFF' | Hexadecimal color (ex: #FF5733) |
4042
| `created_at` | TIMESTAMP DEFAULT CURRENT_TIMESTAMP | Creation date |
4143
| `updated_at` | TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | Last update date |
4244

@@ -63,12 +65,31 @@ Table that stores each user and/or project task.
6365

6466
---
6567

68+
### **4. Stick Wall (`stick_wall`)**
69+
70+
New table added to the system.
71+
72+
Used to store quick notes, usually displayed on a post-it style bulletin board.
73+
74+
| Field | Type | Description |
75+
|---------------|---------------------------------------|-------------|
76+
| `id` | INT PRIMARY KEY AUTO_INCREMENT | Unique identifier |
77+
| `user_id` | INT NOT NULL | Note owner |
78+
| `name` | VARCHAR(255) NOT NULL | Note title |
79+
| `text` | TEXT NOT NULL | Note content |
80+
| `color` | VARCHAR(7) NOT NULL DEFAULT '#FFFF88' | Hex color for the note |
81+
| `created_at` | TIMESTAMP DEFAULT CURRENT_TIMESTAMP | Creation date |
82+
| `updated_at` | TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | Last update date |
83+
84+
---
85+
6686
### Data relationship diagram
6787

6888
```mermaid
6989
erDiagram
7090
USERS ||--o{ PROJECTS : has
7191
USERS ||--o{ TASKS : has
92+
USERS ||--o{ STICK_WALL : has
7293
PROJECTS ||--o{ TASKS : contains
7394
7495
USERS {
@@ -87,6 +108,7 @@ erDiagram
87108
INT user_id FK
88109
VARCHAR title
89110
TEXT description
111+
VARCHAR color
90112
TIMESTAMP created_at
91113
TIMESTAMP updated_at
92114
}
@@ -104,6 +126,16 @@ erDiagram
104126
TIMESTAMP updated_at
105127
}
106128
129+
STICK_WALL {
130+
INT id PK
131+
INT user_id FK
132+
VARCHAR name
133+
TEXT text
134+
VARCHAR color
135+
TIMESTAMP created_at
136+
TIMESTAMP updated_at
137+
}
138+
107139
```
108140

109141
---
@@ -150,6 +182,19 @@ Authentication will use JWT (JSON Web Token) to protect routes and allow access
150182
| PUT | `/tasks/{id}` | Update a task |
151183
| DELETE | `/tasks/{id}` | Delete a task |
152184

185+
---
186+
187+
### **StickWall**
188+
189+
| Method | Route | Description |
190+
|--------|-----------------|-----------------------------------------|
191+
| GET | `/stickwall` | List all StickWall notes of the user |
192+
| POST | `/stickwall` | Create a new note |
193+
| GET | `/stickwall/{id}` | Get details of a specific note |
194+
| PUT | `/stickwall/{id}` | Update a specific note |
195+
| DELETE | `/stickwall/{id}` | Delete a specific note |
196+
197+
153198
---
154199

155200
### **Extras**
@@ -171,18 +216,25 @@ Authentication will use JWT (JSON Web Token) to protect routes and allow access
171216
| **Users** ||||
172217
| | GET | `/users/me` |||
173218
| **Projects** ||||
174-
| | GET | `/projects` | ||
175-
| | POST | `/projects` | ||
176-
| | GET | `/projects/{id}` | ||
177-
| | PUT | `/projects/{id}` | ||
178-
| | DELETE | `/projects/{id}` | ||
219+
| | GET | `/projects` | ||
220+
| | POST | `/projects` | ||
221+
| | GET | `/projects/{id}` | ||
222+
| | PUT | `/projects/{id}` | ||
223+
| | DELETE | `/projects/{id}` | ||
179224
| **Tasks** ||||
180-
| | GET | `/tasks` | ||
181-
| | POST | `/tasks` | ||
182-
| | GET | `/tasks/{id}` | ||
183-
| | PUT | `/tasks/{id}` | ||
184-
| | DELETE | `/tasks/{id}` | ||
225+
| | GET | `/tasks` | ||
226+
| | POST | `/tasks` | ||
227+
| | GET | `/tasks/{id}` | ||
228+
| | PUT | `/tasks/{id}` | ||
229+
| | DELETE | `/tasks/{id}` | ||
185230
| **Relations & Filters** ||||
186-
| | GET | `/projects/{id}/tasks` |||
187-
| | GET | `/tasks/reminders` |||
188-
| | GET | `/tasks/today` |||
231+
| | GET | `/projects/{id}/tasks` |||
232+
| | GET | `/tasks/reminders` |||
233+
| | GET | `/tasks/today` |||
234+
| **StickWall** | | | | |
235+
| | GET | `/stickwall` |||
236+
| | POST | `/stickwall` |||
237+
| | GET | `/stickwall/{id}` |||
238+
| | PUT | `/stickwall/{id}` |||
239+
| | DELETE | `/stickwall/{id}` |||
240+

docs/pt-br/backend_proposal_todo_list.md

Lines changed: 62 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Tabela que armazena os dados dos usuários cadastrados.
2525
📌 **Relacionamentos**:
2626
- 1:N**Projetos**
2727
- 1:N**Tarefas**
28+
- 1:N**Stick-wall**
2829

2930
---
3031

@@ -63,12 +64,31 @@ Tabela que armazena as tarefas de cada usuário e/ou projeto.
6364

6465
---
6566

67+
### **4. Parede de post-its (`stick_wall`)**
68+
69+
Nova tabela adicionada ao sistema.
70+
71+
Usada para armazenar notas rápidas, geralmente exibidas em um quadro de avisos estilo post-it.
72+
73+
| Campo | Tipo | Descrição |
74+
|---------------|---------------------------------------|-------------|
75+
| `id` | INT PRIMARY KEY AUTO_INCREMENT | Identificador único |
76+
| `user_id` | INT NOT NULL | Proprietário da nota |
77+
| `name` | VARCHAR(255) NOT NULL | Título da nota |
78+
| `text` | TEXT NOT NULL | Conteúdo da nota |
79+
| `color` | VARCHAR(7) NOT NULL DEFAULT ‘#FFFF88’ | Cor hexadecimal da nota |
80+
| `created_at` | TIMESTAMP DEFAULT CURRENT_TIMESTAMP | Data de criação |
81+
| `updated_at` | TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | Data da última atualização |
82+
83+
---
84+
6685
### Diagrama de relacionamento dos dados
6786

6887
```mermaid
6988
erDiagram
7089
USUARIOS ||--o{ PROJETOS : possui
7190
USUARIOS ||--o{ TAREFAS : possui
91+
USUARIOS ||--o{ STICK_WALL : possui
7292
PROJETOS ||--o{ TAREFAS : agrupa
7393
7494
USUARIOS {
@@ -87,6 +107,7 @@ erDiagram
87107
INT usuario_id FK
88108
VARCHAR titulo
89109
TEXT descricao
110+
VARCHAR cor
90111
TIMESTAMP criado_em
91112
TIMESTAMP atualizado_em
92113
}
@@ -103,6 +124,16 @@ erDiagram
103124
TIMESTAMP criado_em
104125
TIMESTAMP atualizado_em
105126
}
127+
128+
STICK_WALL {
129+
INT id PK
130+
INT usuario_id FK
131+
VARCHAR nome
132+
TEXT texto
133+
VARCHAR cor
134+
TIMESTAMP criado_em
135+
TIMESTAMP atualizado_em
136+
}
106137
```
107138

108139
---
@@ -151,6 +182,18 @@ Será utilizada autenticação com JWT (JSON Web Token) para proteger as rotas e
151182

152183
---
153184

185+
### **StickWall**
186+
187+
| Método | Rota | Descrição |
188+
|--------|-----------------|-----------------------------------------|
189+
| GET | `/stickwall` | Listar todas as notas StickWall do usuário |
190+
| POST | `/stickwall` | Criar uma nova nota |
191+
| GET | `/stickwall/{id}` | Obter detalhes de uma nota específica |
192+
| PUT | `/stickwall/{id}` | Atualizar uma nota específica |
193+
| DELETE | `/stickwall/{id}` | Excluir uma nota específica |
194+
195+
---
196+
154197
### **Extras**
155198
| Método | Rota | Descrição |
156199
|--------|------------------------------|----------------------------------------------|
@@ -170,18 +213,24 @@ Será utilizada autenticação com JWT (JSON Web Token) para proteger as rotas e
170213
| **Usuários** ||||
171214
| | GET | `/users/me` |||
172215
| **Projetos** ||||
173-
| | GET | `/projects` | ||
174-
| | POST | `/projects` | ||
175-
| | GET | `/projects/{id}` | ||
176-
| | PUT | `/projects/{id}` | ||
177-
| | DELETE | `/projects/{id}` | ||
216+
| | GET | `/projects` | ||
217+
| | POST | `/projects` | ||
218+
| | GET | `/projects/{id}` | ||
219+
| | PUT | `/projects/{id}` | ||
220+
| | DELETE | `/projects/{id}` | ||
178221
| **Tarefas** ||||
179-
| | GET | `/tasks` | ||
180-
| | POST | `/tasks` | ||
181-
| | GET | `/tasks/{id}` | ||
182-
| | PUT | `/tasks/{id}` | ||
183-
| | DELETE | `/tasks/{id}` | ||
222+
| | GET | `/tasks` | ||
223+
| | POST | `/tasks` | ||
224+
| | GET | `/tasks/{id}` | ||
225+
| | PUT | `/tasks/{id}` | ||
226+
| | DELETE | `/tasks/{id}` | ||
184227
| **Relacionamentos e Filtros** ||||
185-
| | GET | `/projects/{id}/tasks` |||
186-
| | GET | `/tasks/reminders` |||
187-
| | GET | `/tasks/today` |||
228+
| | GET | `/projects/{id}/tasks` |||
229+
| | GET | `/tasks/reminders` |||
230+
| | GET | `/tasks/today` |||
231+
| **StickWall** | | | | |
232+
| | GET | `/stickwall` |||
233+
| | POST | `/stickwall` |||
234+
| | GET | `/stickwall/{id}` |||
235+
| | PUT | `/stickwall/{id}` |||
236+
| | DELETE | `/stickwall/{id}` |||

src/models/project_model.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ class Project(Base):
1212
user_id (int): Foreign key referencing the user who owns the project.
1313
title (str): Title of the project.
1414
description (str): Detailed description of the project.
15+
color (str): Hex color associated with the project (e.g. "#FF5733").
1516
created_at (datetime): Timestamp when the project was created.
1617
updated_at (datetime): Timestamp when the project was last updated.
1718
user (User): Relationship to the User model, representing the owner of the project.
19+
tasks (List[Task]): Relationship to the Task model, representing tasks in this project.
1820
"""
1921

2022
__tablename__ = "projects"
@@ -25,6 +27,7 @@ class Project(Base):
2527
)
2628
title = Column(String(255), nullable=False)
2729
description = Column(Text)
30+
color = Column(String(7), nullable=False, server_default="#FFFFFF")
2831
created_at = Column(TIMESTAMP, server_default=func.now())
2932
updated_at = Column(TIMESTAMP, server_default=func.now(), onupdate=func.now())
3033

0 commit comments

Comments
 (0)