focalboard/server/services/store/sqlstore/initialize.go
2021-10-26 21:11:19 -04:00

75 lines
1.8 KiB
Go

package sqlstore
import (
"encoding/json"
sq "github.com/Masterminds/squirrel"
"github.com/mattermost/focalboard/server/model"
"github.com/mattermost/focalboard/server/services/store"
"github.com/mattermost/focalboard/server/services/store/sqlstore/initializations"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
)
// InitializeTemplates imports default templates if the blocks table is empty.
func (s *SQLStore) InitializeTemplates() error {
isNeeded, err := s.isInitializationNeeded()
if err != nil {
return err
}
if isNeeded {
return s.importInitialTemplates()
}
return nil
}
func (s *SQLStore) importInitialTemplates() error {
s.logger.Debug("importInitialTemplates")
blocksJSON := initializations.MustAsset("templates.json")
var archive model.Archive
err := json.Unmarshal(blocksJSON, &archive)
if err != nil {
return err
}
globalContainer := store.Container{
WorkspaceID: "0",
}
s.logger.Debug("Inserting blocks", mlog.Int("block_count", len(archive.Blocks)))
for i := range archive.Blocks {
s.logger.Trace("insert block",
mlog.String("blockID", archive.Blocks[i].ID),
mlog.String("block_type", archive.Blocks[i].Type.String()),
mlog.String("block_title", archive.Blocks[i].Title),
)
err := s.InsertBlock(globalContainer, &archive.Blocks[i], "system")
if err != nil {
return err
}
}
return nil
}
// isInitializationNeeded returns true if the blocks table is empty.
func (s *SQLStore) isInitializationNeeded() (bool, error) {
query := s.getQueryBuilder(s.db).
Select("count(*)").
From(s.tablePrefix + "blocks").
Where(sq.Eq{"COALESCE(workspace_id, '0')": "0"})
row := query.QueryRow()
var count int
err := row.Scan(&count)
if err != nil {
s.logger.Error("isInitializationNeeded", mlog.Err(err))
return false, err
}
return (count == 0), nil
}