Merge branch 'dev' of github.com:dikstub-rssa/simrs-be into feat/file-generator-169
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
package dualtrx_helper
|
||||
|
||||
import (
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type Dualtx struct {
|
||||
Sync *gorm.DB
|
||||
Simgos *gorm.DB
|
||||
}
|
||||
|
||||
func NewDualtx() *Dualtx {
|
||||
return &Dualtx{
|
||||
Sync: dg.I.Begin(),
|
||||
Simgos: dg.IS["simrs"].Begin(),
|
||||
}
|
||||
}
|
||||
|
||||
func NewTx() *Dualtx {
|
||||
return &Dualtx{
|
||||
Sync: dg.I,
|
||||
Simgos: dg.IS["simrs"],
|
||||
}
|
||||
}
|
||||
|
||||
func (t *Dualtx) Commit() error {
|
||||
if err := t.Sync.Commit().Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := t.Simgos.Commit().Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *Dualtx) Rollback() {
|
||||
t.Sync.Rollback()
|
||||
t.Simgos.Rollback()
|
||||
}
|
||||
|
||||
type DualTxFunc func(tx *Dualtx) error
|
||||
|
||||
func WithDualTx(fn DualTxFunc) error {
|
||||
var (
|
||||
tx = NewDualtx()
|
||||
err error
|
||||
)
|
||||
|
||||
defer func() {
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
if err = fn(tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = tx.Commit(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -74,3 +74,36 @@ func RegCrudByCode(r *http.ServeMux, path string, mwAndRouter ...any) {
|
||||
"DELETE /{code}": c.Delete,
|
||||
})
|
||||
}
|
||||
|
||||
func SyncCrud(r *http.ServeMux, path string, mwAndRouter ...any) {
|
||||
sLength := len(mwAndRouter)
|
||||
|
||||
mwCandidates := mwAndRouter[:sLength-1]
|
||||
mwList := []hk.HandlerMw{}
|
||||
for i := range mwCandidates {
|
||||
// have to do it manually, since casting directly results unexpected result
|
||||
myType := reflect.TypeOf(mwCandidates[i])
|
||||
if myType.String() != "func(http.Handler) http.Handler" {
|
||||
panic("non middleware included as middleware")
|
||||
}
|
||||
mwList = append(mwList, mwCandidates[i].(func(http.Handler) http.Handler))
|
||||
|
||||
// if g, okHandler := mwCandidates[i].(func(http.Handler) http.Handler); !okHandler {
|
||||
// panic("non middleware included")
|
||||
// } else {
|
||||
// mwList = append(mwList, g)
|
||||
// }
|
||||
}
|
||||
|
||||
c, ok := mwAndRouter[sLength-1].(SyncCrudBase)
|
||||
if !ok {
|
||||
panic("non CrudBase used in the last paramter")
|
||||
}
|
||||
|
||||
hk.GroupRoutes(path, r, mwList, hk.MapHandlerFunc{
|
||||
"POST /": c.Create,
|
||||
"POST /log": c.CreateLog,
|
||||
"PATCH /{id}": c.Update,
|
||||
"DELETE /{id}": c.Delete,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -9,3 +9,10 @@ type CrudBase interface {
|
||||
Update(w http.ResponseWriter, r *http.Request)
|
||||
Delete(w http.ResponseWriter, r *http.Request)
|
||||
}
|
||||
|
||||
type SyncCrudBase interface {
|
||||
Create(w http.ResponseWriter, r *http.Request)
|
||||
CreateLog(w http.ResponseWriter, r *http.Request)
|
||||
Update(w http.ResponseWriter, r *http.Request)
|
||||
Delete(w http.ResponseWriter, r *http.Request)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user