12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import create_table, rename_column, add_column, types from require "lapis.db.schema"
- import process_tags from require "helpers"
- import Tracks, Tags from require "models"
-
- {
- [1]: =>
- create_table "tracks", {
- { "id", types.serial primary_key: true }
- { "artist", types.text null: true }
- { "name", types.text null: true }
- { "url", types.text null: true }
- { "status", types.integer default: 1 }
- }
- [2]: =>
- rename_column "tracks", "name", "title"
- rename_column "tracks", "url", "link"
- for column in *{
- { "art_url", types.text null: true }
- { "file_url", types.text null: true }
- { "file_size", types.integer null: true }
- { "album", types.text null: true }
- { "genre", types.text null: true }
- { "tags", types.text default: " untagged " }
- { "quality", types.integer default: 1 }
- { "mood", types.text null: true }
- }
- add_column "tracks", unpack column
- [3]: =>
- return true -- formerly a bad migration
- [4]: =>
- return true -- formerly a bad migration
- [5]: =>
- create_table "tags", {
- { "id", types.serial primary_key: true }
- { "name", types.text unique: true }
- { "count", types.integer default: -1 }
- }
- tags = {}
- for track in *Tracks\select "*"
- for name in track.tags\gmatch "%S+"
- if tags[name]
- tags[name] += 1
- else
- tags[name] = 1
- for name, count in pairs tags
- Tags\create { :name, :count }
- [6]: =>
- return true -- formerly a bad migration
- [7]: =>
- -- WARNING: removes all tags fields!
- for track in *Tracks\select "*"
- tags = ""
- for field in *{"artist", "mood", "link", "genre"}
- if track[field] and #track[field] > 0
- tags ..= " #{field}:#{track[field]\gsub "%s+", "_"}"
- if #tags > 0
- track.tags = process_tags "untagged" .. tags
- else
- track.tags = " untagged "
- track\update "tags"
- }
|