github.com/sharovik/devbot@v1.0.1-0.20240308094637-4a0387c40516/scripts/update/migrations/5-update-events-triggers-history-schema.go (about)

     1  package migrations
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/pkg/errors"
     7  	"github.com/sharovik/devbot/internal/container"
     8  	"github.com/sharovik/devbot/internal/dto/databasedto"
     9  	"github.com/sharovik/orm/clients"
    10  	"github.com/sharovik/orm/dto"
    11  	"github.com/sharovik/orm/query"
    12  )
    13  
    14  type UpdateEventsTriggersHistoryMigration struct {
    15  	Client clients.BaseClientInterface
    16  }
    17  
    18  func (m UpdateEventsTriggersHistoryMigration) SetClient(client clients.BaseClientInterface) {
    19  	m.Client = client
    20  }
    21  
    22  func (m UpdateEventsTriggersHistoryMigration) GetName() string {
    23  	return "update-events-triggers-history-schema"
    24  }
    25  
    26  func (m UpdateEventsTriggersHistoryMigration) Execute() error {
    27  	client := container.C.Dictionary.GetDBClient()
    28  
    29  	q := new(clients.Query).Drop(databasedto.EventTriggerHistoryModel)
    30  	if _, err := client.Execute(q); err != nil {
    31  		return errors.Wrap(err, fmt.Sprintf("Failed to drop %s table", databasedto.EventTriggerHistoryModel.GetTableName()))
    32  	}
    33  
    34  	//Create events table
    35  	q = new(clients.Query).
    36  		Create(databasedto.EventTriggerHistoryModel).
    37  		AddIndex(dto.Index{
    38  			Name:   "user_id_index",
    39  			Target: databasedto.EventTriggerHistoryModel.GetTableName(),
    40  			Key:    "user",
    41  			Unique: false,
    42  		}).
    43  		AddIndex(dto.Index{
    44  			Name:   "channel_index",
    45  			Target: databasedto.EventTriggerHistoryModel.GetTableName(),
    46  			Key:    "channel",
    47  			Unique: false,
    48  		}).
    49  		AddIndex(dto.Index{
    50  			Name:   "created_index",
    51  			Target: databasedto.EventTriggerHistoryModel.GetTableName(),
    52  			Key:    "created",
    53  			Unique: false,
    54  		}).
    55  		AddForeignKey(dto.ForeignKey{
    56  			Name: "event_id",
    57  			Target: query.Reference{
    58  				Table: databasedto.EventModel.GetTableName(),
    59  				Key:   "id",
    60  			},
    61  			With: query.Reference{
    62  				Table: databasedto.EventTriggerHistoryModel.GetTableName(),
    63  				Key:   "event_id",
    64  			},
    65  			OnDelete: dto.CascadeAction,
    66  			OnUpdate: dto.NoActionAction,
    67  		}).
    68  		AddForeignKey(dto.ForeignKey{
    69  			Name: "scenario_id",
    70  			Target: query.Reference{
    71  				Table: databasedto.ScenariosModel.GetTableName(),
    72  				Key:   "id",
    73  			},
    74  			With: query.Reference{
    75  				Table: databasedto.EventTriggerHistoryModel.GetTableName(),
    76  				Key:   "scenario_id",
    77  			},
    78  			OnDelete: dto.CascadeAction,
    79  			OnUpdate: dto.NoActionAction,
    80  		})
    81  	if _, err := client.Execute(q); err != nil {
    82  		return errors.Wrap(err, fmt.Sprintf("Failed to create %s table", databasedto.EventTriggerHistoryModel.GetTableName()))
    83  	}
    84  
    85  	return nil
    86  }