π Golang Lightning Backend Framework
WARNING: Library under active development - expect significant API changes.
- Router usage
- Model usage
- Database Create
- Database Delete
- Database Update
- Database List
- Database Get
- Controller usage
- Service usage
- Client usage
- tunnel usage
- Package usage
- lru
- cmap
- sqlite,postgres,mysql
- redis
- elastic
- mongo
- minio
- mqtt
- task
type StandardLogger interface {
Debug(args ...any)
Info(args ...any)
Warn(args ...any)
Error(args ...any)
Fatal(args ...any)
Debugf(format string, args ...any)
Infof(format string, args ...any)
Warnf(format string, args ...any)
Errorf(format string, args ...any)
Fatalf(format string, args ...any)
}
type StructuredLogger interface {
Debugw(msg string, keysAndValues ...any)
Infow(msg string, keysAndValues ...any)
Warnw(msg string, keysAndValues ...any)
Errorw(msg string, keysAndValues ...any)
Fatalw(msg string, keysAndValues ...any)
}
type ZapLogger interface {
Debugz(msg string, fields ...zap.Field)
Infoz(msg string, fields ...zap.Field)
Warnz(msg string, feilds ...zap.Field)
Errorz(msg string, fields ...zap.Field)
Fatalz(msg string, fields ...zap.Field)
}
type Logger interface {
With(fields ...string) Logger
WithControllerContext(*ControllerContext, consts.Phase) Logger
WithServiceContext(*ServiceContext, consts.Phase) Logger
StandardLogger
StructuredLogger
ZapLogger
}
type Database[M Model] interface {
Create(objs ...M) error
Delete(objs ...M) error
Update(objs ...M) error
UpdateById(id string, key string, value any) error
List(dest *[]M, cache ...*[]byte) error
Get(dest M, id string, cache ...*[]byte) error
First(dest M, cache ...*[]byte) error
Last(dest M, cache ...*[]byte) error
Take(dest M, cache ...*[]byte) error
Count(*int64) error
Cleanup() error
Health() error
DatabaseOption[M]
}
type DatabaseOption[M Model] interface {
WithDB(any) Database[M]
WithTable(name string) Database[M]
WithDebug() Database[M]
WithQuery(query M, fuzzyMatch ...bool) Database[M]
WithQueryRaw(query any, args ...any) Database[M]
WithAnd(...bool) Database[M]
WithOr(...bool) Database[M]
WithTimeRange(columnName string, startTime time.Time, endTime time.Time) Database[M]
WithSelect(columns ...string) Database[M]
WithSelectRaw(query any, args ...any) Database[M]
WithIndex(index string) Database[M]
WithTransaction(tx any) Database[M]
WithJoinRaw(query string, args ...any) Database[M]
WithLock(mode ...string) Database[M]
WithBatchSize(size int) Database[M]
WithScope(page, size int) Database[M]
WithLimit(limit int) Database[M]
WithExclude(map[string][]any) Database[M]
WithOrder(order string) Database[M]
WithExpand(expand []string, order ...string) Database[M]
WithPurge(...bool) Database[M]
WithCache(...bool) Database[M]
WithOmit(...string) Database[M]
WithTryRun(...bool) Database[M]
WithoutHook() Database[M]
}
type Model interface {
GetTableName() string // GetTableName returns the table name.
GetID() string
SetID(id ...string) // SetID method will automatically set the id if id is empty.
GetCreatedBy() string
GetUpdatedBy() string
GetCreatedAt() time.Time
GetUpdatedAt() time.Time
SetCreatedBy(s string)
SetUpdatedBy(s string)
SetCreatedAt(t time.Time)
SetUpdatedAt(t time.Time)
Expands() []string // Expands returns the foreign keys should preload.
Excludes() map[string][]any
MarshalLogObject(zapcore.ObjectEncoder) error // MarshalLogObject implement zap.ObjectMarshaler
Hooker
}
type Hooker interface {
CreateBefore() error
CreateAfter() error
DeleteBefore() error
DeleteAfter() error
UpdateBefore() error
UpdateAfter() error
UpdatePartialBefore() error
UpdatePartialAfter() error
ListBefore() error
ListAfter() error
GetBefore() error
GetAfter() error
}
type Service[M Model] interface {
CreateBefore(*ServiceContext, ...M) error
CreateAfter(*ServiceContext, ...M) error
DeleteBefore(*ServiceContext, ...M) error
DeleteAfter(*ServiceContext, ...M) error
UpdateBefore(*ServiceContext, ...M) error
UpdateAfter(*ServiceContext, ...M) error
UpdatePartialBefore(*ServiceContext, ...M) error
UpdatePartialAfter(*ServiceContext, ...M) error
ListBefore(*ServiceContext, *[]M) error
ListAfter(*ServiceContext, *[]M) error
GetBefore(*ServiceContext, ...M) error
GetAfter(*ServiceContext, ...M) error
Import(*ServiceContext, io.Reader) ([]M, error)
Export(*ServiceContext, ...M) ([]byte, error)
Filter(*ServiceContext, M) M
FilterRaw(*ServiceContext) string
Logger
}
type Cache[T any] interface {
Set(key string, values T)
Get(key string) (T, bool)
Peek(key string) (T, bool)
Remove(key string)
Exists(key string) bool
Keys() []string
Count() int
Flush()
}
type ESDocumenter interface {
Document() map[string]any
GetID() string
}
- Use reflect caching to optimizeize performance
- Configuration
config/config.go
supports multiple instances, including MySQL, PostgresSQL, Elastic, Elasticsearch, MongoDB, etc. - Add
ldap
package and integrate it intoboostrap.Boostrap
- Controler layer utilizes github.com/araddon/dateparse to handle arbitrary date time formats.
- Add more middleware