🚀 Gerencie ciclos de estudos através do seu terminal! 🚀
O projeto consiste em uma CLI projetada para auxiliar o usuário na gestão de seu ciclo de estudos. Com essa ferramenta, é possível adicionar e remover matérias, selecionar um ciclo de estudos específico para visualização, deletar ciclos e, principalmente, marcar checkboxes das matérias para acompanhar o progresso de cada uma.
Auxiliar o usuário a gerenciar um ciclo de estudos com uma aplicação via terminal.
study-cycle-demo.mp4
- Criar um novo ciclo de estudos:
scm create --title="Nome do ciclo de estudos"
- Listar todos os ciclos de estudos:
scm list
- Listar ciclo de estudos selecionado:
COMMING SOON
- Deletar ciclo de estudos:
scm delete --id 1
- Adicionar matéria ao ciclo de estudos:
scm add --name="Nome da matéria" --max-study-hours 10
- Estudar uma matéria (add 1 hora):
scm study --id 1
- Remover matéria do ciclo de estudos:
scm remove --id 1
- Visualizar progresso do ciclo de estudos:
scm view
Um ciclo de estudos é uma metodologia de organização do tempo de estudo que visa otimizar a aprendizagem e aumentar a produtividade. Em vez de seguir um cronograma rígido, o ciclo de estudos permite uma abordagem mais flexível e dinâmica. Onde você impõe um limite do quanto tem que estudar de cada matéria. Esse valor sendo representado pela flag max-study-hours
. Se uma matéria chegar nesse valor você é obrigado a estudar outra matéria que não seja aquela até seu ciclo acabar. Garantindo assim que você estude todas as matérias necessárias.
OBS: ESTE PROJETO APENAS GERENCIA UM CICLO DE ESTUDOS JÁ CRIADO! SE VOCÊ NÃO POSSUI UM CICLO DE ESTUDOS CONFIGURADO, FAÇA ANTES DE USAR ESTE SOFTWARE.
- Usuários devem poder registrar novos ciclos de estudos
- O sistema deve listar todos os ciclos de estudos criados pelo usuário
- O sistema deve registrar os ciclos de estudos com títulos únicos
- O sistema deve permitir que o usuário selecione um dos ciclos de estudos criados
- O sistema deve permitir a exclusão de ciclos de estudos mediante o seu ID
- Usuários devem poder selcionar ciclos de estudos mediante seus IDs
- Usuários devem poder adicionar novas matérias aos ciclos de estudos
- O sistema deve exibir uma visão geral das matérias de um ciclo de estudos, com quadrados vázios para cada hora de estudo e preenchidos para cada hora estudada
- Usuários devem poder remover matérias dos ciclos de estudos
- O sistema deve registrar as horas estudadas de cada matéria do ciclo de estudos selecionado
- Deve ser usado banco de dados SQLite
- O projeto deve ser testado
- Deve haver um banco de dados dedicado para testes
- Deve haver uma documentação detalhada dos comandods do projeto
- O sistema deve possuir um comando de help interno
- O projeto deve ser dockerizado
- O projeto deve conter um Makefile com comandos de build e clean para melhor experiência de desenvolvimento
- O sistema deve impedir que os usuários atualizem as horas estudadas de matérias que atingiram o limite máximo de horas estudas até o fim do ciclo
- O usuáio deve poder reiniciar o ciclo de estudos quando todas as matérias atingirem seu limite máixmo de horas estudadas, o reset deve zerar as horas estudadas de todas as matérias
- Ao reiniciar um ciclo de estudos o sistema deverá somar mais um na contagem de ciclos concluídos
- O sistema deve atualizar somente os dados do ciclo de estudos selecionado
- O sistema deve impedir os usuários de selecionarem mais de um ciclo de estudos por vez
- O sistema deve impedir os usuários atualizarem as horas estudadas de matérias fora do ciclo de estudos selecionado
- O sistema deve exigir que os usuários selecionem um ciclo de estudos antes de gerenciar as horas estudadas das matérias
- O sistema deve bloquear a inserção de matérias com nomes duplicados em um ciclo de estudos
- O sistema deve formatar os nomes dos ciclos de estudos e das matérias, deixando o título dos ciclos de estudos com inicial maiúscula e separado por espaços enquanto o nome das matérias totalmente em minúsculo e separado por hífens
- O sistema deve ser transparente, informando o usuário de erros que acontecerem durante a execução de tarefas
CREATE TABLE IF NOT EXISTS study_cycles (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL UNIQUE,
completed_times INTEGER NOT NULL,
selected BOOLEAN NOT NULL,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP
);
CREATE TABLE IF NOT EXISTS study_cycle_subjects (
id INTEGER PRIMARY KEY AUTOINCREMENT,
study_cycle_id INTEGER NOT NULL,
name TEXT NOT NULL,
max_study_hours INTEGER NOT NULL,
user_studied_hours INTEGER NOT NULL,
completed_times INTEGER NOT NULL,
added_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP,
FOREIGN KEY (study_cycle_id) REFERENCES study_cycles(id)
UNIQUE (study_cycle_id, name)
);
- bin/
- cmd/
- scm/
- main.go
- internal/
- commands/
- databasa/
- store/
- sqlite/
- migrations/
- repositorie/
- test_database.db
- database.db
- public
- images/
- videos/
Makefile
Dockerfile
README.md
LICENSE
go.mod
go.sum
Tech | Utilidade | Versão |
---|---|---|
Golang | Linguagem de programação usada | 1.23 |
Neovim | Editor de código via terminal | 10 |
sqlite3 | Driver do banco de dados SQLite | 1.14.23 |
- Criação de um ciclo de estudos do zero;
- Exportação do ciclo de estudos como imagem;
- Exportação do ciclo de estudos como PDF;
- Comando de limpeza do banco de dados;
- Comando de backup do banco de dados;
- Sugestão de comandos quando o usuário digitar um comando errado;
- Como trabalhar com SQLite e Golang;
- Como transformar dados vindos de um banco de dados relacional para uma variável ou slice de um tipo específico em Golang;
- Como imprimir dados de forma tabular em Golang;
- Como criar comandos para CLI em Golang;
- Como fazer uma CLI em Golang;
- Como formatar strings em Golang;
- Como ordenar um slice de structs em Golang;
- Como dockerizar uma aplicação Golang;
- Como obter o diretório padrão do projeto em Golang;
- Como organizar comandos e flags individuais de comandos em Golang;
- Como trabalhar com Makefiles em Golang;
- Como rodar uma aplicação Golang em ambiente Windows;