Closed BeyondMagic closed 1 year ago
Aqui vamos idealizar como uma rotina seria criada/editada; quais propriedades ela possuiria:
type Routine = {
name : string;
id: number;
priority: string;
status: number
...
};
Colocamos ID para facilitar o armazenamento da informação e a sua consulta, prioridade (acho que devemos debater se seria em string ou em number), status (1 completo, 0 em andamento);
Status deve ser string, pois salvar como números fere princípios de boas práticas de banco de dados. Teríamos que criar mais regras para converter número em status (string na UI), o que gera mais custos e trabalho. Também acredito que priority deveria ser opcional, podendo ser undefined.
type Routine = {
name : string;
id: number;
priority?: string;
status: string;
createdTimeStamp: number;
...
}
Renomeando Routine
para Task
parece ser mais apropriado, e adicionando em parentes para mover tarefas quando usarmos o aplicativo.
E se status e priority for do tipo string, penso que ela deva ser limitada a apenas alguns valores para ser mais fácil de programar caso a caso, como labels abaixo ou enums.
type Task = {
name: string;
id: number;
priority?: 'urgent' | 'high' | 'medium' | 'low';
status: 'done' | 'in progress' | ...;
createdTimeStamp: number;
...
};
Poderíamos salvar blocos separadamente (virou um standard em aplicativos de rotina), e usá-los como template para adicionar em outras Routine
s.
type Block = {
name: string;
id: number;
tasks: Task[];
};
Uma ideia mais geral, Routine
seria um perído como sete dias, ou mais. quando um aluno está num período de férias e na faculdade.
Para atividades periódicas (mensalmente, ou X dias) podem ser adicionadas na propriedade tasks.
type Routine = {
name: string;
id: number;
blocks: Block[];
tasks: Task[];
}
Sobre algumas adições, acredito que um bom aplicativo deva fazer uma coisa apenas: aquilo que ele diz fazer. O nosso é de rotinas, de habitos, temos que pensar tanto em usuarios que usariam isso para atividades corriqueiras, ou para atividades inabituais.
Então não são adições para complicar o banco de dados, mas para darmos mais liberdade ao usuário final.
Criando o SQL no Supabase poderíamos modelar os ENUMS assim
CREATE TYPE task_priority as ENUM (
'urgent',
'high',
'medium',
'low' ...
)
CREATE TYPE task_status as ENUM (
'done',
'in progress' ...
)
Após discussões em grupo, foi definido, que o status disabled
indicaria uma Task que estivesse disabilitada em algum dia, quando inserida em um bloco. Foi adicionado a propriedade time para indicar o horário da Task. No Block foi adicionado a propriedade period
, para que seja indicado o período do dia que o Block
seja realizado, também foi adicionado a propriedade date
, que indicara o dia que o Block
será realizado.
type Task = {
name: string;
id: number;
priority?: 'urgent' | 'high' | 'medium' | 'low';
status: 'done' | 'in progress' | 'disabled';
createdTimeStamp: number;
time: string;
...
};
type Block = {
name: string;
id: number;
tasks: Task[];
period: 'morning' | 'evening' | 'afternoon' | 'night' ;
date: string;
};
Aqui vamos idealizar como uma rotina seria criada/editada; quais propriedades ela possuiria: