From 3f65d2f5d3cd2ba5b443631e3156bfd3105669d8 Mon Sep 17 00:00:00 2001 From: emahiro Date: Wed, 6 Dec 2023 16:57:37 +0900 Subject: [PATCH] fix: check timestamp in sync --- core/migration.go | 7 +++++++ core/service.go | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/core/migration.go b/core/migration.go index af1491e..c45e3da 100644 --- a/core/migration.go +++ b/core/migration.go @@ -3,6 +3,8 @@ package core import ( "io/ioutil" "os" + "strconv" + "time" "github.com/eure/kamimai/internal/cast" ) @@ -65,6 +67,11 @@ func (m *Migration) IsValid() bool { return m.version > 0 && m.name != "" } +func (m *Migration) IsValidTimestamp() bool { + _, err := time.Parse("20060102150405", strconv.FormatUint(m.version, 10)) + return err == nil +} + ////////////////////////////// // Migrations ////////////////////////////// diff --git a/core/service.go b/core/service.go index ac06522..03a1c30 100644 --- a/core/service.go +++ b/core/service.go @@ -256,10 +256,18 @@ func (s *Service) Sync() error { if err := s.apply(); err != nil { return err } + if len(s.data) == 0 { + return nil + } version := s.driver.Version() - + // 一番目のマイグレーションファイルが Timestamp 形式だったらそれ以降は Timestamp 扱いにする + isTimeStampVer := s.data[0].IsValidTimestamp() for _, mig := range s.data { + if isTimeStampVer != mig.IsValidTimestamp() { + return errors.New("invalid version format") + } + if count := version.Count(mig.version); count == 0 { // gets current index of migrations idx := s.data.index(*mig)