server

package module
v0.0.3 Latest Latest
Warning

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

Go to latest
Published: Apr 23, 2024 License: Apache-2.0 Imports: 11 Imported by: 0

README

Go Reference Bitbucket Pipelines

Test

go test ./... -p=1 -count=1 -v

Integration in another project

go get bitbucket.org/amotus/rest-server

Usage

package handler

import (
    "actions-service/app/model"
    "log"
    "net/http"

    "bitbucket.org/amotus/rest-server"

    "github.com/go-chi/render"
    "gorm.io/gorm"
)

type ActionHandler struct {
    db *gorm.DB
}

func NewActionHandler(db *gorm.DB) *ActionHandler {
    return &ActionHandler{db: db}
}

func (a *ActionHandler) List(w http.ResponseWriter, r *http.Request) {

    // gorm models
    var actions []model.Action

    result, pager := server.NewQuery(r.URL.Query()). // Parse query parameters to get a filters object
        Apply(a.db). // Apply filters to the database query
        Paginate(&actions) //Paginate the result, this call is required to execute the query

    // result is a *gorm.DB object
    if result.Error != nil {
        server.RenderNotFound(w, r)
        return
    }

    // format the response with the Fundamentum API standard 
    if errRender := render.Render(w, r, &server.SuccessResponse{StatusText: "success", Data: actions, Pager: pager}); errRender != nil {
        log.Println("Error render Success response:", errRender)
    }
}

Fundamentum API Standard

https://dimonoff.atlassian.net/wiki/spaces/F2/pages/412155960/API+Standard

TODO

  • Add Batch Query support
  • Cleanup Response helpers

License

Licensed under Apache License, Version 2.0 LICENSE.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RenderBadRequest

func RenderBadRequest(w http.ResponseWriter, r *http.Request, err error)

func RenderNotFound

func RenderNotFound(w http.ResponseWriter, r *http.Request)

func RenderSuccess

func RenderSuccess(w http.ResponseWriter, r *http.Request, response *SuccessResponse)

func RenderUnprocessableEntity

func RenderUnprocessableEntity(w http.ResponseWriter, r *http.Request, err error)

Types

type ErrResponse

type ErrResponse struct {
	Err            error `json:"-"` // low-level runtime error
	HTTPStatusCode int   `json:"-"` // http response status code

	StatusText string `json:"status"`          // user-level status message
	AppCode    int64  `json:"code,omitempty"`  // application-specific error code
	ErrorText  string `json:"error,omitempty"` // application-level error message, for debugging
}

func (*ErrResponse) Render

func (e *ErrResponse) Render(w http.ResponseWriter, r *http.Request) error

type Query

type Query struct {
	// contains filtered or unexported fields
}

func NewQuery

func NewQuery(v url.Values) *Query

func (*Query) Apply

func (q *Query) Apply(db *gorm.DB) *Query

func (*Query) Get

func (q *Query) Get() *gorm.DB

func (*Query) Paginate

func (q *Query) Paginate(dest interface{}) (*gorm.DB, rest.Pager)

type SuccessResponse

type SuccessResponse struct {
	StatusText string      `json:"status"`
	Data       interface{} `json:"data,omitempty"`
	Pager      interface{} `json:"pager,omitempty"`
}

func (*SuccessResponse) Render

Directories

Path Synopsis
pkg

Jump to

Keyboard shortcuts

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