Funcionalidades
Cards
A entidade de primeiro nível: número, prazo com fuso, branch e favorito.
Dentro de um espaço de trabalho, o card é a entidade de primeiro nível: o modelo é invertido em relação ao Trello, onde tudo pende de um quadro. Aqui, projeto é um rótulo opcional de filtro; um card sem projeto é um estado normal, e não um erro.
O número #42
id é um cuid; number é o apelido que as pessoas citam num commit ou numa conversa. Ele vem de uma sequence do Postgres, nunca é reaproveitado (apagar o #42 não faz o próximo card nascer #42) e é único na instalação inteira.
Prazo carrega o fuso em que foi declarado
Um card guarda dueAt (o instante) e dueAtZone (o fuso em que a data foi escolhida). É esse par que faz o mesmo dia valer para todo leitor: sem o fuso, um prazo marcado às 23h em São Paulo apareceria no dia seguinte para quem lesse em UTC.
Fuso sem data não existe
Os dois campos andam juntos. Num PATCH, dueAtZone ausente preserva o fuso já gravado: ele não cai no fuso de quem está chamando.
O favorito é pessoal
A estrela não é um fato do card: ela é um registro entre a conta e o card. Dois leitores recebem valores diferentes no campo favorite para o mesmo card: o cliente lê um booleano, e ele é a resposta para quem pediu.
Os campos
Pontos de atenção
- Campo ausente não é tocado. Limpar exige valor explícito (
null), e é o que permite mandar{ favorite: true }sozinho. - Trocar de coluna grava histórico; reordenar dentro da mesma coluna não gera registro.
- Entrar num epic com alvo de data pode herdar o prazo, e sobrescrever uma data já escolhida exige
alignDueAt: true. - Edição em lote recusa inteira. Se um card quebra uma regra, nenhum é alterado.