Skip to content

Commit 4336819

Browse files
Add automigrate function to database package. (google#241)
* Add database automigrate. * Align an error message with common Go formatting conventions * Improve error message for auto migration failure --------- Co-authored-by: Dmitry Pasiukevich <dpasiukevich@google.com>
1 parent f7322b1 commit 4336819

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

‎session/database/service.go‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,29 @@ type databaseService struct {
4343
func NewSessionService(dialector gorm.Dialector, opts ...gorm.Option) (session.Service, error) {
4444
db, err := gorm.Open(dialector, opts...)
4545
if err != nil {
46-
return nil, fmt.Errorf("error creating database session service :%w", err)
46+
return nil, fmt.Errorf("error creating database session service: %w", err)
4747
}
4848
return &databaseService{db: db}, nil
4949
}
5050

51+
// AutoMigrate runs the GORM auto-migration tool to ensure the database schema
52+
// matches the internal storage models (e.g., storageSession, storageEvent).
53+
//
54+
// NOTE: This function relies on a type assertion to the concrete *databaseService
55+
// implementation. It will return an error if the provided session.Service is
56+
// a different implementation.
57+
func AutoMigrate(service session.Service) error {
58+
dbservice, ok := service.(*databaseService)
59+
if !ok {
60+
return fmt.Errorf("invalid session service type")
61+
}
62+
err := dbservice.db.AutoMigrate(&storageSession{}, &storageEvent{}, &storageAppState{}, &storageUserState{})
63+
if err != nil {
64+
return fmt.Errorf("auto migrate failed: %w", err)
65+
}
66+
return nil
67+
}
68+
5169
// Create generates a session and inserts it to the db, implements session.Service
5270
func (s *databaseService) Create(ctx context.Context, req *session.CreateRequest) (*session.CreateResponse, error) {
5371
if req.AppName == "" || req.UserID == "" {

‎session/database/service_test.go‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -962,8 +962,12 @@ func emptyService(t *testing.T) *databaseService {
962962
if err != nil {
963963
t.Fatalf("Failed to create session service: %v", err)
964964
}
965-
dbservice := service.(*databaseService)
966-
err = dbservice.db.AutoMigrate(&storageSession{}, &storageEvent{}, &storageAppState{}, &storageUserState{})
965+
dbservice, ok := service.(*databaseService)
966+
if !ok {
967+
t.Fatalf("invalid session service type")
968+
}
969+
970+
err = AutoMigrate(service)
967971
if err != nil {
968972
t.Fatalf("Failed to AutoMigrate db: %v", err)
969973
}

0 commit comments

Comments
 (0)