forge

package
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Apr 30, 2025 License: MIT Imports: 42 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNotFound      = NewAppError("not found", http.StatusNotFound)
	ErrUnauthorized  = NewAppError("unauthorized", http.StatusUnauthorized)
	ErrForbidden     = NewAppError("forbidden", http.StatusForbidden)
	ErrBadRequest    = NewAppError("bad request", http.StatusBadRequest)
	ErrInternalError = NewAppError("internal server error", http.StatusInternalServerError)
	ErrValidation    = NewAppError("validation error", http.StatusBadRequest)
)

Functions

func CreateMicroservice

func CreateMicroservice(serviceName string)

func CreateMicroserviceProject

func CreateMicroserviceProject(config *MicroserviceConfig) error

func CreateNewProject

func CreateNewProject(projectName string)

func ForgeHandlerToFiberHandler

func ForgeHandlerToFiberHandler(handler HandlerFunc, app *Application) fiber.Handler

func GenerateController

func GenerateController(name string, service string)

func GenerateModel

func GenerateModel(name string, service string)

func GenerateSwaggerUI

func GenerateSwaggerUI(spec *OpenAPISpec) (string, error)

func HandleError

func HandleError(ctx *Context, err error) error

func SecurityHeaders

func SecurityHeaders() fiber.Handler

Types

type AppError

type AppError struct {
	Message    string                 `json:"message"`
	StatusCode int                    `json:"-"`
	Code       string                 `json:"code,omitempty"`
	Details    map[string]interface{} `json:"details,omitempty"`
	Err        error                  `json:"-"`
}

func AsAppError

func AsAppError(err error) *AppError

func NewAppError

func NewAppError(message string, statusCode int) *AppError

func NotFoundError

func NotFoundError(entity string) *AppError

func ValidationError

func ValidationError(errors map[string]string) *AppError

func (*AppError) Error

func (e *AppError) Error() string

func (*AppError) WithCode

func (e *AppError) WithCode(code string) *AppError

func (*AppError) WithDetail

func (e *AppError) WithDetail(key string, value interface{}) *AppError

func (*AppError) WithDetails

func (e *AppError) WithDetails(details map[string]interface{}) *AppError

func (*AppError) WithError

func (e *AppError) WithError(err error) *AppError

type AppMode

type AppMode string
const (
	MonolithMode AppMode = "monolith"

	MicroserviceMode AppMode = "microservice"
)

type Application

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

func New

func New(config *Config) (*Application, error)

func (*Application) AddTracing

func (app *Application) AddTracing()

func (*Application) Auth

func (app *Application) Auth() *auth.JWTManager

func (*Application) ConfigureMiddleware

func (a *Application) ConfigureMiddleware(options ...interface{})

func (*Application) DB

func (app *Application) DB() *gorm.DB

func (*Application) EnableGracefulShutdown

func (app *Application) EnableGracefulShutdown()

func (*Application) EnableHealthCheck

func (app *Application) EnableHealthCheck(path string)

func (*Application) GenerateOpenAPI

func (app *Application) GenerateOpenAPI() (*OpenAPISpec, error)

func (*Application) GenerateRouteFiles

func (app *Application) GenerateRouteFiles() error

func (*Application) Get

func (a *Application) Get() *fiber.App

func (*Application) GetAuth

func (app *Application) GetAuth() interface{}

func (*Application) GetConfig

func (app *Application) GetConfig() interface{}

func (*Application) GetDB

func (app *Application) GetDB() interface{}

func (*Application) GetMailer

func (app *Application) GetMailer() interface{}

func (*Application) GetQueue

func (app *Application) GetQueue() interface{}

func (*Application) Group

func (a *Application) Group(prefix string) fiber.Router

func (*Application) Listen

func (app *Application) Listen(addr string) error

func (*Application) Logger

func (app *Application) Logger() *logger.Logger

func (*Application) Mailer

func (app *Application) Mailer() *mailer.Mailer

func (*Application) Plugins

func (app *Application) Plugins() *plugin.Manager

func (*Application) Queue

func (app *Application) Queue() *queue.Queue

func (*Application) RegisterController

func (app *Application) RegisterController(controller interface{})

func (*Application) Routes

func (app *Application) Routes() *RouteManager

func (*Application) Serve

func (app *Application) Serve() error

func (*Application) Shutdown

func (app *Application) Shutdown() error

func (*Application) Start

func (app *Application) Start() error

func (*Application) Test

