1700000000_init.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Package migrations contains PocketBase schema migrations for jamtrack.
  2. package migrations
  3. import (
  4. "github.com/pocketbase/pocketbase/core"
  5. )
  6. func init() {
  7. core.AppMigrations.Register(func(app core.App) error {
  8. // locations — domain table for jam venues
  9. locations := core.NewBaseCollection("locations")
  10. locations.Fields.Add(&core.TextField{Name: "name", Required: true})
  11. locations.Fields.Add(&core.TextField{Name: "notes"})
  12. locations.AddIndex("idx_locations_name", true, "name", "")
  13. if err := app.Save(locations); err != nil {
  14. return err
  15. }
  16. // songs — catalog of all songs ever seen on a board
  17. songs := core.NewBaseCollection("songs")
  18. songs.Fields.Add(&core.TextField{Name: "title", Required: true})
  19. songs.Fields.Add(&core.TextField{Name: "artist", Required: true})
  20. songs.Fields.Add(&core.TextField{Name: "notes"})
  21. songs.AddIndex("idx_songs_artist_title", true, "artist,title", "")
  22. if err := app.Save(songs); err != nil {
  23. return err
  24. }
  25. // jams — one record per jam session
  26. jams := core.NewBaseCollection("jams")
  27. jams.Fields.Add(&core.DateField{Name: "date", Required: true})
  28. jams.Fields.Add(&core.RelationField{
  29. Name: "location",
  30. Required: true,
  31. CollectionId: locations.Id,
  32. MaxSelect: 1,
  33. })
  34. jams.Fields.Add(&core.TextField{Name: "participants"})
  35. jams.Fields.Add(&core.FileField{
  36. Name: "board_photo",
  37. MaxSelect: 1,
  38. MimeTypes: []string{"image/jpeg", "image/png", "image/gif", "image/webp"},
  39. })
  40. jams.Fields.Add(&core.TextField{Name: "notes"})
  41. if err := app.Save(jams); err != nil {
  42. return err
  43. }
  44. // setlist — junction: one row per song proposed at a jam
  45. setlist := core.NewBaseCollection("setlist")
  46. setlist.Fields.Add(&core.RelationField{
  47. Name: "jam",
  48. Required: true,
  49. CollectionId: jams.Id,
  50. MaxSelect: 1,
  51. CascadeDelete: true,
  52. })
  53. setlist.Fields.Add(&core.RelationField{
  54. Name: "song",
  55. Required: true,
  56. CollectionId: songs.Id,
  57. MaxSelect: 1,
  58. })
  59. setlist.Fields.Add(&core.BoolField{Name: "played"})
  60. setlist.Fields.Add(&core.NumberField{Name: "position"})
  61. setlist.AddIndex("idx_setlist_jam_song", true, "jam,song", "")
  62. if err := app.Save(setlist); err != nil {
  63. return err
  64. }
  65. // configure the built-in users auth collection:
  66. // - username identity (not email)
  67. // - no self-registration (CreateRule = nil means API create is forbidden)
  68. users, err := app.FindCollectionByNameOrId("users")
  69. if err != nil {
  70. return err
  71. }
  72. users.Fields.Add(&core.TextField{Name: "username", Required: true})
  73. users.AddIndex("idx_users_username", true, "username", "")
  74. users.PasswordAuth.Enabled = true
  75. users.PasswordAuth.IdentityFields = []string{"username"}
  76. users.CreateRule = nil
  77. return app.Save(users)
  78. }, func(app core.App) error {
  79. for _, name := range []string{"setlist", "jams", "songs", "locations"} {
  80. col, err := app.FindCollectionByNameOrId(name)
  81. if err != nil {
  82. return err
  83. }
  84. if err := app.Delete(col); err != nil {
  85. return err
  86. }
  87. }
  88. // revert users to email identity + allow self-registration
  89. users, err := app.FindCollectionByNameOrId("users")
  90. if err != nil {
  91. return err
  92. }
  93. usernameField := users.Fields.GetByName("username")
  94. if usernameField != nil {
  95. users.Fields.RemoveById(usernameField.GetId())
  96. }
  97. users.RemoveIndex("idx_users_username")
  98. users.PasswordAuth.IdentityFields = []string{"email"}
  99. users.CreateRule = func() *string { s := ""; return &s }()
  100. return app.Save(users)
  101. })
  102. }
PANIC: session(release): write data/sessions/a/9/a9acddc643731595: no space left on device

PANIC

session(release): write data/sessions/a/9/a9acddc643731595: no space left on device
/my/cache/.heroku/go/go-path/pkg/mod/github.com/go-macaron/session@v1.0.3/session.go:204 (0xb13e07)
/my/cache/.heroku/go/go-path/pkg/mod/gopkg.in/macaron.v1@v1.5.1/context.go:80 (0x967b75)
/my/cache/.heroku/go/go-path/pkg/mod/github.com/go-macaron/inject@v0.0.0-20200308113650-138e5925c53b/inject.go:157 (0x9512ee)
/my/cache/.heroku/go/go-path/pkg/mod/github.com/go-macaron/inject@v0.0.0-20200308113650-138e5925c53b/inject.go:135 (0x951205)
/my/cache/.heroku/go/go-path/pkg/mod/gopkg.in/macaron.v1@v1.5.1/context.go:124 (0x967cc4)
/my/cache/.heroku/go/go-path/pkg/mod/gopkg.in/macaron.v1@v1.5.1/context.go:114 (0x967bf6)
/my/cache/.heroku/go/go-path/pkg/mod/gopkg.in/macaron.v1@v1.5.1/recovery.go:161 (0x15baec4)
/my/cache/.heroku/go/go-path/pkg/mod/gopkg.in/macaron.v1@v1.5.1/logger.go:40 (0x96b257)
/my/cache/.heroku/go/go-path/pkg/mod/github.com/go-macaron/inject@v0.0.0-20200308113650-138e5925c53b/inject.go:157 (0x9512ee)
/my/cache/.heroku/go/go-path/pkg/mod/github.com/go-macaron/inject@v0.0.0-20200308113650-138e5925c53b/inject.go:135 (0x951205)
/my/cache/.heroku/go/go-path/pkg/mod/gopkg.in/macaron.v1@v1.5.1/context.go:124 (0x967cc4)
/my/cache/.heroku/go/go-path/pkg/mod/gopkg.in/macaron.v1@v1.5.1/router.go:187 (0x972959)
/my/cache/.heroku/go/go-path/pkg/mod/gopkg.in/macaron.v1@v1.5.1/router.go:304 (0x973a01)
/my/cache/.heroku/go/go-path/pkg/mod/gopkg.in/macaron.v1@v1.5.1/macaron.go:218 (0x96c572)
/my/cache/.heroku/go/go1.26.3/go/src/net/http/server.go:3311 (0x85a5cd)
/my/cache/.heroku/go/go1.26.3/go/src/net/http/server.go:2073 (0x837f6f)
/my/cache/.heroku/go/go1.26.3/go/src/runtime/asm_amd64.s:1771 (0x493380)