go-commons

module
v1.4.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 26, 2026 License: Apache-2.0

README

go-commons

Shared Go utilities and models used by the Financial Control services.

Module

module github.com/TiB-Software/go-commons

Installation

go get github.com/TiB-Software/go-commons@latest

If you are using this module inside the same monorepo, prefer go.work to link local modules.

Packages

  • commonsmodels: generic response and pagination models.
  • errors: API error contracts and common error factories.
  • utils: helpers for HTTP requests, query parsing, response writing, date handling, pgx conversions, and generic utilities.
  • constants: shared constants used by helpers and error builders.
  • validator: small interface used by request decoding helpers.

Main Types and Helpers

commonsmodels
  • PaginatedResponse[T]
  • ResponseList[T]
  • ResponseSuccess
  • PaginatedParams
  • PaginatedParamsWithDateRange
  • PaginatedParamsWithMonthYear
  • NewResponseSuccess()
errors
  • ApiError interface
  • ApiErrorItem
  • ErrorResponse
  • NewApiError(status, message)
  • NewApiErrorWithErrors(status, messages)
  • Common factories:
    • UserNotFound
    • UserIDInvalid
    • InvalidDecodeJsonError
    • InvalidFieldError
    • BadRequestError
    • NotFoundError
    • InternalServerError
utils
  • HTTP request/response:
    • DecodeJson[T]
    • DecodeValidJson[T]
    • SendResponse[T]
    • SendErrorResponse
  • Query and URL parsing:
    • GetQueryPage
    • GetQueryLimit
    • GetQueryMonthAndYear
    • GetQueryDatesIfHas
    • IDFromURLParam
    • GetUserIDFromContext
  • Date and pagination:
    • NormalizeDay
    • CreateDateWithNormalizedDay
    • CalculateOffset
  • Generic and conversion helpers:
    • FindIf
    • FindIndex
    • IsBlank
    • StringToInt64
    • PgTypeUUIDToUUID
    • UUIDToPgTypeUUID
    • Float64ToNumeric
    • NumericToFloat64
    • TimeToPgTimestamptz

Quick Usage

Build a standard paginated response
import "github.com/TiB-Software/go-commons/commonsmodels"

func makeResponse(items []string) commonsmodels.PaginatedResponse[string] {
		return commonsmodels.PaginatedResponse[string]{
				Items:     items,
				PageCount: 1,
				Page:      1,
		}
}
Return API errors in handlers
import (
		"net/http"

		"github.com/TiB-Software/go-commons/errors"
)

func invalidPayload() errors.ApiError {
		return errors.NewApiError(
				http.StatusBadRequest,
				errors.InvalidDecodeJsonError("invalid request body"),
		)
}
Decode and validate requests from Gin context
import (
		"github.com/gin-gonic/gin"

		"github.com/TiB-Software/go-commons/utils"
)

func readRequest(ctx *gin.Context) {
		req, apiErr := utils.DecodeValidJson[MyRequest](ctx)
		if apiErr != nil {
				utils.SendErrorResponse(ctx, apiErr)
				return
		}

		utils.SendResponse(ctx, req, 200)
}

Development

Run tests:

go test ./...

Run tests with coverage:

go test ./... -coverprofile=coverage.out
go tool cover -func=coverage.out

Versioning and Release

  • Use semantic version tags with v prefix (v1.0.0, v1.0.1, ...).
  • Push tags to make versions resolvable by go get and go mod tidy:
git tag vX.Y.Z
git push origin vX.Y.Z

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL