diff --git a/.gitignore b/.gitignore index 897e386..5aed900 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,6 @@ nimcache/ # Compiled files chat_sdk/* +!*.nim +apps/* !*.nim \ No newline at end of file diff --git a/apps/nim.cfg b/apps/nim.cfg new file mode 100644 index 0000000..d4a2be8 --- /dev/null +++ b/apps/nim.cfg @@ -0,0 +1 @@ +path = ".." \ No newline at end of file diff --git a/apps/run_migration.nim b/apps/run_migration.nim new file mode 100644 index 0000000..577fc77 --- /dev/null +++ b/apps/run_migration.nim @@ -0,0 +1,12 @@ +import db_connector/db_sqlite +import chat_sdk/migration + +proc main() = + let db = open("test.db", "", "", "") + try: + runMigrations(db) + finally: + db.close() + +when isMainModule: + main() \ No newline at end of file diff --git a/chat_sdk.nimble b/chat_sdk.nimble index 6a66714..e52efb9 100644 --- a/chat_sdk.nimble +++ b/chat_sdk.nimble @@ -18,4 +18,4 @@ task buildStaticLib, "Build static library for C bindings": exec "nim c --app:staticLib --out:../library/c-bindings/libchatsdk.a chat_sdk/chat_sdk.nim" task migrate, "Run database migrations": - exec "nim c -r chat_sdk/migration.nim" \ No newline at end of file + exec "nim c -r apps/run_migration.nim" \ No newline at end of file diff --git a/chat_sdk/migration.nim b/chat_sdk/migration.nim index 31269ac..c5edb3d 100644 --- a/chat_sdk/migration.nim +++ b/chat_sdk/migration.nim @@ -1,5 +1,6 @@ -import os, osproc, sequtils, algorithm +import os, sequtils, algorithm import db_connector/db_sqlite +import chronicles proc ensureMigrationTable(db: DbConn) = db.exec(sql""" @@ -18,23 +19,16 @@ proc markMigrationRun(db: DbConn, filename: string) = db.exec(sql"INSERT INTO schema_migrations (filename) VALUES (?)", filename) proc runMigrations*(db: DbConn, dir = "migrations") = + info "Migration process starting up" ensureMigrationTable(db) let files = walkFiles(dir / "*.sql").toSeq().sorted() for file in files: if hasMigrationRun(db, file): - echo "Already applied: ", file + info "Migration already applied", file + info "..." else: - echo "Applying: ", file + info "Applying migration", file + info "..." let sql = readFile(file) db.exec(sql(sql)) markMigrationRun(db, file) - -proc main() = - let db = open("test.db", "", "", "") - try: - runMigrations(db) - finally: - db.close() - -when isMainModule: - main() \ No newline at end of file