feat(cache): implement cache clearing for node operations and add delete methods

This commit is contained in:
Chang lue Tsen 2025-09-27 11:24:29 -04:00
parent d2ca3eb961
commit 64f0bcc55a
6 changed files with 60 additions and 6 deletions

View File

@ -2,7 +2,9 @@ package server
import (
"context"
"strings"
"github.com/perfect-panel/server/internal/model/node"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/pkg/logger"
@ -26,10 +28,20 @@ func NewDeleteNodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Delete
}
func (l *DeleteNodeLogic) DeleteNode(req *types.DeleteNodeRequest) error {
err := l.svcCtx.NodeModel.DeleteNode(l.ctx, req.Id)
data, err := l.svcCtx.NodeModel.FindOneNode(l.ctx, req.Id)
err = l.svcCtx.NodeModel.DeleteNode(l.ctx, req.Id)
if err != nil {
l.Errorw("[DeleteNode] Delete Database Error: ", logger.Field("error", err.Error()))
return errors.Wrapf(xerr.NewErrCode(xerr.DatabaseDeletedError), "[DeleteNode] Delete Database Error")
}
return nil
return l.svcCtx.NodeModel.ClearNodeCache(l.ctx, &node.FilterNodeParams{
Page: 1,
Size: 1000,
ServerId: []int64{data.ServerId},
Tag: strings.Split(data.Tags, ","),
Search: "",
Protocol: data.Protocol,
})
}

View File

@ -3,6 +3,7 @@ package server
import (
"context"
"github.com/perfect-panel/server/internal/model/node"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/pkg/logger"
@ -31,5 +32,10 @@ func (l *DeleteServerLogic) DeleteServer(req *types.DeleteServerRequest) error {
l.Errorw("[DeleteServer] Delete Server Error: ", logger.Field("error", err.Error()))
return errors.Wrapf(xerr.NewErrCode(xerr.DatabaseDeletedError), "[DeleteServer] Delete Server Error")
}
return nil
return l.svcCtx.NodeModel.ClearNodeCache(l.ctx, &node.FilterNodeParams{
Page: 1,
Size: 1000,
ServerId: []int64{req.Id},
Search: "",
})
}

View File

@ -2,7 +2,9 @@ package server
import (
"context"
"strings"
"github.com/perfect-panel/server/internal/model/node"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/pkg/logger"
@ -39,5 +41,11 @@ func (l *ToggleNodeStatusLogic) ToggleNodeStatus(req *types.ToggleNodeStatusRequ
return errors.Wrapf(xerr.NewErrCode(xerr.DatabaseUpdateError), "[ToggleNodeStatus] Update Database Error")
}
return nil
return l.svcCtx.NodeModel.ClearNodeCache(l.ctx, &node.FilterNodeParams{
Page: 1,
Size: 1000,
ServerId: []int64{data.ServerId},
Tag: strings.Split(data.Tags, ","),
Search: "",
})
}

View File

@ -3,6 +3,7 @@ package server
import (
"context"
"github.com/perfect-panel/server/internal/model/node"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/pkg/logger"
@ -44,5 +45,10 @@ func (l *UpdateNodeLogic) UpdateNode(req *types.UpdateNodeRequest) error {
l.Errorw("[UpdateNode] Update Database Error: ", logger.Field("error", err.Error()))
return errors.Wrapf(xerr.NewErrCode(xerr.DatabaseUpdateError), "[UpdateNode] Update Database Error")
}
return nil
return l.svcCtx.NodeModel.ClearNodeCache(l.ctx, &node.FilterNodeParams{
Page: 1,
Size: 1000,
ServerId: []int64{data.ServerId},
Search: "",
})
}

View File

@ -111,5 +111,10 @@ func (l *UpdateServerLogic) UpdateServer(req *types.UpdateServerRequest) error {
return errors.Wrapf(xerr.NewErrCode(xerr.DatabaseUpdateError), "update server error: %v", err.Error())
}
return nil
return l.svcCtx.NodeModel.ClearNodeCache(l.ctx, &node.FilterNodeParams{
Page: 1,
Size: 1000,
ServerId: []int64{req.Id},
Search: "",
})
}

View File

@ -66,6 +66,12 @@ func (m *customServerModel) UpdateStatusCache(ctx context.Context, serverId int6
}
// DeleteStatusCache Delete server status from cache
func (m *customServerModel) DeleteStatusCache(ctx context.Context, serverId int64) error {
key := fmt.Sprintf(StatusCacheKey, serverId)
return m.Cache.Del(ctx, key).Err()
}
// StatusCache Get server status from cache
func (m *customServerModel) StatusCache(ctx context.Context, serverId int64) (Status, error) {
var status Status
@ -113,6 +119,12 @@ func (m *customServerModel) UpdateOnlineUserSubscribe(ctx context.Context, serve
return m.Cache.Set(ctx, key, data, Expiry).Err()
}
// DeleteOnlineUserSubscribe Delete online user subscribe
func (m *customServerModel) DeleteOnlineUserSubscribe(ctx context.Context, serverId int64, protocol string) error {
key := fmt.Sprintf(OnlineUserCacheKeyWithSubscribe, serverId, protocol)
return m.Cache.Del(ctx, key).Err()
}
// OnlineUserSubscribeGlobal Get global online user subscribe count
func (m *customServerModel) OnlineUserSubscribeGlobal(ctx context.Context) (int64, error) {
now := time.Now().Unix()
@ -144,3 +156,8 @@ func (m *customServerModel) UpdateOnlineUserSubscribeGlobal(ctx context.Context,
_, err := pipe.Exec(ctx)
return err
}
// DeleteOnlineUserSubscribeGlobal Delete global online user subscribe count
func (m *customServerModel) DeleteOnlineUserSubscribeGlobal(ctx context.Context) error {
return m.Cache.Del(ctx, OnlineUserSubscribeCacheKeyWithGlobal).Err()
}