migrate from github
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
package document_repo
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
cache_loader "github.com/XingfenD/yoresee_doc/internal/cache"
|
||||
"github.com/XingfenD/yoresee_doc/internal/model"
|
||||
"github.com/XingfenD/yoresee_doc/pkg/key"
|
||||
"github.com/redis/go-redis/v9"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type DocumentRepository struct {
|
||||
db *gorm.DB
|
||||
redis *redis.Client
|
||||
Loader cache_loader.Loader
|
||||
}
|
||||
|
||||
func NewDocumentRepository(db *gorm.DB, redis *redis.Client) *DocumentRepository {
|
||||
return &DocumentRepository{
|
||||
db: db,
|
||||
redis: redis,
|
||||
Loader: *cache_loader.NewLoader(redis),
|
||||
}
|
||||
}
|
||||
|
||||
type DocumentDeleteOperation struct {
|
||||
repo *DocumentRepository
|
||||
id int64
|
||||
tx *gorm.DB
|
||||
ctx context.Context
|
||||
}
|
||||
|
||||
func (r *DocumentRepository) Delete(id int64) *DocumentDeleteOperation {
|
||||
return &DocumentDeleteOperation{
|
||||
repo: r,
|
||||
id: id,
|
||||
ctx: context.Background(),
|
||||
}
|
||||
}
|
||||
|
||||
func (op *DocumentDeleteOperation) WithTx(tx *gorm.DB) *DocumentDeleteOperation {
|
||||
op.tx = tx
|
||||
return op
|
||||
}
|
||||
|
||||
func (op *DocumentDeleteOperation) WithContext(ctx context.Context) *DocumentDeleteOperation {
|
||||
op.ctx = ctx
|
||||
return op
|
||||
}
|
||||
|
||||
func (op *DocumentDeleteOperation) Exec() error {
|
||||
var doc model.Document
|
||||
var db *gorm.DB
|
||||
var err error
|
||||
|
||||
if op.tx != nil {
|
||||
db = op.tx
|
||||
} else {
|
||||
db = op.repo.db
|
||||
}
|
||||
|
||||
if err := db.First(&doc, op.id).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if op.tx == nil {
|
||||
db = db.Begin()
|
||||
defer func() {
|
||||
if err != nil {
|
||||
db.Rollback()
|
||||
} else {
|
||||
db.Commit()
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
if err := db.Delete(&model.Document{}, op.id).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if op.tx == nil {
|
||||
docCacheKey := key.KeyModelByExternalID(key.KeyObjectTypeEnum_Doc, doc.ExternalID)
|
||||
if err := op.repo.redis.Del(op.ctx, docCacheKey).Err(); err != nil {
|
||||
}
|
||||
|
||||
if err := op.repo.BumpSubtreeVersionsByPath(op.ctx, doc.Path); err != nil {
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user