func (app *Application) Test(req *http.Request) (*http.Response, error)

func (*Application) Use

func (a *Application) Use(middleware ...interface{})

func (*Application) Validator

func (app *Application) Validator() *validator.Validate

func (*Application) WithLogField

func (app *Application) WithLogField(key string, value interface{}) *logger.Logger

type CORSConfig

type CORSConfig struct {
	AllowOrigins     string `yaml:"allow_origins" json:"allow_origins"`
	AllowMethods     string `yaml:"allow_methods" json:"allow_methods"`
	AllowHeaders     string `yaml:"allow_headers" json:"allow_headers"`
	AllowCredentials bool   `yaml:"allow_credentials" json:"allow_credentials"`
	ExposeHeaders    string `yaml:"expose_headers" json:"expose_headers"`
	MaxAge           int    `yaml:"max_age" json:"max_age"`
}

func DefaultCORSConfig

func DefaultCORSConfig() CORSConfig

type Config

type Config struct {
	Name        string
	Version     string
	Description string
	Server      ServerConfig
	Database    DatabaseConfig
	Auth        auth.Config
	Mailer      mailer.Config
	Queue       queue.Config
	CORS        CORSConfig
	LogLevel    string
}

type Context

type Context struct {
	*fiber.Ctx
	// contains filtered or unexported fields
}

func NewContext

func NewContext(c *fiber.Ctx, app *Application) *Context

func (*Context) App

func (c *Context) App() *Application

func (*Context) Bind

func (c *Context) Bind(v interface{}) error

func (*Context) BindAndValidate

func (c *Context) BindAndValidate(v interface{}) error

func (*Context) Error

func (c *Context) Error(err error) error

func (*Context) FormFile

func (c *Context) FormFile(key string) (*multipart.FileHeader, error)

func (*Context) FormValue

func (c *Context) FormValue(key string) string

func (*Context) HTML

func (c *Context) HTML(html string) error

func (*Context) Header

func (c *Context) Header(key string) string

func (*Context) JSON

func (c *Context) JSON(data interface{}) error

func (*Context) Negotiate

func (c *Context) Negotiate(data interface{}) error

func (*Context) Param

func (c *Context) Param(name string) string

func (*Context) Query

func (c *Context) Query(key string) string

func (*Context) QueryDefault

func (c *Context) QueryDefault(key, defaultValue string) string

func (*Context) Redirect

func (c *Context) Redirect(url string, status ...int) error

func (*Context) RespondWithValidationErrors

func (c *Context) RespondWithValidationErrors(errors ValidationErrors) error

func (*Context) SaveFile

func (c *Context) SaveFile(file *multipart.FileHeader, path string) error

func (*Context) SendFile

func (c *Context) SendFile(file string) error

func (*Context) SetHeader

func (c *Context) SetHeader(key, value string)

func (*Context) Status

func (c *Context) Status(code int) *Context

func (*Context) Stream

func (c *Context) Stream(contentType string, reader func(w io.Writer) error) error

func (*Context) Success

func (c *Context) Success(data interface{}) error

func (*Context) Text

func (c *Context) Text(text string) error

func (*Context) Validate

func (c *Context) Validate(v interface{}) error

func (*Context) ValidateWithDetails

func (c *Context) ValidateWithDetails(i interface{}) ValidationErrors

func (*Context) XML

func (c *Context) XML(data interface{}) error

type Controller

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

func (*Controller) App

func (c *Controller) App() *Application

func (*Controller) GetRouteByName

func (c *Controller) GetRouteByName(name string) *Route

func (*Controller) GetRoutes

func (c *Controller) GetRoutes() map[string]*Route

func (*Controller) Group

func (c *Controller) Group(prefix string) *ControllerGroup

func (*Controller) Name

func (c *Controller) Name() string

func (*Controller) RegisterRoute

func (c *Controller) RegisterRoute(method, path, description string, handler HandlerFunc) *Route

func (*Controller) RegisterRoutes

func (c *Controller) RegisterRoutes(router fiber.Router)

func (*Controller) SetApplication

func (c *Controller) SetApplication(app *Application)

func (*Controller) SetName

func (c *Controller) SetName(name string)

func (*Controller) Use

func (c *Controller) Use(middleware ...MiddlewareFunc)

type ControllerGroup

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

func (*ControllerGroup) Add

func (g *ControllerGroup) Add(controller interface{}) *ControllerGroup

func (*ControllerGroup) Register

func (g *ControllerGroup) Register(app *Application)

