Skip to content

Repository files navigation

Task Manager

Uma aplicação web fullstack desenvolvida em Ruby on Rails para gerenciamento de tarefas organizadas por categorias, com autenticação de usuários via Devise.


Sumário


Sobre o Projeto

O Task Manager permite que usuários autenticados organizem suas tarefas em categorias customizadas. Cada tarefa possui título, descrição, prioridade (baixa, média, alta, altíssima), data de vencimento e status (pendente/concluída). Os dados são completamente isolados por usuário.


Funcionalidades

  • Cadastro, login e gerenciamento de sessão (Devise)
  • CRUD completo de Categorias
  • CRUD completo de Tarefas aninhadas por categoria
  • Atualização de status da tarefa em tempo real via Turbo Streams (sem reload de página)
  • Isolamento de dados por usuário — nenhum usuário acessa dados de outro
  • Validações de modelo com feedback de erros na interface
  • Interface responsiva com Tailwind CSS
  • Tradução em pt-BR

Tech Stack

Camada Tecnologia
Linguagem Ruby 3.4.9
Framework Rails 8.1.3
Banco de dados SQLite3
Autenticação Devise
Frontend ERB + Tailwind CSS 4
JavaScript Hotwire (Turbo + Stimulus)
Servidor Puma

Modelagem de Dados

User (1) ——< (N) Category (1) ——< (N) Task

Tabelas

users

Coluna Tipo Descrição
email string Único, obrigatório
encrypted_password string Gerenciado pelo Devise

categories

Coluna Tipo Descrição
title string 5–20 chars, único por usuário
description string Máximo 100 chars
user_id integer FK → users (NOT NULL)

tasks

Coluna Tipo Descrição
title string 2–30 chars
description string Máximo 140 chars
status integer Enum: pending (0), completed (1)
priority integer Enum: low (0), medium (1), high (2), highest (3)
due_date date Data de vencimento
category_id integer FK → categories (NOT NULL)

Associações

User        has_many :categories
            has_many :tasks, through: :categories

Category    belongs_to :user
            has_many :tasks, dependent: :destroy

Task        belongs_to :category

Validações

  • Category#title — presença, 5–20 chars, unicidade com escopo por user_id (case-insensitive)
  • Category#description — presença, máximo 100 chars
  • Task#title — presença, 2–30 chars
  • Task#description — presença, máximo 140 chars
  • Task#priority — presença
  • Task#due_date — não pode ser no passado (validação customizada)

Arquitetura e Decisões Técnicas

MVC e controllers finos

Toda regra de negócio reside nos models. Os controllers delegam para o model e lidam apenas com fluxo HTTP. O ApplicationController centraliza a autenticação global via before_action :authenticate_user!.

Isolamento de dados

O CategoriesController carrega categorias sempre via current_user.categories, nunca diretamente pelo id. O TasksController encadeia a busca: category → task, garantindo que nenhum usuário acesse recursos de outro.

Turbo Streams

A atualização de status de uma tarefa (pendente ↔ concluída) usa format.turbo_stream no controller e um template update.turbo_stream.erb que atualiza 4 fragmentos do DOM sem reload — lista de tarefas, badge de pendentes, cabeçalho e detalhes da tarefa.

Enums

Task usa enums do Rails para status e priority, garantindo type-safety no banco e métodos de conveniência (task.completed?, task.high?) nos models.


Pré-requisitos

  • Ruby 3.4.9
  • Bundler
  • SQLite3
  • Node.js (para Tailwind CSS)

Instalação e Execução

# 1. Instalar dependências Ruby
bundle install

# 2. Instalar dependências Node
npm install

# 3. Criar e migrar o banco de dados
bin/rails db:create db:migrate

# 4. (Opcional) Popular com dados iniciais
bin/rails db:seed

# 5. Iniciar o servidor de desenvolvimento
bin/dev

Acesse em http://localhost:3000.


Rotas

Método Path Ação
GET / Listagem de categorias
GET/POST /categories Listar / Criar categoria
GET /categories/:id Exibir categoria com tarefas
GET/PATCH/DELETE /categories/:id/edit Editar / Atualizar / Deletar categoria
GET/POST /categories/:category_id/tasks/new Nova tarefa
GET /categories/:category_id/tasks/:id Exibir tarefa
PATCH /categories/:category_id/tasks/:id Atualizar tarefa (suporta Turbo Stream)
DELETE /categories/:category_id/tasks/:id Deletar tarefa
GET/POST /users/sign_in Login
GET/POST /users/sign_up Cadastro
DELETE /users/sign_out Logout

Todas as rotas de categorias e tarefas requerem autenticação. Usuários não autenticados são redirecionados para o login.


Estrutura do Projeto

app/
├── controllers/
│   ├── application_controller.rb   # authenticate_user! global
│   ├── categories_controller.rb    # CRUD scoped por usuário
│   └── tasks_controller.rb         # CRUD aninhado, Turbo Stream
├── models/
│   ├── user.rb                     # Devise + associações
│   ├── category.rb                 # Validações, belongs_to :user
│   └── task.rb                     # Enums, validação customizada de due_date
├── views/
│   ├── categories/                 # Index, show, new, edit, _form, _category
│   ├── tasks/                      # Show, new, edit, _form, _task, _tasks_sections,
│   │                               #   _show_header, _show_details, turbo_stream, jbuilder
│   ├── shared/                     # _breadcrumb, _glass_container, _error_alert, _success_notice
│   └── devise/                     # Views customizadas de autenticação
├── helpers/
│   └── tasks_helper.rb             # Badge CSS por prioridade/status/due_date
└── javascript/
    └── controllers/
        └── checkbox_submit_controller.js  # Auto-submit ao marcar checkbox
config/
├── routes.rb
└── locales/                        # pt-BR (rails-i18n + devise-i18n)
db/
├── schema.rb
└── migrate/

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages