diff options
| author | Grant Ammons <gammons@gmail.com> | 2016-06-12 09:49:38 -0400 |
|---|---|---|
| committer | Grant Ammons <gammons@gmail.com> | 2016-06-12 09:49:38 -0400 |
| commit | d8d4510d2faebff633d6e98fa4812f2461ae85b6 (patch) | |
| tree | be474ce669a994767867f2224d8cdd4103271aee /todolist/file_store.go | |
| parent | fd9121e03c18c7dfd947e98ea4cec545f110a804 (diff) | |
Refactor todolist stuff out of the file store implementation
Diffstat (limited to 'todolist/file_store.go')
| -rw-r--r-- | todolist/file_store.go | 114 |
1 files changed, 9 insertions, 105 deletions
diff --git a/todolist/file_store.go b/todolist/file_store.go index faf235f..61e6e7c 100644 --- a/todolist/file_store.go +++ b/todolist/file_store.go @@ -5,12 +5,10 @@ import ( "fmt" "io/ioutil" "os" - "sort" ) type FileStore struct { FileLocation string - Data []*Todo Loaded bool } @@ -18,80 +16,7 @@ func NewFileStore() *FileStore { return &FileStore{FileLocation: ".todos.json", Loaded: false} } -func (f *FileStore) Add(todo *Todo) { - f.Load() - todo.Id = f.NextId() - f.Data = append(f.Data, todo) -} - -func (f *FileStore) FindById(id int) *Todo { - f.Load() - for _, todo := range f.Data { - if todo.Id == id { - return todo - } - } - return nil -} - -func (f *FileStore) Delete(id int) { - f.Load() - i := -1 - for index, todo := range f.Data { - if todo.Id == id { - i = index - } - } - - f.Data = append(f.Data[:i], f.Data[i+1:]...) -} - -func (f *FileStore) Complete(id int) { - f.Load() - todo := f.FindById(id) - todo.Completed = true - f.Delete(id) - f.Data = append(f.Data, todo) -} - -func (f *FileStore) Uncomplete(id int) { - f.Load() - todo := f.FindById(id) - todo.Completed = false - f.Delete(id) - f.Data = append(f.Data, todo) -} - -func (f *FileStore) Archive(id int) { - f.Load() - todo := f.FindById(id) - todo.Archived = true - f.Delete(id) - f.Data = append(f.Data, todo) -} - -func (f *FileStore) Unarchive(id int) { - f.Load() - todo := f.FindById(id) - todo.Archived = false - f.Delete(id) - f.Data = append(f.Data, todo) -} - -func (f *FileStore) IndexOf(todoToFind *Todo) int { - for i, todo := range f.Data { - if todo.Id == todoToFind.Id { - return i - } - } - return -1 -} - -func (f *FileStore) Load() { - if f.Loaded { - return - } - +func (f *FileStore) Load() []*Todo { data, err := ioutil.ReadFile(f.FileLocation) if err != nil { fmt.Println("No todo file found!") @@ -99,12 +24,15 @@ func (f *FileStore) Load() { os.Exit(0) } - jerr := json.Unmarshal(data, &f.Data) + var todos []*Todo + jerr := json.Unmarshal(data, &todos) if jerr != nil { fmt.Println("Error reading json data", jerr) os.Exit(1) } f.Loaded = true + + return todos } func (f *FileStore) Initialize() { @@ -115,38 +43,14 @@ func (f *FileStore) Initialize() { } if err := ioutil.WriteFile(f.FileLocation, []byte("[]"), 0644); err != nil { fmt.Println("Error writing json file", err) + os.Exit(1) } + fmt.Println("Todo repo initialized.") } -func (f *FileStore) Save() { - data, _ := json.Marshal(f.Data) +func (f *FileStore) Save(todos []*Todo) { + data, _ := json.Marshal(todos) if err := ioutil.WriteFile(f.FileLocation, []byte(data), 0644); err != nil { fmt.Println("Error writing json file", err) } } - -type ByDate []*Todo - -func (a ByDate) Len() int { return len(a) } -func (a ByDate) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a ByDate) Less(i, j int) bool { - t1Due := a[i].CalculateDueTime() - t2Due := a[j].CalculateDueTime() - return t1Due.Before(t2Due) -} - -func (f *FileStore) Todos() []*Todo { - f.Load() - sort.Sort(ByDate(f.Data)) - return f.Data -} - -func (f *FileStore) NextId() int { - maxId := 0 - for _, todo := range f.Data { - if todo.Id > maxId { - maxId = todo.Id - } - } - return maxId + 1 -} |