func (*ControllerGroup) SetName

func (g *ControllerGroup) SetName(name string) *ControllerGroup

func (*ControllerGroup) Use

func (g *ControllerGroup) Use(middleware ...MiddlewareFunc) *ControllerGroup

type Database

type Database struct {
	DB *gorm.DB
}

func NewDatabase

func NewDatabase(config *DatabaseConfig) (*Database, error)

func (*Database) AutoMigrate

func (d *Database) AutoMigrate(models ...interface{}) error

func (*Database) Close

func (d *Database) Close() error

func (*Database) Create

func (d *Database) Create(value interface{}) error

func (*Database) Delete

func (d *Database) Delete(value interface{}) error

func (*Database) Exec

func (d *Database) Exec(sql string, values ...interface{}) error

func (*Database) Find

func (d *Database) Find(dest interface{}, cond ...interface{}) error

func (*Database) First

func (d *Database) First(dest interface{}, cond ...interface{}) error

func (*Database) GetDriverName

func (d *Database) GetDriverName() string

func (*Database) Model

func (d *Database) Model(value interface{}) *gorm.DB

func (*Database) Ping

func (d *Database) Ping() error

func (*Database) Preload

func (d *Database) Preload(query string, args ...interface{}) *gorm.DB

func (*Database) Raw

func (d *Database) Raw(sql string, dest interface{}, values ...interface{}) error

func (*Database) Scopes

func (d *Database) Scopes(funcs ...func(*gorm.DB) *gorm.DB) *gorm.DB

func (*Database) Transaction

func (d *Database) Transaction(fc func(tx *gorm.DB) error) error

func (*Database) Update

func (d *Database) Update(value interface{}) error

func (*Database) Where

func (d *Database) Where(query interface{}, args ...interface{}) *gorm.DB

type DatabaseConfig

type DatabaseConfig struct {
	Driver        string
	Name          string
	Host          string
	Port          int
	Username      string
	Password      string
	SSLMode       string
	Charset       string
	Timezone      string
	MaxOpenConns  int
	MaxIdleConns  int
	ConnMaxLife   time.Duration
	SlowThreshold time.Duration
	LogLevel      logger.LogLevel
	Debug         bool
}

func DefaultDatabaseConfig

func DefaultDatabaseConfig() *DatabaseConfig

type H

type H map[string]interface{}

H is a shorthand for map[string]interface{}

type HandlerFunc

type HandlerFunc func(*Context) error

type HotReloader

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

func NewHotReloader

func NewHotReloader(app *Application) (*HotReloader, error)

func NewMicroserviceHotReloader

func NewMicroserviceHotReloader(app *Application, microserviceName, entrypointPath string) (*HotReloader, error)

func (*HotReloader) SetCustomBuildCommand

func (h *HotReloader) SetCustomBuildCommand(cmd ...string)

func (*HotReloader) SetCustomRunCommand

func (h *HotReloader) SetCustomRunCommand(cmd ...string)

func (*HotReloader) SetProjectRoot

func (h *HotReloader) SetProjectRoot(path string)

func (*HotReloader) Start

func (h *HotReloader) Start() error

func (*HotReloader) Stop

func (h *HotReloader) Stop() error

type MediaTypeObject

type MediaTypeObject struct {
	Schema *Schema `json:"schema"`
}

type Microservice

type Microservice struct {
	Name        string
	Version     string
	Description string
	// contains filtered or unexported fields
}

func NewMicroservice

func NewMicroservice(name, version, description string) *Microservice

func (*Microservice) AddRoute

func (ms *Microservice) AddRoute(method, path, description string, handler HandlerFunc) *Microservice

func (*Microservice) App

func (ms *Microservice) App() *Application

func (*Microservice) DELETE

func (ms *Microservice) DELETE(path, description string, handler HandlerFunc) *Microservice

func (*Microservice) EnableGracefulShutdown

func (ms *Microservice) EnableGracefulShutdown()

func (*Microservice) GET

func (ms *Microservice) GET(path, description string, handler HandlerFunc) *Microservice

func (*Microservice) GetOpenConnections

func (ms *Microservice) GetOpenConnections() int

func (*Microservice) Logger

func (ms *Microservice) Logger() *logger.Logger

func (*Microservice) PATCH

func (ms *Microservice) PATCH(path, description string, handler HandlerFunc) *Microservice

func (*Microservice) POST

func (ms *Microservice) POST(path, description string, handler HandlerFunc) *Microservice

