From cf7c61637f8b3224abe935ea7bc15c4e012776f0 Mon Sep 17 00:00:00 2001 From: Dan Anglin Date: Sat, 22 Apr 2023 06:19:50 +0100 Subject: [PATCH] chore: update project - update dependencies. - a little bit of project restructuring. - update test to make sure they pass. - move magefile.go to magefiles directory. --- go.mod | 4 ++-- go.sum | 4 ++-- internal/board/args.go | 17 ----------------- internal/board/board.go | 18 +++++++++++++++++- internal/board/board_test.go | 27 ++++++++++++++++++++++++--- internal/database/database.go | 6 +++--- internal/ui/app.go | 2 +- magefile.go => magefiles/magefile.go | 1 - main | Bin 4821177 -> 0 bytes 9 files changed, 49 insertions(+), 30 deletions(-) delete mode 100644 internal/board/args.go rename magefile.go => magefiles/magefile.go (98%) delete mode 100755 main diff --git a/go.mod b/go.mod index 28f3143..54142d5 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,11 @@ module codeflow.dananglin.me.uk/apollo/canal -go 1.19 +go 1.20 require ( github.com/gdamore/tcell/v2 v2.6.0 github.com/magefile/mage v1.14.0 - github.com/rivo/tview v0.0.0-20230226195229-47e7db7885b4 + github.com/rivo/tview v0.0.0-20230320095235-84f9c0ff9de8 go.etcd.io/bbolt v1.3.7 ) diff --git a/go.sum b/go.sum index 9f8a0bc..9ebc3c1 100644 --- a/go.sum +++ b/go.sum @@ -10,8 +10,8 @@ github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXq github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/rivo/tview v0.0.0-20230226195229-47e7db7885b4 h1:tj6c++jeZxE3+Z+8+3/HOY/KpqaVt1tZ8i6sNRmjQ1M= -github.com/rivo/tview v0.0.0-20230226195229-47e7db7885b4/go.mod h1:nVwGv4MP47T0jvlk7KuTTjjuSmrGO4JF0iaiNt4bufE= +github.com/rivo/tview v0.0.0-20230320095235-84f9c0ff9de8 h1:wthS/rREJ6WlALtQ3Ysp4Cty/qiY2LNslV90U71bNg0= +github.com/rivo/tview v0.0.0-20230320095235-84f9c0ff9de8/go.mod h1:nVwGv4MP47T0jvlk7KuTTjjuSmrGO4JF0iaiNt4bufE= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= diff --git a/internal/board/args.go b/internal/board/args.go deleted file mode 100644 index 342cd1f..0000000 --- a/internal/board/args.go +++ /dev/null @@ -1,17 +0,0 @@ -package board - -type CardArgs struct { - NewTitle string - NewContent string -} - -type UpdateCardArgs struct { - CardID int - CardArgs -} - -type UpdateCardStatusArgs struct { - CardID int - OldStatusID int - NewStatusID int -} diff --git a/internal/board/board.go b/internal/board/board.go index 36113bb..d1f6415 100644 --- a/internal/board/board.go +++ b/internal/board/board.go @@ -87,6 +87,11 @@ func DeleteStatus(db *bolt.DB) error { return nil } +type CardArgs struct { + NewTitle string + NewContent string +} + // CreateCard creates a card in the database. func CreateCard(db *bolt.DB, args CardArgs) error { statusList, err := ReadStatusList(db) @@ -167,7 +172,12 @@ func ReadCardList(db *bolt.DB, ids []int) ([]Card, error) { return cards, nil } -// UpdateCard modifies an existing card and saves the modification to the database. +type UpdateCardArgs struct { + CardID int + CardArgs +} + +// UpdateCard modifies an existing card in the database. func UpdateCard(db *bolt.DB, args UpdateCardArgs) error { card, err := ReadCard(db, args.CardID) if err != nil { @@ -189,6 +199,12 @@ func UpdateCard(db *bolt.DB, args UpdateCardArgs) error { return nil } +type UpdateCardStatusArgs struct { + CardID int + OldStatusID int + NewStatusID int +} + // UpdateCardStatus moves a card between statuses. // TODO: finish implementation. func UpdateCardStatus(db *bolt.DB, args UpdateCardStatusArgs) error { diff --git a/internal/board/board_test.go b/internal/board/board_test.go index 50c4852..7c494c8 100644 --- a/internal/board/board_test.go +++ b/internal/board/board_test.go @@ -51,7 +51,12 @@ func TestCardLifecycle(t *testing.T) { func testCreateCard(t *testing.T, db *bolt.DB, title, content string, wantID int) { t.Helper() - if err := board.CreateCard(db, title, content); err != nil { + args := board.CardArgs{ + NewTitle: title, + NewContent: content, + } + + if err := board.CreateCard(db, args); err != nil { t.Fatalf("Unable to create the test card, %s.", err) } @@ -101,7 +106,15 @@ func testReadCard(t *testing.T, db *bolt.DB, cardID int, wantTitle, wantContent func testUpdateCard(t *testing.T, db *bolt.DB, cardID int, newTitle, newContent string) { t.Helper() - if err := board.UpdateCard(db, cardID, newTitle, newContent); err != nil { + args := board.UpdateCardArgs{ + CardID: cardID, + CardArgs: board.CardArgs{ + NewTitle: newTitle, + NewContent: newContent, + }, + } + + if err := board.UpdateCard(db, args); err != nil { t.Fatalf("Unable to update the test card, %s", err) } @@ -126,7 +139,15 @@ func testUpdateCard(t *testing.T, db *bolt.DB, cardID int, newTitle, newContent func testUpdateCardContent(t *testing.T, db *bolt.DB, cardID int, expectedTitle, newContent string) { t.Helper() - if err := board.UpdateCard(db, cardID, "", newContent); err != nil { + args := board.UpdateCardArgs{ + CardID: cardID, + CardArgs: board.CardArgs{ + NewTitle: "", + NewContent: newContent, + }, + } + + if err := board.UpdateCard(db, args); err != nil { t.Fatalf("Unable to update the test card, %s", err) } diff --git a/internal/database/database.go b/internal/database/database.go index 0b0503e..5c9a6d5 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -68,7 +68,7 @@ func Read(db *bolt.DB, bucketName string, id int) ([]byte, error) { return nil }); err != nil { - return []byte{}, fmt.Errorf("error while reading the Bolt item from the database, %w", err) + return nil, fmt.Errorf("error while reading the Bolt item from the database, %w", err) } return data, nil @@ -95,7 +95,7 @@ func ReadMany(db *bolt.DB, bucketName string, ids []int) ([][]byte, error) { return nil }) if err != nil { - return output, fmt.Errorf("error while retrieving the data from the database, %w", err) + return nil, fmt.Errorf("error while retrieving the data from the database, %w", err) } return output, nil @@ -125,7 +125,7 @@ func ReadAll(db *bolt.DB, bucketName string) ([][]byte, error) { return nil }) if err != nil { - return output, fmt.Errorf("error while loading statuses from the database, %w", err) + return nil, fmt.Errorf("error while loading statuses from the database, %w", err) } return output, nil diff --git a/internal/ui/app.go b/internal/ui/app.go index 635e68e..aba1b9b 100644 --- a/internal/ui/app.go +++ b/internal/ui/app.go @@ -147,7 +147,7 @@ func (a *App) newCard(title, content string) error { // TODO: Move 'Add' to the centre of the app // TODO: Customize list primitive or create a new one -// TODO: If customizing exisiing list primitive, wrap list around a column type. Add statusID to it. +// TODO: If customizing existing list primitive, wrap list around a column type. Add statusID to it. // TODO: Update card status (card ID, oldStatus, newStatus) //func viewCard() error { diff --git a/magefile.go b/magefiles/magefile.go similarity index 98% rename from magefile.go rename to magefiles/magefile.go index 6bc532a..ca28bdb 100644 --- a/magefile.go +++ b/magefiles/magefile.go @@ -1,5 +1,4 @@ //go:build mage -// +build mage package main diff --git a/main b/main deleted file mode 100755 index 0f7b70f9bf8488a64008b435056ec553b253d8bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4821177 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