/* * Copyright 2026 Oleg Borodin */ package main import ( "context" "os" "mbase/app/config" "mbase/app/maindb" "mbase/pkg/auxtool" "mbase/pkg/descr" "github.com/spf13/cobra" "go.yaml.in/yaml/v4" ) func (util *Util) DumpDatabase(cmd *cobra.Command, args []string) { util.dumpDatabaseParams.Filename = args[0] res, err := util.dumpDatabase(util.dumpDatabaseParams) printResponse(res, err) } type dumpDatabaseParams struct { Filename string } type dumpDatabaseResult struct{} func (util *Util) dumpDatabase(params dumpDatabaseParams) (dumpDatabaseResult, error) { var err error res := dumpDatabaseResult{} ctx := context.Background() conf := config.NewConfig() err = conf.ReadFile() if err != nil { return res, err } err = conf.ReadEnv() if err != nil { return res, err } db, err := maindb.NewDatabase(conf.DataDir) if err != nil { return res, err } err = db.OpenDatabase() if err != nil { return res, err } file := os.Stdout if params.Filename != "-" { file, err = os.OpenFile(params.Filename, os.O_CREATE|os.O_WRONLY, 0640) if err != nil { return res, err } defer file.Close() } listAccounts, err := db.CompletedListAccounts(ctx) if err != nil { return res, err } listGrants, err := db.ListGrants(ctx) if err != nil { return res, err } dump := descr.Dump{ Timestamp: auxtool.TimeNow(), Accounts: listAccounts, Grants: listGrants, } dumpBytes, err := yaml.Marshal(dump) if err != nil { return res, err } _, err = file.Write(dumpBytes) if err != nil { return res, err } return res, err }