summaryrefslogtreecommitdiff
path: root/src/cmd/export/main.go
blob: 23fa64320f826c0be25f74bd760d30b847107324 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package main

import (
	"context"

	cfgpkg "dev.mediocregopher.com/mediocre-blog.git/src/cfg"
	"dev.mediocregopher.com/mediocre-blog.git/src/gmi"
	"dev.mediocregopher.com/mediocre-blog.git/src/http"
	"dev.mediocregopher.com/mediocre-blog.git/src/post"
	"dev.mediocregopher.com/mediocre-blog.git/src/post/asset"
	"dev.mediocregopher.com/mediocre-blog.git/src/render"
	"dev.mediocregopher.com/mediocre-go-lib.git/mlog"
)

func main() {
	var (
		ctx        = context.Background()
		cfg        = cfgpkg.NewBlogCfg(cfgpkg.Params{})
		dataDir    cfgpkg.DataDir
		httpParams http.Params
		gmiParams  gmi.Params
	)

	dataDir.SetupCfg(cfg)
	defer dataDir.Close()

	httpParams.SetupCfg(cfg)
	gmiParams.SetupCfg(cfg)

	exportDirPath := cfg.String("export-dir-path", "", "Directory to export into")

	// initialization
	err := cfg.Init(ctx)

	logger := mlog.NewLogger(nil)
	defer logger.Close()

	logger.Info(ctx, "process started")
	defer logger.Info(ctx, "process exiting")

	if err != nil {
		logger.Fatal(ctx, "initializing", err)
	}

	if *exportDirPath == "" {
		logger.FatalString(ctx, "--export-dir-path is required")
	}

	postSQLDB, err := post.NewSQLDB(dataDir)
	if err != nil {
		logger.Fatal(ctx, "initializing sql db for post data", err)
	}
	defer postSQLDB.Close()

	var (
		urlBuilder = render.NewURLBuilder(
			gmiParams.PublicURL,
			httpParams.PublicURL,
			gmiParams.PublicURL,
		)
		postStore      = post.NewStore(postSQLDB)
		postAssetStore = asset.NewStore(postSQLDB)
		//postDraftStore  = post.NewDraftStore(postSQLDB)
	)

	err = exportPosts(
		ctx,
		logger.WithNamespace("posts"),
		postStore,
		urlBuilder,
		*exportDirPath,
	)
	if err != nil {
		logger.Fatal(ctx, "Failed to export post data", err)
	}

	err = exportAssets(
		ctx,
		logger.WithNamespace("assets"),
		postAssetStore,
		*exportDirPath,
	)
	if err != nil {
		logger.Fatal(ctx, "Failed to export asset data", err)
	}
}