github.com/sharovik/devbot@v1.0.1-0.20240308094637-4a0387c40516/scripts/update/main.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  
     6  	"github.com/sharovik/devbot/internal/service/schedule"
     7  
     8  	"github.com/sharovik/devbot/internal/container"
     9  	"github.com/sharovik/devbot/internal/database"
    10  	"github.com/sharovik/devbot/internal/log"
    11  	"github.com/sharovik/devbot/internal/service/definedevents"
    12  	"github.com/sharovik/devbot/scripts/update/migrations"
    13  )
    14  
    15  const (
    16  	descriptionEventAlias = "The event alias for which Update method will be called"
    17  )
    18  
    19  var (
    20  	m = []database.BaseMigrationInterface{
    21  		migrations.ExampleMigration{},
    22  		migrations.EventsTriggersHistoryMigration{},
    23  		migrations.UpdateEventsTriggersHistoryMigration{},
    24  	}
    25  )
    26  
    27  func main() {
    28  	if err := run(); err != nil {
    29  		if err := container.C.Dictionary.CloseDatabaseConnection(); err != nil {
    30  			log.Logger().AddError(err).Msg("Failed to close connection")
    31  		}
    32  	}
    33  }
    34  
    35  func run() error {
    36  	cnt, err := container.Init()
    37  	if err != nil {
    38  		return err
    39  	}
    40  
    41  	container.C = cnt
    42  
    43  	definedevents.InitializeDefinedEvents()
    44  	schedule.InitS(container.C.Config, container.C.Dictionary.GetDBClient(), container.C.DefinedEvents)
    45  
    46  	if err := runMigrations(); err != nil {
    47  		log.Logger().AddError(err).Msg("Failed to run migrations")
    48  		return err
    49  	}
    50  
    51  	eventAlias := parseEventAlias()
    52  
    53  	if eventAlias != "" {
    54  		if container.C.DefinedEvents[eventAlias] == nil {
    55  			log.Logger().Info().Msg("Event is not defined in the defined-events")
    56  			return nil
    57  		}
    58  
    59  		if err := container.C.DefinedEvents[eventAlias].Update(); err != nil {
    60  			log.Logger().Info().Msg("Failed to update the event. Error:" + err.Error())
    61  			return err
    62  		}
    63  
    64  		log.Logger().Info().Msg("Done")
    65  		return nil
    66  	}
    67  
    68  	log.Logger().Debug().Msg("Trying to update all defined events if it's possible")
    69  	for eventAlias, event := range container.C.DefinedEvents {
    70  		if err := event.Update(); err != nil {
    71  			log.Logger().AddError(err).Str("event_alias", eventAlias).Msg("Failed to update the event.")
    72  		}
    73  	}
    74  
    75  	log.Logger().Info().Msg("Done")
    76  	return nil
    77  }
    78  
    79  func runMigrations() error {
    80  	for _, migration := range m {
    81  		container.C.MigrationService.SetMigration(migration)
    82  	}
    83  
    84  	if err := container.C.MigrationService.RunMigrations(); err != nil {
    85  		return err
    86  	}
    87  
    88  	return nil
    89  }
    90  
    91  func parseEventAlias() string {
    92  	eventAlias := flag.String("event_alias", "", descriptionEventAlias)
    93  	flag.Parse()
    94  
    95  	log.Logger().Info().Str("event_alias", *eventAlias).Msg("Parsed event alias")
    96  	return *eventAlias
    97  }