diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 44363d51..2722d144 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -39,7 +39,7 @@ jobs: - name: Build web app (required for tests) run: make web - name: Run tests, formatting, vetting and linting - run: make check + run: make checkv - name: Run coverage run: make coverage - name: Upload coverage to codecov.io diff --git a/Makefile b/Makefile index 2da5333e..b6102814 100644 --- a/Makefile +++ b/Makefile @@ -265,6 +265,8 @@ cli-build-results: check: test web-fmt-check fmt-check vet web-lint lint staticcheck +checkv: testv web-fmt-check fmt-check vet web-lint lint staticcheck + test: .PHONY go test $(shell go list ./... | grep -vE 'ntfy/(test|examples|tools)') diff --git a/model/model.go b/model/model.go index 8431554d..58e480d7 100644 --- a/model/model.go +++ b/model/model.go @@ -19,10 +19,10 @@ const ( PollRequestEvent = "poll_request" ) -const ( - MessageIDLength = 12 -) +// MessageIDLength is the length of a randomly generated message ID +const MessageIDLength = 12 +// Errors for message operations var ( ErrUnexpectedMessageType = errors.New("unexpected message type") ErrMessageNotFound = errors.New("message not found") @@ -197,6 +197,7 @@ func (t SinceMarker) ID() string { return t.id } +// Common SinceMarker values for subscribing to messages var ( SinceAllMessages = SinceMarker{time.Unix(0, 0), ""} SinceNoMessages = SinceMarker{time.Unix(1, 0), ""} diff --git a/server/types.go b/server/types.go index 6b5d9f5f..5e6ba2f3 100644 --- a/server/types.go +++ b/server/types.go @@ -19,13 +19,16 @@ const ( messageIDLength = model.MessageIDLength ) -// Sentinel values and errors +// SinceMarker aliases var ( - sinceAllMessages = model.SinceAllMessages - sinceNoMessages = model.SinceNoMessages - sinceLatestMessage = model.SinceLatestMessage - errUnexpectedMessageType = model.ErrUnexpectedMessageType - errMessageNotFound = model.ErrMessageNotFound + sinceAllMessages = model.SinceAllMessages + sinceNoMessages = model.SinceNoMessages + sinceLatestMessage = model.SinceLatestMessage +) + +// Error aliases +var ( + errMessageNotFound = model.ErrMessageNotFound ) // Constructors and helpers diff --git a/user/util.go b/user/util.go index 170b7717..16f6cc09 100644 --- a/user/util.go +++ b/user/util.go @@ -94,38 +94,6 @@ func nullInt64(v int64) sql.NullInt64 { return sql.NullInt64{Int64: v, Valid: true} } -// execTx executes a function in a transaction. If the function returns an error, the transaction is rolled back. -func execTx(db *sql.DB, f func(tx *sql.Tx) error) error { - tx, err := db.Begin() - if err != nil { - return err - } - defer tx.Rollback() - if err := f(tx); err != nil { - return err - } - return tx.Commit() -} - -// queryTx executes a function in a transaction and returns the result. If the function -// returns an error, the transaction is rolled back. -func queryTx[T any](db *sql.DB, f func(tx *sql.Tx) (T, error)) (T, error) { - tx, err := db.Begin() - if err != nil { - var zero T - return zero, err - } - defer tx.Rollback() - t, err := f(tx) - if err != nil { - return t, err - } - if err := tx.Commit(); err != nil { - return t, err - } - return t, nil -} - // toSQLWildcard converts a wildcard string to a SQL wildcard string. It only allows '*' as wildcards, // and escapes '_', assuming '\' as escape character. func toSQLWildcard(s string) string {