Documentation
¶
Index ¶
- Constants
- Variables
- func ArrContains[T string | int | float32](arr []T, val T) bool
- func GenerateQueryComponenFromStruct(model interface{}, skips []string) (string, []interface{}, string)
- func GetDateNowStringWithTimezone() string
- func GetDateTimeNowStringWithFormat(layout string) string
- func GetDateTimeNowStringWithTimezone() string
- func GetStructKey(field reflect.StructField) string
- func GetStructValue(value reflect.Value) interface{}
- func GetTimeNowStringWithTimezone() string
- func GetTimeNowWithTimezone() time.Time
- func InitHandler(router http.Handler) http.Handler
- func MethodNotAllowedHandler(w http.ResponseWriter, r *http.Request)
- func PanicHandler(next http.Handler) http.Handler
- func ParseDate(dateStrInput string) (string, error)
- func ParseToDateOnly(date string) string
- func ParseToTimeOnly(t string) string
- func RegisterMiddleware[T any](app *App, key string, middlewareHandler T)
- func RouteNotFoundHandler(w http.ResponseWriter, r *http.Request)
- func WaitTermSig(ctx context.Context, handler func(context.Context) error) <-chan struct{}
- func WriteJson(w http.ResponseWriter, data interface{})
- type App
- func (app *App) AddController(ctrl Controller)
- func (app *App) AddControllers(ctrls Controllers)
- func (app *App) AddGlobalMiddleware(handlers ...func(http.Handler) http.Handler)
- func (app *App) AddScheduler(pattern string, handler cron.HandlerFunc)
- func (app *App) DB() database.ISQL
- func (app *App) Init()
- func (app *App) RegisterMiddlewareFunc(key string, middlewareHandler func(http.Handler) http.Handler)
- func (app *App) SSE() sse.Events
- func (app *App) SetVersion(version string)
- func (app *App) Start() error
- func (app *App) Trx() database.Transactions
- func (app *App) WrapScheduler(wrapper cron.Wrapper)
- func (app *App) WrapToApp(wrapper Wrapper)
- type Apps
- type Controller
- type ControllerConfig
- type ControllerImpl
- type Controllers
- type ErrorOption
- type Handler
- type HttpError
- func BadRequest(message, code string) *HttpError
- func Forbidden(message, code string) *HttpError
- func InternalServerError(message, code string) *HttpError
- func MethodNotAllowed(message, code string) *HttpError
- func NewErr(opts ...ErrorOption) *HttpError
- func NotFound(message, code string) *HttpError
- func TooManyRequest(message, code string) *HttpError
- func Unauthorized(message, code string) *HttpError
- func UnprocessableEntity(message, code string) *HttpError
- type Map
- type Options
- func ReadTimeout(readTimeout int) Options
- func WithAPITimeout(apiTimeout int) Options
- func WithAppPort(port int) Options
- func WithCronJob(timezone ...string) Options
- func WithGlobalMiddleware(handlers ...func(http.Handler) http.Handler) Options
- func WithNewRelic() Options
- func WithPprof(enabled bool) Options
- func WithSSE() Options
- func WithTimezone(timezone string) Options
- func WriteTimeout(writeTimeout int) Options
- type Request
- type Response
- func (resp *Response) Send(w http.ResponseWriter)
- func (resp *Response) SentNotif(ctx contextpkg.Context, err *HttpError, r *http.Request, traceId string)
- func (resp *Response) SetCustomHeader(key, value string) *Response
- func (resp *Response) SetData(data any, isPaginate ...bool) *Response
- func (resp *Response) SetError(err error) *Response
- func (resp *Response) SetFileDownload(data []byte, fileName string, contentType string) *Response
- func (resp *Response) SetHTTPError(err *HttpError) *Response
- func (resp *Response) SetMessage(msg string) *Response
- func (resp *Response) SetStatusCode(statusCode int) *Response
- type ResponseRecorder
- type Route
- type RouteOption
- type StringMap
- type ValidationError
- type Wrapper
- type WrittenResponseWriter
Constants ¶
const ( DateFormat = "2006-01-02" TimeFormat = "15:04:05" )
Variables ¶
var TimezoneLocation *time.Location
Functions ¶
func GetDateNowStringWithTimezone ¶ added in v2.24.0
func GetDateNowStringWithTimezone() string
func GetDateTimeNowStringWithFormat ¶ added in v2.24.0
func GetDateTimeNowStringWithTimezone ¶ added in v2.24.0
func GetDateTimeNowStringWithTimezone() string
func GetStructKey ¶
func GetStructKey(field reflect.StructField) string
func GetStructValue ¶
func GetTimeNowStringWithTimezone ¶ added in v2.24.0
func GetTimeNowStringWithTimezone() string
func GetTimeNowWithTimezone ¶ added in v2.24.0
func MethodNotAllowedHandler ¶
func MethodNotAllowedHandler(w http.ResponseWriter, r *http.Request)
func ParseDate ¶ added in v2.24.0
ParseDate takes a date string and tries to parse it into the standard format "YYYY-MM-DD".
func ParseToDateOnly ¶ added in v2.24.0
func ParseToTimeOnly ¶ added in v2.24.0
func RegisterMiddleware ¶ added in v2.40.0
func RouteNotFoundHandler ¶
func RouteNotFoundHandler(w http.ResponseWriter, r *http.Request)
func WaitTermSig ¶ added in v2.36.0
func WriteJson ¶
func WriteJson(w http.ResponseWriter, data interface{})
Types ¶
type App ¶
type App struct {
Http *chi.Mux
*server.Config
TotalEndpoints int
// contains filtered or unexported fields
}
func (*App) AddController ¶
func (app *App) AddController(ctrl Controller)
func (*App) AddControllers ¶ added in v2.19.0
func (app *App) AddControllers(ctrls Controllers)
func (*App) AddGlobalMiddleware ¶ added in v2.40.0
AddGlobalMiddleware appends middleware(s) to be applied to all endpoints. Use this for middlewares that depend on resources initialized after NewApp() (e.g. repository-dependent middlewares wired in loadModules). The middlewares are stored internally and applied lazily when the first route is registered, avoiding the chi restriction that middlewares must be defined before routes.
func (*App) AddScheduler ¶ added in v2.8.1
func (app *App) AddScheduler(pattern string, handler cron.HandlerFunc)
func (*App) RegisterMiddlewareFunc ¶ added in v2.40.0
func (*App) SetVersion ¶ added in v2.23.0
func (*App) Trx ¶ added in v2.13.2
func (app *App) Trx() database.Transactions
func (*App) WrapScheduler ¶ added in v2.8.7
type Controller ¶
type Controller interface {
GetConfig() ControllerConfig
}
type ControllerConfig ¶
type ControllerImpl ¶
type ControllerImpl struct {
// contains filtered or unexported fields
}
func NewControllerImpl ¶ added in v2.40.1
func NewControllerImpl() *ControllerImpl
func (*ControllerImpl) JoinMiddleware ¶
func (*ControllerImpl) SetRegisteredMiddlewares ¶ added in v2.40.0
func (ctrl *ControllerImpl) SetRegisteredMiddlewares(m map[string]any)
SetRegisteredMiddlewares is called by App.AddController to inject the app-level middleware registry.
func (*ControllerImpl) UseMiddleware ¶ added in v2.40.0
UseMiddleware retrieves a registered middleware by key. Returns nil if the key is not found — caller should handle nil check or skip.
type Controllers ¶ added in v2.19.0
type Controllers interface {
Register() []Controller
}
type ErrorOption ¶
type ErrorOption func(*HttpError)
func WithErrorCallerPath ¶ added in v2.9.7
func WithErrorCallerPath(callerPath string) ErrorOption
func WithErrorCode ¶ added in v2.9.6
func WithErrorCode(code string) ErrorOption
func WithErrorData ¶ added in v2.9.6
func WithErrorData(data interface{}) ErrorOption
func WithErrorMessage ¶ added in v2.9.6
func WithErrorMessage(message string) ErrorOption
func WithErrorStatus ¶ added in v2.9.6
func WithErrorStatus(status int) ErrorOption
func WithTraceId ¶ added in v2.25.0
func WithTraceId(traceId string) ErrorOption
type HttpError ¶
type HttpError struct {
Message string `json:"message"`
Code string `json:"code"`
Status int `json:"-"`
TraceId string `json:"trace_id"`
Data interface{} `json:"data,omitempty"`
CallerPath string `json:"caller_path,omitempty"`
}
func BadRequest ¶
func InternalServerError ¶
func MethodNotAllowed ¶
func NewErr ¶
func NewErr(opts ...ErrorOption) *HttpError
func TooManyRequest ¶
func Unauthorized ¶
func UnprocessableEntity ¶
func (*HttpError) Write ¶
func (e *HttpError) Write(w http.ResponseWriter)
type Options ¶
type Options func(api *App)
func ReadTimeout ¶
func WithAPITimeout ¶
func WithAppPort ¶
func WithCronJob ¶ added in v2.8.0
func WithGlobalMiddleware ¶ added in v2.40.0
WithGlobalMiddleware registers middleware(s) that will be applied to ALL endpoints (both authenticated and unauthenticated). These run after the built-in middlewares (request logger, recoverer, panic handler) but before any route-specific middleware. Use this in NewApp() for middlewares that have no external dependencies.
func WithNewRelic ¶ added in v2.20.0
func WithNewRelic() Options
func WithTimezone ¶ added in v2.24.0
func WriteTimeout ¶
type Response ¶
type Response struct {
Message string `json:"message,omitempty"`
Data any `json:"data,omitempty"`
Err error `json:"error,omitempty"`
TraceId string `json:"trace_id"`
InternalError *HttpError `json:"-"`
MetaData *database.ResponseMetaData `json:"metadata,omitempty"`
// contains filtered or unexported fields
}
func NewResponse ¶
func NewResponse() *Response
func (*Response) Send ¶ added in v2.3.9
func (resp *Response) Send(w http.ResponseWriter)
func (*Response) SetCustomHeader ¶ added in v2.39.2
func (*Response) SetFileDownload ¶ added in v2.38.0
SetFileDownload configures the response to send binary file data as a download instead of the default JSON response. Content-Type and Content-Disposition headers are set automatically.
Example with BulkGenerator:
zipBytes, results, err := bulk.GenerateZip("reports.zip")
if err != nil {
return api.NewResponse().SetError(err)
}
return api.NewResponse().SetFileDownload(zipBytes, "reports.zip", "application/zip")
func (*Response) SetHTTPError ¶
func (*Response) SetMessage ¶
func (*Response) SetStatusCode ¶ added in v2.17.5
type ResponseRecorder ¶ added in v2.37.4
type ResponseRecorder struct {
http.ResponseWriter
StatusCode int
}
func NewResponseRecorder ¶ added in v2.37.4
func NewResponseRecorder(w http.ResponseWriter) *ResponseRecorder
func (*ResponseRecorder) WriteHeader ¶ added in v2.37.4
func (r *ResponseRecorder) WriteHeader(status int)
WriteHeader overrides the default WriteHeader to store the status code.
type Route ¶
type Route struct {
Method string
Path string
Handler Handler
Version int
Middlewares *[]func(http.Handler) http.Handler
}
func (*Route) GetVersionedPath ¶
type RouteOption ¶
type RouteOption func(*Route)
func WithMiddleware ¶
func WithMiddleware(handlers ...func(http.Handler) http.Handler) RouteOption
func WithPath ¶
func WithPath(path string) RouteOption
func WithVersion ¶
func WithVersion(version int) RouteOption
type ValidationError ¶
type ValidationError struct {
Field string `json:"field"`
Tag string `json:"tag"`
Value string `json:"value"`
}
func ValidateStruct ¶
func ValidateStruct(data interface{}) []*ValidationError
type WrittenResponseWriter ¶
type WrittenResponseWriter struct {
http.ResponseWriter
// contains filtered or unexported fields
}
func (*WrittenResponseWriter) Flush ¶ added in v2.38.0
func (w *WrittenResponseWriter) Flush()
Flush implements http.Flusher interface for streaming responses (SSE, WebSocket, etc.)
func (*WrittenResponseWriter) WriteHeader ¶
func (w *WrittenResponseWriter) WriteHeader(status int)
func (*WrittenResponseWriter) Written ¶
func (w *WrittenResponseWriter) Written() bool