{"id":21987898,"url":"https://github.com/dedo-finger2/study-cycle-manager","last_synced_at":"2025-10-14T08:36:26.017Z","repository":{"id":255867484,"uuid":"852696461","full_name":"Dedo-Finger2/study-cycle-manager","owner":"Dedo-Finger2","description":"Gerenciador de ciclo de estudos via terminal","archived":false,"fork":false,"pushed_at":"2024-09-08T11:42:47.000Z","size":2711,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-28T05:42:57.525Z","etag":null,"topics":["backend","cli","golang","golang-cli","manager-system","simple-project","sqlite3","standart-libraries","study-cycle","utility"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Dedo-Finger2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-05T09:01:47.000Z","updated_at":"2024-09-07T14:27:51.000Z","dependencies_parsed_at":"2024-09-07T15:53:13.562Z","dependency_job_id":"83828aa1-407b-4f43-b2ad-5a79080f44e4","html_url":"https://github.com/Dedo-Finger2/study-cycle-manager","commit_stats":null,"previous_names":["dedo-finger2/study-cycle-manager"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dedo-Finger2%2Fstudy-cycle-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dedo-Finger2%2Fstudy-cycle-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dedo-Finger2%2Fstudy-cycle-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dedo-Finger2%2Fstudy-cycle-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dedo-Finger2","download_url":"https://codeload.github.com/Dedo-Finger2/study-cycle-manager/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245048278,"owners_count":20552483,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","cli","golang","golang-cli","manager-system","simple-project","sqlite3","standart-libraries","study-cycle","utility"],"created_at":"2024-11-29T19:14:46.475Z","updated_at":"2025-10-14T08:36:20.996Z","avatar_url":"https://github.com/Dedo-Finger2.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📘 Study Cycle Manager\n\n![](https://github.com/Dedo-Finger2/study-cycle-manager/blob/study-cycle-manager-experiment/public/images/cover.png?raw=true)\n\n\u003cp align=\"center\"\u003e\n\t\u003cimg src=\"https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge\u0026logo=go\u0026logoColor=white\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e🚀 Gerencie \u003cstrong\u003eciclos de estudos\u003c/strong\u003e através do seu terminal! 🚀\u003c/p\u003e\n\n---\n\n## 📔 Descrição\n\nO 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.\n\n## 🎯 Objetivo\n\nAuxiliar o usuário a gerenciar um ciclo de estudos com uma aplicação via terminal.\n\n## 📺 Demo\n\nhttps://github.com/user-attachments/assets/f8f049e6-81ad-46c9-945f-ca1f23fceee7\n\n## ⚙️ Comandos\n\n- Criar um novo ciclo de estudos: `scm create --title=\"Nome do ciclo de estudos\"`\n- Listar todos os ciclos de estudos: `scm list`\n- Listar ciclo de estudos selecionado: `COMMING SOON`\n- Deletar ciclo de estudos: `scm delete --id 1`\n- Adicionar matéria ao ciclo de estudos: `scm add --name=\"Nome da matéria\" --max-study-hours 10`\n- Estudar uma matéria (add 1 hora): `scm study --id 1`\n- Remover matéria do ciclo de estudos: `scm remove --id 1`\n- Visualizar progresso do ciclo de estudos: `scm view`\n\n## ✨ Detalhes\n\nUm 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.\n\n\u003e 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.\n\n## ⚠️ Requisitos\n\n### Funcionais\n\n- [x] Usuários devem poder registrar novos ciclos de estudos\n- [x] O sistema deve listar todos os ciclos de estudos criados pelo usuário\n- [x] O sistema deve registrar os ciclos de estudos com títulos únicos\n- [x] O sistema deve permitir que o usuário selecione um dos ciclos de estudos criados\n- [x] O sistema deve permitir a exclusão de ciclos de estudos mediante o seu ID\n- [x] Usuários devem poder selcionar ciclos de estudos mediante seus IDs\n- [x] Usuários devem poder adicionar novas matérias aos ciclos de estudos\n- [x] 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\n- [x] Usuários devem poder remover matérias dos ciclos de estudos\n- [x] O sistema deve registrar as horas estudadas de cada matéria do ciclo de estudos selecionado\n\n\n### Não funcionais\n\n- [x] Deve ser usado banco de dados SQLite\n- [ ] O projeto deve ser testado\n- [x] Deve haver um banco de dados dedicado para testes\n- [x] Deve haver uma documentação detalhada dos comandods do projeto\n- [x] O sistema deve possuir um comando de help interno\n- [x] O projeto deve ser dockerizado\n- [x] O projeto deve conter um Makefile com comandos de build e clean para melhor experiência de desenvolvimento\n\n\n### Regras de negócio\n\n- [x] 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\n- [x] 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\n- [x] Ao reiniciar um ciclo de estudos o sistema deverá somar mais um na contagem de ciclos concluídos\n- [x] O sistema deve atualizar somente os dados do ciclo de estudos selecionado\n- [x] O sistema deve impedir os usuários de selecionarem mais de um ciclo de estudos por vez\n- [x] O sistema deve impedir os usuários atualizarem as horas estudadas de matérias fora do ciclo de estudos selecionado\n- [x] O sistema deve exigir que os usuários selecionem um ciclo de estudos antes de gerenciar as horas estudadas das matérias\n- [x] O sistema deve bloquear a inserção de matérias com nomes duplicados em um ciclo de estudos\n- [x] 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\n- [x] O sistema deve ser transparente, informando o usuário de erros que acontecerem durante a execução de tarefas\n\n\n## ⚒️ Infraestrutura\n\n### Banco de dados\n\n```sql\nCREATE TABLE IF NOT EXISTS study_cycles (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n  title TEXT NOT NULL UNIQUE,\n  completed_times INTEGER NOT NULL,\n  selected BOOLEAN NOT NULL,\n  created_at TIMESTAMP NOT NULL,\n  updated_at TIMESTAMP\n);\n\nCREATE TABLE IF NOT EXISTS study_cycle_subjects (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n  study_cycle_id INTEGER NOT NULL,\n  name TEXT NOT NULL,\n  max_study_hours INTEGER NOT NULL,\n  user_studied_hours INTEGER NOT NULL,\n  completed_times INTEGER NOT NULL,\n  added_at TIMESTAMP NOT NULL,\n  updated_at TIMESTAMP,\n\n  FOREIGN KEY (study_cycle_id) REFERENCES study_cycles(id)\n  UNIQUE (study_cycle_id, name)\n);\n```\n\n### 🖿 Estrutura de pastas\n\n```markdown\n- bin/\n- cmd/\n  - scm/\n    - main.go\n- internal/\n    - commands/\n    - databasa/\n    - store/\n      - sqlite/\n        - migrations/\n        - repositorie/\n\t- test_database.db\n\t- database.db\n- public\n  - images/\n  - videos/\nMakefile\nDockerfile\nREADME.md\nLICENSE\ngo.mod\ngo.sum\n```\n\n### 🖥️ Tecnologias\n\n| Tech             | Utilidade                                                    | Versão |\n| :--------------- | :----------------------------------------------------------- | :----- |\n| Golang           | Linguagem de programação usada                               | 1.23 |\n| Neovim           | Editor de código via terminal                                | 10     |\n| sqlite3         | Driver do banco de dados SQLite                                              | 1.14.23  |\n\n## 🌐 Implementações futuras\n\n- Criação de um ciclo de estudos do zero;\n- Exportação do ciclo de estudos como imagem;\n- Exportação do ciclo de estudos como PDF;\n- Comando de limpeza do banco de dados;\n- Comando de backup do banco de dados;\n- Sugestão de comandos quando o usuário digitar um comando errado;\n\n## ✏️ O que eu aprendi com este projeto\n\n- Como trabalhar com SQLite e Golang;\n- Como transformar dados vindos de um banco de dados relacional para uma variável ou slice de um tipo específico em Golang;\n- Como imprimir dados de forma tabular em Golang;\n- Como criar comandos para CLI em Golang;\n- Como fazer uma CLI em Golang;\n- Como formatar strings em Golang;\n- Como ordenar um slice de structs em Golang;\n- Como dockerizar uma aplicação Golang;\n- Como obter o diretório padrão do projeto em Golang;\n- Como organizar comandos e flags individuais de comandos em Golang;\n- Como trabalhar com Makefiles em Golang;\n- Como rodar uma aplicação Golang em ambiente Windows;\n\n## Meus contatos\n\n- Instagram: https://www.instagram.com/antonioalmeida2003/\n- LinkedIn: https://www.linkedin.com/in/antonio-mauricio-4645832b3/\n- Email: antonioimportant@gmail.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdedo-finger2%2Fstudy-cycle-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdedo-finger2%2Fstudy-cycle-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdedo-finger2%2Fstudy-cycle-manager/lists"}