@@ -17,15 +17,7 @@ import (
1717 "gorm.io/gorm/clause"
1818)
1919
20- // DBStore implements the Store interface using a database
21- type DBStore struct {
22- logger * zap.Logger
23- db * gorm.DB
24- }
25-
26- var _ Store = (* DBStore )(nil )
27-
28- // DatabaseType represents the supported database types
20+ // DatabaseType represents the type of database
2921type DatabaseType string
3022
3123const (
@@ -34,18 +26,27 @@ const (
3426 SQLite DatabaseType = "sqlite"
3527)
3628
29+ // DBStore implements the Store interface using a database
30+ type DBStore struct {
31+ logger * zap.Logger
32+ db * gorm.DB
33+ cfg * config.StorageConfig
34+ }
35+
36+ var _ Store = (* DBStore )(nil )
37+
3738// NewDBStore creates a new database-based store
38- func NewDBStore (logger * zap.Logger , dbType DatabaseType , dsn string ) (* DBStore , error ) {
39+ func NewDBStore (logger * zap.Logger , cfg * config. StorageConfig ) (* DBStore , error ) {
3940 logger = logger .Named ("mcp.store.db" )
4041
4142 var dialector gorm.Dialector
42- switch dbType {
43+ switch DatabaseType ( cfg . Database . Type ) {
4344 case PostgreSQL :
44- dialector = postgres .Open (dsn )
45+ dialector = postgres .Open (cfg . Database . GetDSN () )
4546 case MySQL :
46- dialector = mysql .Open (dsn )
47+ dialector = mysql .Open (cfg . Database . GetDSN () )
4748 case SQLite :
48- dialector = sqlite .Open (dsn )
49+ dialector = sqlite .Open (cfg . Database . GetDSN () )
4950 default :
5051 return nil , gorm .ErrInvalidDB
5152 }
@@ -63,6 +64,7 @@ func NewDBStore(logger *zap.Logger, dbType DatabaseType, dsn string) (*DBStore,
6364 return & DBStore {
6465 logger : logger ,
6566 db : db ,
67+ cfg : cfg ,
6668 }, nil
6769}
6870
@@ -281,6 +283,23 @@ func (s *DBStore) Update(ctx context.Context, server *config.MCPConfig) error {
281283 return err
282284 }
283285
286+ // Delete old versions if revision history limit is set
287+ if s .cfg .RevisionHistoryLimit > 0 {
288+ var versionsToDelete []MCPConfigVersion
289+ if err := tx .Where ("tenant = ? AND name = ?" , server .Tenant , server .Name ).
290+ Order ("version DESC" ).
291+ Offset (s .cfg .RevisionHistoryLimit ).
292+ Find (& versionsToDelete ).Error ; err != nil {
293+ return err
294+ }
295+
296+ for _ , v := range versionsToDelete {
297+ if err := tx .Delete (& v ).Error ; err != nil {
298+ return err
299+ }
300+ }
301+ }
302+
284303 return nil
285304 })
286305}
0 commit comments