cerejeiros / bloom

Aplicativo de organização de hábitos e criação de rotinas e criação de tarefas em blocos e tabelas.
https://cerejeiros.github.io/bloom/
MIT License
3 stars 0 forks source link

Prótotipo de rotina e blocos. #12

Closed BeyondMagic closed 1 year ago

BeyondMagic commented 1 year ago

Aqui vamos idealizar como uma rotina seria criada/editada; quais propriedades ela possuiria:

type Routine = {
  name : string;
  ...
};
Neoprot commented 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);

kaioenzo commented 1 year ago

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;
  ...
}
BeyondMagic commented 1 year ago

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 Routines.

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.

kaioenzo commented 1 year ago

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' ...
)
kaioenzo commented 1 year ago

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;
};