Commit 83fdf144 authored by zhengyaoqiu's avatar zhengyaoqiu

feat(colorway): 代码优化

parent 5dfde887
......@@ -11,23 +11,28 @@ import (
"sync"
)
type Cache[T any] interface {
ChangeStreamFilter(data ChangeStreamData) bson.M
type ChangeStream[T any] interface {
DocumentEqual(a, b T) bool
Filter(data ChangeStreamData) bson.M
}
type Cache[T any] interface {
GetCacheDocuments() []T
StartCache(ctx context.Context) error
}
type Base[T any] struct {
baseModel model.Model[T]
changeStream ChangeStream[T]
documents []T
rwMutex *sync.RWMutex
}
func NewBase[T any](baseModel model.Model[T]) *Base[T] {
return &Base[T]{baseModel: baseModel}
func NewBase[T any](baseModel model.Model[T], changeStream ChangeStream[T]) *Base[T] {
return &Base[T]{baseModel: baseModel, changeStream: changeStream}
}
func (receiver *Base[T]) StartCache(ctx context.Context, cache Cache[T]) error {
func (receiver *Base[T]) StartCache(ctx context.Context) error {
documents, _, err := receiver.baseModel.Find(ctx, bson.M{})
if err != nil {
return err
......@@ -48,7 +53,7 @@ func (receiver *Base[T]) StartCache(ctx context.Context, cache Cache[T]) error {
log.Println(err)
continue
}
filter := cache.ChangeStreamFilter(changeStreamData)
filter := receiver.changeStream.Filter(changeStreamData)
document, err := receiver.baseModel.FindOne(ctx, filter)
if err != nil {
log.Println(err)
......@@ -56,7 +61,7 @@ func (receiver *Base[T]) StartCache(ctx context.Context, cache Cache[T]) error {
}
documents := receiver.GetCacheDocuments()
for i := range documents {
if cache.DocumentEqual(documents[i], document) {
if receiver.changeStream.DocumentEqual(documents[i], document) {
documents[i] = document
}
}
......@@ -86,7 +91,7 @@ func (receiver *Base[T]) setAllDocuments(documents []T) {
receiver.documents = documents
}
func (receiver *Base[T]) ChangeStreamFilter(data ChangeStreamData) bson.M {
func (receiver *Base[T]) Filter(data ChangeStreamData) bson.M {
id, err := primitive.ObjectIDFromHex(data.DocumentKey.Id.Oid)
if err != nil {
return nil
......
package mongo
import (
"context"
productModel "git.chillcy.com/golang/colorway/internal/pkg/database/mongo/model/product"
sitePlatformPriceConfigModel "git.chillcy.com/golang/colorway/internal/pkg/database/mongo/model/site_platform_price_config"
)
......@@ -18,3 +19,11 @@ func NewManager(mongoUrl string) *Manager {
SitePlatformPriceConfigModel: sitePlatformPriceConfigModel.NewSitePlatformPriceConfigModel(mongoUrl, DatabaseColorWay, sitePlatformPriceConfigModel.Collection),
}
}
func (receiver *Manager) StartCache() error {
err := receiver.SitePlatformPriceConfigModel.StartCache(context.Background())
if err != nil {
return err
}
}
......@@ -13,6 +13,7 @@ type (
SitePlatformPriceConfigModel interface {
sitePlatformPriceConfigModel
cache.Cache[SitePlatformPriceConfig]
cache.ChangeStream[SitePlatformPriceConfig]
}
customSitePlatformPriceConfigModel struct {
......@@ -25,10 +26,11 @@ type (
func NewSitePlatformPriceConfigModel(url, db, collection string) SitePlatformPriceConfigModel {
conn := mon.MustNewModel(url, db, collection)
defaultModel := newDefaultSitePlatformPriceConfigModel(conn)
return &customSitePlatformPriceConfigModel{
customModel := &customSitePlatformPriceConfigModel{
defaultSitePlatformPriceConfigModel: defaultModel,
Base: cache.NewBase[SitePlatformPriceConfig](defaultModel),
}
customModel.Base = cache.NewBase[SitePlatformPriceConfig](defaultModel, customModel)
return customModel
}
func (receiver *customSitePlatformPriceConfigModel) DocumentEqual(a, b SitePlatformPriceConfig) bool {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment