focalboard/server/services/store/sqlstore/initialize.go

76 lines
1.8 KiB
Go
Raw Normal View History

package sqlstore
import (
"encoding/json"
2021-04-26 13:43:02 +02:00
sq "github.com/Masterminds/squirrel"
2021-01-26 23:13:46 +01:00
"github.com/mattermost/focalboard/server/model"
2021-03-26 19:01:54 +01:00
"github.com/mattermost/focalboard/server/services/store"
2021-01-26 23:13:46 +01:00
"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
}
2021-03-26 19:01:54 +01:00
globalContainer := store.Container{
2021-03-30 23:04:00 +02:00
WorkspaceID: "0",
2021-03-26 19:01:54 +01:00
}
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),
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().
Select("count(*)").
2021-04-26 13:43:02 +02:00
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
}