main.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. "os"
  7. "github.com/gorilla/handlers"
  8. "github.com/jinzhu/gorm"
  9. "gogs.carducci-dante.gov.it/karmen/core/api"
  10. "gogs.carducci-dante.gov.it/karmen/core/config"
  11. "gogs.carducci-dante.gov.it/karmen/core/renderer"
  12. "gogs.carducci-dante.gov.it/karmen/orm"
  13. )
  14. func regenerateRelations(db *gorm.DB) error {
  15. var activities []orm.Activity
  16. if err := db.Find(&activities).Error; err != nil {
  17. return err
  18. }
  19. defer func() {
  20. if err := recover(); err != nil {
  21. log.Print(err)
  22. }
  23. }()
  24. for _, a := range activities {
  25. err := db.Save(&a).Error
  26. if err != nil {
  27. panic(err)
  28. }
  29. }
  30. return nil
  31. }
  32. func main() {
  33. log.Println("Loading config file...")
  34. err := config.Load("config/config.yaml", config.Config)
  35. if err != nil {
  36. panic(err)
  37. }
  38. log.Println("Starting karmen...")
  39. db, err := orm.New(fmt.Sprintf("%s?%s", config.Config.Orm.Connection, config.Config.Orm.Options))
  40. if err != nil {
  41. panic(err)
  42. }
  43. orm.Use(db)
  44. if config.Config.Orm.Reset {
  45. log.Print("Resetting the DB...")
  46. orm.Reset()
  47. }
  48. if config.Config.Orm.AutoMigrate {
  49. log.Print("Automigrating...")
  50. orm.AutoMigrate()
  51. }
  52. if config.Config.Orm.Regenerate {
  53. log.Print("Regenerate relations...")
  54. if err := regenerateRelations(db); err != nil {
  55. panic(err)
  56. }
  57. }
  58. rend, err := renderer.NewHTMLRenderer("templates/")
  59. if err != nil {
  60. panic(err)
  61. }
  62. renderer.Use(rend)
  63. log.Println("karmen is listening to port 3000...")
  64. if err := http.ListenAndServe(":3000", handlers.LoggingHandler(os.Stdout, api.Handlers())); err != nil {
  65. panic(err)
  66. }
  67. }