func (*Microservice) PUT

func (ms *Microservice) PUT(path, description string, handler HandlerFunc) *Microservice

func (*Microservice) Setup

func (ms *Microservice) Setup() error

func (*Microservice) Start

func (ms *Microservice) Start() error

Start starts the microservice

func (*Microservice) StartWithHotReload

func (ms *Microservice) StartWithHotReload() error

func (*Microservice) Stop

func (ms *Microservice) Stop() error

func (*Microservice) WithConfig

func (ms *Microservice) WithConfig(config *MicroserviceConfig) *Microservice

type MicroserviceConfig

type MicroserviceConfig struct {
	Name          string        `yaml:"name" json:"name"`
	Port          int           `yaml:"port" json:"port"`
	Host          string        `yaml:"host" json:"host"`
	Description   string        `yaml:"description" json:"description"`
	ReadTimeout   time.Duration `yaml:"read_timeout" json:"read_timeout"`
	WriteTimeout  time.Duration `yaml:"write_timeout" json:"write_timeout"`
	BodyLimit     string        `yaml:"body_limit" json:"body_limit"`
	CORS          CORSConfig    `yaml:"cors" json:"cors"`
	LogLevel      string        `yaml:"log_level" json:"log_level"`
	EnableTracing bool          `yaml:"enable_tracing" json:"enable_tracing"`
	Metrics       bool          `yaml:"metrics" json:"metrics"`
	HealthCheck   bool          `yaml:"health_check" json:"health_check"`
	WithDB        bool          `yaml:"with_db" json:"with_db"`
	WithCache     bool          `yaml:"with_cache" json:"with_cache"`
	WithQueue     bool          `yaml:"with_queue" json:"with_queue"`
	WithAuth      bool          `yaml:"with_auth" json:"with_auth"`
}

func DefaultMicroserviceConfig

func DefaultMicroserviceConfig() *MicroserviceConfig

type MiddlewareConfig

type MiddlewareConfig struct {
	Compress        bool
	CORS            bool
	CORSConfig      CORSConfig
	Logger          bool
	LoggerConfig    fiber.Config
	Limiter         bool
	LimiterConfig   limiter.Config
	Recover         bool
	RequestID       bool
	RateLimit       bool
	RateLimitConfig RateLimitConfig
	BodyLimit       string
	ReadTimeout     time.Duration
	WriteTimeout    time.Duration
	IdleTimeout     time.Duration
}

type MiddlewareFunc

type MiddlewareFunc func(HandlerFunc) HandlerFunc

type MiddlewareOption

type MiddlewareOption func(*MiddlewareConfig)

func WithBodyLimit

func WithBodyLimit(limit string) MiddlewareOption

func WithCORS

func WithCORS(config CORSConfig) MiddlewareOption

func WithCompress

func WithCompress() MiddlewareOption

func WithIdleTimeout

func WithIdleTimeout(idle time.Duration) MiddlewareOption

func WithLimiter

func WithLimiter(config ...limiter.Config) MiddlewareOption

func WithLogger

func WithLogger(config ...fiber.Config) MiddlewareOption

func WithRecover

func WithRecover() MiddlewareOption

func WithRequestID

func WithRequestID() MiddlewareOption

func WithTimeout

func WithTimeout(read, write time.Duration) MiddlewareOption

type Migration

type Migration struct {
	Name string
	Up   func(*gorm.DB) error
	Down func(*gorm.DB) error
}

type MigrationManager

type MigrationManager struct {
	DB         *Database
	Migrations []Migration
}

func NewMigrationManager

func NewMigrationManager(db *Database) *MigrationManager

func (*MigrationManager) AddMigration

func (m *MigrationManager) AddMigration(name string, up, down func(*gorm.DB) error)

func (*MigrationManager) Migrate

func (m *MigrationManager) Migrate() error

func (*MigrationManager) Rollback

func (m *MigrationManager) Rollback(steps int) error

type OpenAPIComponents

type OpenAPIComponents struct {
	Schemas         map[string]*Schema        `json:"schemas"`
	SecuritySchemes map[string]SecurityScheme `json:"securitySchemes"`
}

type OpenAPIInfo

type OpenAPIInfo struct {
	Title       string `json:"title"`
	Description string `json:"description"`
	Version     string `json:"version"`
}

type OpenAPISpec

type OpenAPISpec struct {
	OpenAPI    string              `json:"openapi"`
	Info       OpenAPIInfo         `json:"info"`
	Paths      map[string]PathItem `json:"paths"`
	Components OpenAPIComponents   `json:"components"`
}

