Skip to content
This repository has been archived by the owner on Sep 9, 2024. It is now read-only.

Commit

Permalink
remove(store): store => service
Browse files Browse the repository at this point in the history
  • Loading branch information
a-wing committed Mar 20, 2023
1 parent 7bb2f90 commit cdfe406
Show file tree
Hide file tree
Showing 10 changed files with 77 additions and 109 deletions.
9 changes: 4 additions & 5 deletions app/api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
"sb.im/gosd/app/api/middleware"
"sb.im/gosd/app/api/v3"
"sb.im/gosd/app/service"
"sb.im/gosd/app/store"

"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
Expand All @@ -19,8 +18,8 @@ import (

var ApiPrefix = "/gosd/api/v3"

func NewApi(s *store.Store, srv *service.Service) http.Handler {
if !s.Cfg().Debug {
func NewApi(srv *service.Service) http.Handler {
if !srv.Cfg().Debug {
gin.SetMode(gin.ReleaseMode)
}

Expand All @@ -35,7 +34,7 @@ func NewApi(s *store.Store, srv *service.Service) http.Handler {
MaxAge: 12 * time.Hour,
}))

if u, err := url.Parse(s.Cfg().BaseURL); err == nil {
if u, err := url.Parse(srv.Cfg().BaseURL); err == nil {
ApiPrefix = u.Path
}

Expand All @@ -46,7 +45,7 @@ func NewApi(s *store.Store, srv *service.Service) http.Handler {
})
})

handler := v3.NewHandler(s, srv)
handler := v3.NewHandler(srv)

