rethinkdb_setup.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. package stores
  2. import (
  3. log "github.com/alecthomas/log4go"
  4. r "github.com/dancannon/gorethink"
  5. )
  6. func createRethinkDBTablesAndIndices(config *RethinkCfg, session *r.Session) {
  7. r.DbCreate(config.DatabaseName).Exec(session)
  8. // create tables
  9. r.Db(config.DatabaseName).TableCreate("dashboards").Exec(session)
  10. r.Db(config.DatabaseName).TableCreate("accounts").Exec(session)
  11. r.Db(config.DatabaseName).TableCreate("master").Exec(session)
  12. // create dashboard accountId + slug index
  13. r.Db(config.DatabaseName).Table("dashboards").IndexCreateFunc("AccountIdSlug", func(row r.Term) interface{} {
  14. return []interface{}{row.Field("AccountId"), row.Field("Slug")}
  15. }).Exec(session)
  16. r.Db(config.DatabaseName).Table("dashboards").IndexCreate("AccountId").Exec(session)
  17. r.Db(config.DatabaseName).Table("accounts").IndexCreate("Login").Exec(session)
  18. // create account collaborator index
  19. r.Db(config.DatabaseName).Table("accounts").
  20. IndexCreateFunc("CollaboratorAccountId", func(row r.Term) interface{} {
  21. return row.Field("Collaborators").Map(func(row r.Term) interface{} {
  22. return row.Field("AccountId")
  23. })
  24. }, r.IndexCreateOpts{Multi: true}).Exec(session)
  25. // make sure master ids row exists
  26. _, err := r.Table("master").Insert(map[string]interface{}{"id": "ids", "NextAccountId": 0}).RunWrite(session)
  27. if err != nil {
  28. log.Error("Failed to insert master ids row", err)
  29. }
  30. }