diff --git a/altsrc/common.cr b/altsrc/common.cr new file mode 100644 index 0000000..0c6cd8b --- /dev/null +++ b/altsrc/common.cr @@ -0,0 +1,70 @@ +require "uuid" +require "uuid/json" + +class TodoD +end + +class TodoD::List + enum PermissionLevel + None = -1 + Read + Post + Edit + Admin + + def to_json(o) + to_s.downcase.to_json(o) + end + end + + JSON.mapping({ + id: String, + title: String, + permissions: Hash(String, Array(Int32)), + extra_properties: Hash(String, JSON::Any), + tasks: { + type: Array(String), + default: [] of String + } + }) + + def initialize(@title, user, @extra_properties = Hash(String, JSON::Any).new) + @id = UUID.random.to_s + @permissions = { + "admin" => [user.uid], + "edit" => [] of Int32, + "post" => [] of Int32, + "read" => [] of Int32 + } + @tasks = [] of String + end +end + +class TodoD::Task + # Should we hardcode more properties here? + JSON.mapping({ + id: String, + list: String, + title: String, + description: { + type: String, + default: "" + }, + creator: Int32, + assigned_to: Int32?, + priority: String?, + tags: { + type: Array(String), + default: [] of String + }, + extra_properties: { + type: Hash(String, JSON::Any), + default: {} of String => JSON::Any + } + }) + + def initialize(@list, @title, @creator, @description = "", @assigned_to = nil, @priority = nil, @tags = [] of String, @extra_properties = {} of String => JSON::Any) + @id = UUID.random.to_s + end +end + diff --git a/altsrc/main.cr b/altsrc/main.cr new file mode 100644 index 0000000..9bfa9f9 --- /dev/null +++ b/altsrc/main.cr @@ -0,0 +1,25 @@ +require "option_parser" +require "uuid" +require "uuid/json" + +require "fs" + +class TodoD::Storage + getter root : String + + getter lists : FS::Hash(String, List) + getter tasks : FS::Hash(String, Task) + + def initialize(@root) + @lists = FS::Hash(String, List).new("#{@root}/lists").tap do |lists| + lists.new_nn_partition "user", &.users_with_read_permissions.map(&.to_s) + end + + @tasks = FS::Hash(String, Task).new("#{@root}/tasks").tap do |tasks| + end + end + + def new_list(list) + @lists[list.id] = list + end +end diff --git a/altsrc/todod.cr b/altsrc/todod.cr new file mode 100644 index 0000000..e69de29 diff --git a/conversion.cr b/conversion.cr new file mode 100644 index 0000000..f2e43e7 --- /dev/null +++ b/conversion.cr @@ -0,0 +1,132 @@ + +require "json" +require "./src/project.cr" + +# require "./altsrc/common.cr" +# require "./altsrc/main.cr" + + +# 1. get the old list of projects +old_storage = Project.all "../storage/" + +# JSON.mapping({ +# id: String, +# name: String, +# columns: Array(Column), +# tasks: Array(Task), +# }) + +# 2. for each project +# pp! old_storage +old_storage.each do |old_project| + puts "projet #{old_project.name}" + + extra_properties = Hash(String, JSON::Any).new + extra_properties["columns"] = JSON.parse(old_project.columns.to_json) + pp! extra_properties["columns"] + + # 1. create a new list an copy all properties + + tasks = Array(TodoD::Task).new + + old_project.tasks.each do |t| + pp! t + + task_extra_properties = Hash(String, JSON::Any).new + task_extra_properties["column"] = JSON.parse(t.column.to_json) + task_extra_properties["backgroundColor"] = JSON.parse(t.column.to_json) + task_extra_properties["assigneeId"] = JSON.parse(t.column.to_json) + + newtask = ::TodoD::Task.new old_project.id, old_project.name, t.author, + description: (t.description || ""), + assigned_to: t.assigned_to, + extra_properties: task_extra_properties + + + # TASK + + # @color="dark", + # @description="", + # @id="9808dcf2-1064-4b55-a39a-e402b477d60e", + # @title="fsdb automatic tests"> + + + # 1. get the task in the old storage + # TODO + # 2. create a task in the new format + + # task = ::TodoD::Task.new @list.to_s, @title, user.uid, + # description: (@description || ""), + # assigned_to: @assigned_to, + # extra_properties: @extra_properties || {} of String => JSON::Any + + # 3. store the new task + # list.tasks << task.id + # service.storage.tasks[task.id] = task + end + + # finally, create the list with all the parameters + + # list = List.new old_project.name, user, extra_properties + # list.tasks = tasks.map &.id + + + + + + ####### service.storage.lists.delete list.id + + # Store the new list + # service.storage.lists[list.id] = list + + # EDIT TASK + # task = service.storage.tasks[@task.to_s]? + # list = service.storage.lists[task.list.to_s]? + + # @title.try { |x| task.title = x } + # @description.try { |x| task.description = x } + # @tags.try { |x| task.tags = x } + # @assigned_to.try { |x| task.assigned_to = x } + # @extra_properties.try { |x| task.extra_properties = x } + + # service.storage.tasks.delete task.id + # service.storage.tasks[task.id] = task + # EDIT LIST + + # list = service.storage.lists[@list.to_s] + + # # Updating our list copy. + # @title.try do |title| + # list.title = title + # end + + # @permissions.try do |permissions| + # permissions.each do |key, value| + # list.permissions[key] = value + # end + # end + + # @extra_properties.try do |properties| + # properties.each do |key, value| + # list.extra_properties[key] = value + # end + # end + + # # Removal and re-adding is the current way of handling updates. + # service.storage.lists.delete list.id + # service.storage.lists[list.id] = list + +end + +# new_storage = TodoD::Storage.new "../new-storage/" + +# service.storage.lists.delete list.id +# service.storage.lists.get_nn_partition( +# service.storage.lists[list.id] = list +# service.storage.lists[@list.to_s] +# service.storage.lists[@list.to_s]? +# service.storage.lists[task.list.to_s]? +# service.storage.tasks.delete task.id +# service.storage.tasks[task.id] = task +# service.storage.tasks[@task.to_s]? +# service.storage.tasks[uuid] diff --git a/src/project.cr b/src/project.cr index 2ebcb20..a6127eb 100644 --- a/src/project.cr +++ b/src/project.cr @@ -51,4 +51,3 @@ class Project [] of Project end end -