From 37ed3f76f34b56c602b9878f51cbdd4f7131231d Mon Sep 17 00:00:00 2001 From: renaldybrada Date: Tue, 24 Feb 2026 10:54:16 +0700 Subject: [PATCH] initiate seeder : menu seeder --- migrations/seeder.go | 85 ++++++++++++++++++++++++++++++++++++++++++++ readme.md | 9 +++++ 2 files changed, 94 insertions(+) create mode 100644 migrations/seeder.go diff --git a/migrations/seeder.go b/migrations/seeder.go new file mode 100644 index 0000000..d74e3c1 --- /dev/null +++ b/migrations/seeder.go @@ -0,0 +1,85 @@ +package main + +import ( + "antrian-operasi/internal/config" + "antrian-operasi/internal/database" + utils "antrian-operasi/internal/utils/query" + "context" + "log" + + "github.com/google/uuid" +) + +const DB_ANTRIAN_OPERASI = "db_role_access" +const TBL_ROLE_PAGE = "role_pages" + +var dbService database.Service + +func main() { + cfg := config.LoadConfig() + dbService = database.New(cfg) + + ctx := context.Background() + err := seedRolePages(ctx, dbService) + if err != nil { + log.Fatal(err) + } + + defer dbService.Close() +} + +func seedRolePages(c context.Context, db database.Service) error { + dbconn, err := db.GetSQLXDB(DB_ANTRIAN_OPERASI) + if err != nil { + log.Fatal("unable to connect database antrian operasi") + return err + } + + qb := utils.NewQueryBuilder(utils.DBTypePostgreSQL).SetAllowedColumns([]string{ + "id", "name", "icon", "url", "level", "sort", "parent", + }).SetSecurityOptions(false, 100) + + idParentDashboard := uuid.New().String() + idParentAntrean := uuid.New().String() + idParentSettings := uuid.New().String() + + insertPageQuery := utils.InsertBulkData{ + Columns: []string{ + "id", "name", "icon", "url", "level", "sort", "parent", + }, + Values: [][]interface{}{ + {idParentDashboard, "Dashboard", nil, nil, 1, 1, nil}, + {uuid.New().String(), "Dashboard", "widget-add-line-duotone", "/dashboard", 2, 1, idParentDashboard}, + {idParentAntrean, "Antrean", nil, nil, 1, 2, nil}, + {uuid.New().String(), "Semua", "list-check-line-duotone", "/antrean/all", 2, 1, idParentAntrean}, + {uuid.New().String(), "Kategori", "layers-minimalistic-line-duotone", "/antrean/list-kategori", 2, 2, idParentAntrean}, + {uuid.New().String(), "Spesialis", "users-group-rounded-line-duotone", "/antrean/list-spesialis", 2, 3, idParentAntrean}, + {idParentSettings, "Pengaturan", nil, nil, 1, 3, nil}, + {uuid.New().String(), "Hak Akses", "shield-user-line-duotone", "/setting/hak-akses", 2, 1, idParentSettings}, + {uuid.New().String(), "User", "user-id-line-duotone", "/setting/user", 2, 2, idParentSettings}, + }, + } + + sql, args, err := qb.BuildBulkInsertQuery(TBL_ROLE_PAGE, insertPageQuery) + if err != nil { + log.Fatalf("fail creating query seed role pages, %v", err) + return err + } + + log.Println(sql, args) + + tx, err := dbconn.BeginTx(c, nil) + if err != nil { + log.Fatalf("fail starting transaction seed role pages, %v", err) + return err + } + _, err = tx.ExecContext(c, sql, args...) + if err != nil { + log.Fatalf("fail executing seed role pages query, %v", err) + return err + } + + tx.Commit() + + return nil +} diff --git a/readme.md b/readme.md index 175ad65..df297e3 100644 --- a/readme.md +++ b/readme.md @@ -77,4 +77,13 @@ Project ini menggunakan autentikasi dengan token dari keycloak. Untuk kebutuhan .. .. KEYCLOAK_IS_ENABLE=false +``` + +## Seed Data +Project ini menggunakan seed data untuk integrasi dengan component di frontend. +```bash +// masuk ke root project +cd + +go run ./migrations/seeder.go ``` \ No newline at end of file