I intend to use this privately for music organization.

migrations.moon 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import create_table, rename_column, add_column, types from require "lapis.db.schema"
  2. import process_tags from require "helpers"
  3. import Tracks, Tags from require "models"
  4. {
  5. [1]: =>
  6. create_table "tracks", {
  7. { "id", types.serial primary_key: true }
  8. { "artist", types.text null: true }
  9. { "name", types.text null: true }
  10. { "url", types.text null: true }
  11. { "status", types.integer default: 1 }
  12. }
  13. [2]: =>
  14. rename_column "tracks", "name", "title"
  15. rename_column "tracks", "url", "link"
  16. for column in *{
  17. { "art_url", types.text null: true }
  18. { "file_url", types.text null: true }
  19. { "file_size", types.integer null: true }
  20. { "album", types.text null: true }
  21. { "genre", types.text null: true }
  22. { "tags", types.text default: " untagged " }
  23. { "quality", types.integer default: 1 }
  24. { "mood", types.text null: true }
  25. }
  26. add_column "tracks", unpack column
  27. [3]: =>
  28. return true -- formerly a bad migration
  29. [4]: =>
  30. return true -- formerly a bad migration
  31. [5]: =>
  32. create_table "tags", {
  33. { "id", types.serial primary_key: true }
  34. { "name", types.text unique: true }
  35. { "count", types.integer default: -1 }
  36. }
  37. tags = {}
  38. for track in *Tracks\select "*"
  39. for name in track.tags\gmatch "%S+"
  40. if tags[name]
  41. tags[name] += 1
  42. else
  43. tags[name] = 1
  44. for name, count in pairs tags
  45. Tags\create { :name, :count }
  46. [6]: =>
  47. return true -- formerly a bad migration
  48. [7]: =>
  49. -- WARNING: removes all tags fields!
  50. for track in *Tracks\select "*"
  51. tags = ""
  52. for field in *{"artist", "mood", "link", "genre"}
  53. if track[field] and #track[field] > 0
  54. tags ..= " #{field}:#{track[field]\gsub "%s+", "_"}"
  55. if #tags > 0
  56. track.tags = process_tags "untagged" .. tags
  57. else
  58. track.tags = " untagged "
  59. track\update "tags"
  60. }