// Init Auth Middleware
if err := v3.InitAuthMiddleware(sr, handler); err != nil {
Expand Down
15 changes: 5 additions & 10 deletions app/api/v3/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"sb.im/gosd/app/config"
"sb.im/gosd/app/service"
"sb.im/gosd/app/storage"
"sb.im/gosd/app/store"

"github.com/go-redis/redis/v8"
"gorm.io/gorm"
Expand All @@ -16,18 +15,14 @@ type Handler struct {
srv *service.Service
cfg *config.Config
ofs *storage.Storage

store *store.Store
}

func NewHandler(s *store.Store, srv *service.Service) *Handler {
func NewHandler(srv *service.Service) *Handler {
return &Handler{
cfg: s.Cfg(),
orm: s.Orm(),
rdb: s.Rdb(),
ofs: s.Ofs(),
cfg: srv.Cfg(),
orm: srv.Orm(),
rdb: srv.Rdb(),
ofs: srv.Ofs(),
srv: srv,

store: s,
}
}
4 changes: 2 additions & 2 deletions app/api/v3/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ func (h *Handler) TaskShow(c *gin.Context) {
// @Failure 500
// @Router /tasks/{id} [PUT]
func (h *Handler) TaskUpdate(c *gin.Context) {
if id, _ := h.store.LockTaskGet(c.Param("id")); id != "" {
if id, _ := h.srv.LockTaskGet(c.Param("id")); id != "" {
c.JSON(http.StatusConflict, gin.H{"error": "This Task is Running"})
return
}
Expand Down Expand Up @@ -160,7 +160,7 @@ func (h *Handler) TaskUpdate(c *gin.Context) {
// @Failure 500
// @Router /tasks/{id} [DELETE]
func (h *Handler) TaskDestroy(c *gin.Context) {
if id, _ := h.store.LockTaskGet(c.Param("id")); id != "" {
if id, _ := h.srv.LockTaskGet(c.Param("id")); id != "" {
c.JSON(http.StatusConflict, gin.H{"error": "This Task is Running"})
return
}
Expand Down
26 changes: 12 additions & 14 deletions app/cmd/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
"sb.im/gosd/app/luavm"
"sb.im/gosd/app/service"
"sb.im/gosd/app/storage"
"sb.im/gosd/app/store"
"sb.im/gosd/rpc2mqtt"

"sb.im/gosd/mqttd"
Expand Down Expand Up @@ -45,7 +44,6 @@ func NewHandler(ctx context.Context, cfg *config.Config) http.Handler {
rdb.ConfigSet(context.Background(), "notify-keyspace-events", "$KEx")

ofs := storage.NewStorage(cfg.StorageURL)
s := store.NewStore(cfg, orm, rdb, ofs)

store := state.NewState(cfg.RedisURL)

Expand All @@ -58,17 +56,7 @@ func NewHandler(ctx context.Context, cfg *config.Config) http.Handler {
rpcServer := rpc2mqtt.NewRpc2Mqtt(chI, chO)
go rpcServer.Run(ctx)

luaFile, err := ioutil.ReadFile(cfg.LuaFilePath)
if err == nil {
log.Warn("Use Lua File Path:", cfg.LuaFilePath)
}
worker := luavm.NewWorker(luavm.Config{
Instance: cfg.Instance,
BaseURL: cfg.BaseURL,
}, s, rpcServer, luaFile)
go worker.Run(ctx)

srv := service.NewService(orm, rdb)
srv := service.NewService(cfg, orm, rdb, ofs)
if cfg.Schedule {
go srv.RunSchedule(ctx)
}
Expand All @@ -81,7 +69,17 @@ func NewHandler(ctx context.Context, cfg *config.Config) http.Handler {
DatabaseSeed(orm)
}

return api.NewApi(s, srv)
luaFile, err := ioutil.ReadFile(cfg.LuaFilePath)
if err == nil {
log.Warn("Use Lua File Path:", cfg.LuaFilePath)
}
worker := luavm.NewWorker(luavm.Config{
Instance: cfg.Instance,
BaseURL: cfg.BaseURL,
}, srv, rpcServer, luaFile)
go worker.Run(ctx)

return api.NewApi(srv)
}

func Daemon(ctx context.Context) {
Expand Down
12 changes: 6 additions & 6 deletions app/luavm/wlock.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,25 +23,25 @@ func (w *Worker) preTaskCheck(task *model.Task) error {
}

func (w *Worker) lockTaskSet(id string) error {
return w.store.LockTaskSet(id)
return w.srv.LockTaskSet(id)
}

func (w *Worker) lockTaskGet(id string) (string, error) {
return w.store.LockTaskGet(id)
return w.srv.LockTaskGet(id)
}

func (w *Worker) lockTaskDel(id string) error {
return w.store.LockTaskDel(id)
return w.srv.LockTaskDel(id)
}

func (w *Worker) lockNodeSet(id string) error {
return w.store.LockNodeSet(id)
return w.srv.LockNodeSet(id)
}

func (w *Worker) lockNodeGet(id string) (string, error) {
return w.store.LockNodeGet(id)
return w.srv.LockNodeGet(id)
}

func (w *Worker) lockNodeDel(id string) error {
return w.store.LockNodeDel(id)
return w.srv.LockNodeDel(id)
}
31 changes: 16 additions & 15 deletions app/luavm/worker.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import (
"sb.im/gosd/app/logger"
"sb.im/gosd/app/luavm/lib"
"sb.im/gosd/app/model"
"sb.im/gosd/app/service"
"sb.im/gosd/app/storage"
"sb.im/gosd/app/store"

"github.com/go-redis/redis/v8"
"gorm.io/gorm"
Expand All @@ -27,20 +27,21 @@ import (
)

type Worker struct {
cfg Config
ctx context.Context
orm *gorm.DB
rdb *redis.Client
ofs *storage.Storage
store *store.Store
cfg Config
ctx context.Context
srv *service.Service
orm *gorm.DB
rdb *redis.Client
ofs *storage.Storage

script []byte
mutex *sync.Mutex

rpc *rpc2mqtt.Rpc2mqtt
Running map[string]*Service
}

func NewWorker(cfg Config, s *store.Store, rpc *rpc2mqtt.Rpc2mqtt, script []byte) *Worker {
func NewWorker(cfg Config, srv *service.Service, rpc *rpc2mqtt.Rpc2mqtt, script []byte) *Worker {
ctx := context.TODO()
// default LuaFile: input > default
if len(script) == 0 {
Expand All @@ -51,14 +52,14 @@ func NewWorker(cfg Config, s *store.Store, rpc *rpc2mqtt.Rpc2mqtt, script []byte
}
}

// redis: config set notify-keyspace-events Ex
return &Worker{
cfg: cfg,
ctx: ctx,
orm: s.Orm(),
rdb: s.Rdb(),
ofs: s.Ofs(),
store: s,
cfg: cfg,
ctx: ctx,
srv: srv,
orm: srv.Orm(),
rdb: srv.Rdb(),
ofs: srv.Ofs(),

script: script,
mutex: &sync.Mutex{},

Expand Down
4 changes: 2 additions & 2 deletions app/luavm/worker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (
"sb.im/gosd/app/config"
"sb.im/gosd/app/luavm/lib"
"sb.im/gosd/app/model"
"sb.im/gosd/app/service"
"sb.im/gosd/app/storage"
"sb.im/gosd/app/store"

"github.com/go-redis/redis/v8"
"gorm.io/driver/postgres"
Expand Down Expand Up @@ -40,7 +40,7 @@ func helpTestNewWorker(t *testing.T, script []byte) *Worker {
return NewWorker(Config{
Instance: cfg.Instance,
BaseURL: cfg.BaseURL,
}, store.NewStore(cfg, orm, rdb, storage.NewStorage(t.TempDir())), nil, script)
}, service.NewService(cfg, orm, rdb, storage.NewStorage(t.TempDir())), nil, script)
}

func newTestTask(t *testing.T) *model.Task {
Expand Down
14 changes: 7 additions & 7 deletions app/store/lock.go → app/service/lock.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package store
package service

import (
"context"
Expand All @@ -12,26 +12,26 @@ const (
lockTimeout = 2 * time.Hour
)

func (s *Store) LockTaskSet(id string) error {
func (s *Service) LockTaskSet(id string) error {
return s.rdb.Set(context.Background(), lockTaskPrefix+id, s.cfg.Instance, lockTimeout).Err()
}

func (s *Store) LockTaskGet(id string) (string, error) {
func (s *Service) LockTaskGet(id string) (string, error) {
return s.rdb.Get(context.Background(), lockTaskPrefix+id).Result()
}

func (s *Store) LockTaskDel(id string) error {
func (s *Service) LockTaskDel(id string) error {
return s.rdb.Del(context.Background(), lockTaskPrefix+id).Err()
}

func (s *Store) LockNodeSet(id string) error {
func (s *Service) LockNodeSet(id string) error {
return s.rdb.Set(context.Background(), lockNodePrefix+id, s.cfg.Instance, lockTimeout).Err()
}

func (s *Store) LockNodeGet(id string) (string, error) {
func (s *Service) LockNodeGet(id string) (string, error) {
return s.rdb.Get(context.Background(), lockNodePrefix+id).Result()
}

func (s *Store) LockNodeDel(id string) error {
func (s *Service) LockNodeDel(id string) error {
return s.rdb.Del(context.Background(), lockNodePrefix+id).Err()
}
25 changes: 23 additions & 2 deletions app/service/service.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,39 @@
package service

import (
"sb.im/gosd/app/config"
"sb.im/gosd/app/storage"

"github.com/go-redis/redis/v8"
"github.com/robfig/cron/v3"
"gorm.io/gorm"
)

type Service struct {
cfg *config.Config
orm *gorm.DB
rdb *redis.Client
ofs *storage.Storage
// https://pkg.go.dev/github.com/robfig/cron/v3#Cron.Start
cron *cron.Cron
}

func NewService(orm *gorm.DB, rdb *redis.Client) *Service {
return &Service{orm, rdb, cron.New()}
func NewService(cfg *config.Config, orm *gorm.DB, rdb *redis.Client, ofs *storage.Storage) *Service {
return &Service{cfg, orm, rdb, ofs, cron.New()}
}

func (s *Service) Cfg() *config.Config {
return s.cfg
}

func (s *Service) Orm() *gorm.DB {
return s.orm
}

func (s *Service) Rdb() *redis.Client {
return s.rdb
}

func (s *Service) Ofs() *storage.Storage {
return s.ofs
}
46 changes: 0 additions & 46 deletions app/store/store.go

This file was deleted.

0 comments on commit cdfe406

Please sign in to comment.