type Operation

type Operation struct {
	Summary     string                `json:"summary"`
	Description string                `json:"description"`
	OperationID string                `json:"operationId,omitempty"`
	Parameters  []*Parameter          `json:"parameters,omitempty"`
	RequestBody *RequestBody          `json:"requestBody,omitempty"`
	Responses   map[string]*Response  `json:"responses"`
	Tags        []string              `json:"tags,omitempty"`
	Security    []map[string][]string `json:"security,omitempty"`
}

type Parameter

type Parameter struct {
	Name        string  `json:"name"`
	In          string  `json:"in"`
	Description string  `json:"description"`
	Required    bool    `json:"required"`
	Schema      *Schema `json:"schema"`
}

type PathItem

type PathItem struct {
	Get    *Operation `json:"get,omitempty"`
	Post   *Operation `json:"post,omitempty"`
	Put    *Operation `json:"put,omitempty"`
	Delete *Operation `json:"delete,omitempty"`
	Patch  *Operation `json:"patch,omitempty"`
}

type RateLimitConfig

type RateLimitConfig struct {
	Enabled            bool          `yaml:"enabled" json:"enabled"`
	Max                int           `yaml:"max" json:"max"`
	Duration           time.Duration `yaml:"duration" json:"duration"`
	KeyGenerator       func(*fiber.Ctx) string
	Storage            fiber.Storage
	SkipFailedRequests bool     `yaml:"skip_failed" json:"skip_failed"`
	SkipPaths          []string `yaml:"skip_paths" json:"skip_paths"`
	LimitReached       func(*fiber.Ctx) error
}

func DefaultRateLimitConfig

func DefaultRateLimitConfig() RateLimitConfig

type RequestBody

type RequestBody struct {
	Description string                     `json:"description"`
	Required    bool                       `json:"required"`
	Content     map[string]MediaTypeObject `json:"content"`
}

type Response

type Response struct {
	Description string                     `json:"description"`
	Content     map[string]MediaTypeObject `json:"content,omitempty"`
}

type Route

type Route struct {
	Name        string
	Method      string
	Path        string
	Description string
	RequestBody interface{}
	Response    interface{}
	Handler     HandlerFunc
}

func (*Route) SetName

func (r *Route) SetName(name string) *Route

func (*Route) SetRequestBody

func (r *Route) SetRequestBody(model interface{}) *Route

func (*Route) SetResponse

func (r *Route) SetResponse(model interface{}) *Route

type RouteDoc

type RouteDoc struct {
	Method      string
	Path        string
	Handler     string
	Description string
}

type RouteInfo

type RouteInfo struct {
	HTTPMethod string
	Path       string
}

type RouteManager

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

func NewRouteManager

func NewRouteManager(app *Application) *RouteManager

func (*RouteManager) Add

func (rm *RouteManager) Add(method, path, handler, description string)

func (*RouteManager) AddFromRoute

func (rm *RouteManager) AddFromRoute(route *Route, handlerName string)

func (*RouteManager) GenerateControllerRoutes

func (rm *RouteManager) GenerateControllerRoutes(outputDir, controllerName string, routes []RouteDoc) error

func (*RouteManager) GenerateRoutesFile

func (rm *RouteManager) GenerateRoutesFile(outputDir string) error

func (*RouteManager) SortRoutes

func (rm *RouteManager) SortRoutes()

type Schema

type Schema struct {
	Type                 string             `json:"type,omitempty"`
	Format               string             `json:"format,omitempty"`
	Description          string             `json:"description,omitempty"`
	Properties           map[string]*Schema `json:"properties,omitempty"`
	Items                *Schema            `json:"items,omitempty"`
	Required             []string           `json:"required,omitempty"`
	AdditionalProperties *Schema            `json:"additionalProperties,omitempty"`
}

type SecurityScheme

type SecurityScheme struct {
	Type         string `json:"type"`
	Description  string `json:"description,omitempty"`
	Name         string `json:"name,omitempty"`
	In           string `json:"in,omitempty"`
	Scheme       string `json:"scheme,omitempty"`
	BearerFormat string `json:"bearerFormat,omitempty"`
}

type ServerConfig

type ServerConfig struct {
	Host     string
	Port     int
	BasePath string
}

type ValidationErrors

type ValidationErrors map[string]string

func (ValidationErrors) Error

func (ve ValidationErrors) Error() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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