Encrypted messaging app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
1.3 KiB

  1. package Database
  2. import (
  3. "log"
  4. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Models"
  5. "gorm.io/driver/postgres"
  6. "gorm.io/gorm"
  7. )
  8. const (
  9. dbURL = "postgres://postgres:password@postgres:5432/capsule"
  10. dbTestURL = "postgres://postgres:password@postgres-testing:5432/capsule-testing"
  11. )
  12. // DB db
  13. var DB *gorm.DB
  14. func getModels() []interface{} {
  15. return []interface{}{
  16. &Models.Session{},
  17. &Models.Attachment{},
  18. &Models.User{},
  19. &Models.FriendRequest{},
  20. &Models.MessageData{},
  21. &Models.Message{},
  22. &Models.ConversationDetail{},
  23. &Models.ConversationDetailUser{},
  24. &Models.UserConversation{},
  25. }
  26. }
  27. // Init initializes the database connection
  28. func Init() {
  29. var (
  30. model interface{}
  31. err error
  32. )
  33. log.Println("Initializing database...")
  34. DB, err = gorm.Open(postgres.Open(dbURL), &gorm.Config{})
  35. if err != nil {
  36. log.Fatalln(err)
  37. }
  38. log.Println("Running AutoMigrate...")
  39. for _, model = range getModels() {
  40. err = DB.AutoMigrate(model)
  41. if err != nil {
  42. log.Fatalln(err)
  43. }
  44. }
  45. }
  46. // InitTest initializes the test datbase
  47. func InitTest() {
  48. var (
  49. model interface{}
  50. err error
  51. )
  52. DB, err = gorm.Open(postgres.Open(dbTestURL), &gorm.Config{})
  53. if err != nil {
  54. log.Fatalln(err)
  55. }
  56. for _, model = range getModels() {
  57. DB.Migrator().DropTable(model)
  58. DB.AutoMigrate(model)
  59. }
  60. }