# Tasks remake
Existing models
- Tasks
string "title"
bigint "author_id"
string "assignee_type"
bigint "assignee_id"
integer "status", default: 0
integer "priority", default: 0
datetime "due_date"
integer "frequency_type"
integer "termination_type"
datetime "termination_at"
integer "termination_count"
datetime "start_at"
datetime "last_completed_date"
- Comments (Polymorphic)
bigint "author_id", null: false
string "commentable_type"
bigint "commentable_id"



### New Task Models
- Board
- name:string
- privacy:integer[enum] (invite_only, anyone_join, group_join)
- label1_name:string
- Label
- board_id:integer (Example: 123)
- label_handle:integer[enum] (label1, label2, label3)
- name:string (Example: GoVSpace3)
- color:string (Example: #00FF5A)
- Section
- board_id:integer
- name:string
- position:integer
- Collaborators
- board_id:integer
- user_id:integer
- notification_status_update:boolean
- notification_conversation:boolean
- notification_task_added:boolean
- role:integer[enum] (owner)
### Update existing models
**Tasks**
- label1_id:integer (optional)
- board_id:integer (initially, optional)
- section_id:integer (optional)
- completed_at:datetime (optional)
- completed_by_id:integer (optional)
- position:integer
## Questions
- Can a task belong in multiple boards?
- Steve to answer
- How insane should permissions be on a board?
- Owner (Can do everything update board, labels, sections etc)
- Viewer (Maybe can only comment on a task?)
- Editor (can create tasks, comments, etc)
- Steve to answer
- Review + Redo how automatic tasks work (bandwidth overages)
## Plan of attack
### Remove status from `Task` model
- [x] Write a data migration to backfill existing tasks with last_completed_date
- [x] Deploy changes to production
- [x] Remove status column
- [x] Remove code that relies on status column
- [x] Deploy changes to production
### Adding the concept of a `Board`
- [x] Add new Board model
- [x] Add board create, update and archive (Maybe hide this in UI for now)
- [x] Add collaborators
- [x] Write a data migration to move all tasks to a board
- [x] Create new boards required
- [x] Assign tasks to appropriate board
- [x] Add board dropdown to task create and update
### Adding support for a `Section` within a `Board`
- [x] Add new Section model
- [x] Add ability to create, update and remove a section
- [x] Allow sections to be ordered on a board (drag n drop)
- [x] Add section column to tasks
- [x] Ensure tasks without a section assigned appear at the top of the board
- [x] Add section field to tasks
- [x] Drag + Drop Tasks between sections
### Addding `Label` to `Tasks`
- [x] Add new Label model
- [x] Add ability to configure a labels names and colors per board
### Nice touch-ups
- [x] Go over all breadcrumbs and cancel links
- [x] Ability to edit task to empty section
- [x] Remove private_board from dropdowns
Still to do go live
- [x] Add Labels to Tasks
- [ ] Task show when scrolled down page
- [x] Remove polymorphic task assignee maybe?? Should just be people on the board
- [x] Invite People (remove self from list)
- [x] Permissions on everything (sort of done views)
- [x] Delete section + unassign tasks
- [x] Emails
- [x] Confirm reoccuring hasn't broken
- [x] Searching tasks
- [x] Check automated task creation (bandwidth overage/ssl monitor) works
- [x] Show completed tasks
Nice Haves
- [ ] icon to labels
- [ ] Real time updating
- [ ] Character counter on task subjects as long subjects look shit
### Add followers to tasks
A task should only be assigned to an individual to prevent nobody being responsible.
However allow followers so that all notifications can be triggered to that person.
- Allow different users to be followers of a task
- @mention in a comment or the task description should automatically add the person as a follower
### Nice to haves
- Automatic Testing using RSpec