github.com/mendersoftware/go-lib-micro@v0.0.0-20240304135804-e8e39c59b148/mongo/migrate/migrator_dummy.go (about) 1 // Copyright 2023 Northern.tech AS 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 package migrate 15 16 import ( 17 "context" 18 "errors" 19 "fmt" 20 21 "go.mongodb.org/mongo-driver/mongo" 22 23 "github.com/mendersoftware/go-lib-micro/log" 24 ) 25 26 // MigratorDummy does not actually apply migrations, just inserts the 27 // target version into the db to mark the initial/current state. 28 type DummyMigrator struct { 29 Client *mongo.Client 30 Db string 31 Automigrate bool 32 } 33 34 // Apply makes MigratorDummy implement the Migrator interface. 35 func (m *DummyMigrator) Apply(ctx context.Context, target Version, migrations []Migration) error { 36 l := log.FromContext(ctx).F(log.Ctx{"db": m.Db}) 37 38 applied, err := GetMigrationInfo(ctx, m.Client, m.Db) 39 if err != nil { 40 return err 41 } 42 43 if len(applied) > 1 { 44 return errors.New("dummy migrator cannot apply migrations, more than 1 already applied") 45 } 46 47 last := Version{} 48 if len(applied) == 1 { 49 last = applied[0].Version 50 } 51 52 if !m.Automigrate { 53 if VersionIsLess(last, target) { 54 return fmt.Errorf(ErrNeedsMigration+": %s has version %s, needs version %s", m.Db, last.String(), target.String()) 55 } else { 56 return nil 57 } 58 } 59 60 if VersionIsLess(last, target) { 61 l.Infof("applying migration from version %s to %s", last, target) 62 return UpdateMigrationInfo(ctx, target, m.Client, m.Db) 63 } else { 64 l.Infof("migration to version %s skipped", target) 65 } 66 67 return nil 68 }