1
0

Return iso dates for everything date related from the api (#130)

Remove traces of unix timestamp

Revert renaming reminder table column

Fix staticcheck

Remove unused table call

Add migration for renaming reminders table

Fix issues with using TimeStamp

Fix lint

Updated all created / updated fields to use TimeStamps

Add comments

Convert all created / updated fields to datetime

Add time util package

Co-authored-by: kolaente <k@knt.li>
Reviewed-on: https://kolaente.dev/vikunja/api/pulls/130
This commit is contained in:
konrad
2020-02-08 12:48:49 +00:00
parent 1f99238019
commit db2d868eed
44 changed files with 573 additions and 450 deletions

View File

@ -17,15 +17,16 @@
package migration
import (
"code.vikunja.io/api/pkg/timeutil"
"code.vikunja.io/api/pkg/user"
)
// Status represents this migration status
type Status struct {
ID int64 `xorm:"int(11) autoincr not null unique pk" json:"id"`
UserID int64 `xorm:"int(11) not null" json:"-"`
MigratorName string `xorm:"varchar(255)" json:"migrator_name"`
CreatedUnix int64 `xorm:"created not null" json:"time_unix"`
ID int64 `xorm:"int(11) autoincr not null unique pk" json:"id"`
UserID int64 `xorm:"int(11) not null" json:"-"`
MigratorName string `xorm:"varchar(255)" json:"migrator_name"`
Created timeutil.TimeStamp `xorm:"created not null 'created_unix'" json:"time_unix"`
}
// TableName holds the table name for the migration status table

View File

@ -23,6 +23,7 @@ import (
"code.vikunja.io/api/pkg/log"
"code.vikunja.io/api/pkg/models"
"code.vikunja.io/api/pkg/modules/migration"
"code.vikunja.io/api/pkg/timeutil"
"code.vikunja.io/api/pkg/user"
"code.vikunja.io/api/pkg/utils"
"encoding/json"
@ -144,7 +145,7 @@ func convertListForFolder(listID int, list *list, content *wunderlistContents) (
l := &models.List{
Title: list.Title,
Created: list.CreatedAt.Unix(),
Created: timeutil.FromTime(list.CreatedAt),
}
// Find all tasks belonging to this list and put them in
@ -152,13 +153,13 @@ func convertListForFolder(listID int, list *list, content *wunderlistContents) (
if t.ListID == listID {
newTask := &models.Task{
Text: t.Title,
Created: t.CreatedAt.Unix(),
Created: timeutil.FromTime(t.CreatedAt),
Done: t.Completed,
}
// Set Done At
if newTask.Done {
newTask.DoneAtUnix = t.CompletedAt.Unix()
newTask.DoneAt = timeutil.FromTime(t.CompletedAt)
}
// Parse the due date
@ -167,7 +168,7 @@ func convertListForFolder(listID int, list *list, content *wunderlistContents) (
if err != nil {
return nil, err
}
newTask.DueDateUnix = dueDate.Unix()
newTask.DueDate = timeutil.FromTime(dueDate)
}
// Find related notes
@ -198,13 +199,13 @@ func convertListForFolder(listID int, list *list, content *wunderlistContents) (
Mime: f.ContentType,
Size: uint64(f.FileSize),
Created: f.CreatedAt,
CreatedUnix: f.CreatedAt.Unix(),
CreatedUnix: timeutil.FromTime(f.CreatedAt),
// We directly pass the file contents here to have a way to link the attachment to the file later.
// Because we don't have an ID for our task at this point of the migration, we cannot just throw all
// attachments in a slice and do the work of downloading and properly storing them later.
FileContent: buf.Bytes(),
},
Created: f.CreatedAt.Unix(),
Created: timeutil.FromTime(f.CreatedAt),
})
}
}
@ -224,7 +225,7 @@ func convertListForFolder(listID int, list *list, content *wunderlistContents) (
// Reminders
for _, r := range content.reminders {
if r.TaskID == t.ID {
newTask.RemindersUnix = append(newTask.RemindersUnix, r.Date.Unix())
newTask.Reminders = append(newTask.Reminders, timeutil.FromTime(r.Date))
}
}
@ -247,8 +248,8 @@ func convertWunderlistToVikunja(content *wunderlistContents) (fullVikunjaHierach
namespace := &models.NamespaceWithLists{
Namespace: models.Namespace{
Name: folder.Title,
Created: folder.CreatedAt.Unix(),
Updated: folder.UpdatedAt.Unix(),
Created: timeutil.FromTime(folder.CreatedAt),
Updated: timeutil.FromTime(folder.UpdatedAt),
},
}

View File

@ -20,6 +20,7 @@ import (
"code.vikunja.io/api/pkg/config"
"code.vikunja.io/api/pkg/files"
"code.vikunja.io/api/pkg/models"
"code.vikunja.io/api/pkg/timeutil"
"github.com/stretchr/testify/assert"
"gopkg.in/d4l3k/messagediff.v1"
"io/ioutil"
@ -192,18 +193,18 @@ func TestWunderlistParsing(t *testing.T) {
{
Namespace: models.Namespace{
Name: "Lorem Ipsum",
Created: time1.Unix(),
Updated: time2.Unix(),
Created: timeutil.FromTime(time1),
Updated: timeutil.FromTime(time2),
},
Lists: []*models.List{
{
Created: time1.Unix(),
Created: timeutil.FromTime(time1),
Title: "Lorem1",
Tasks: []*models.Task{
{
Text: "Ipsum1",
DueDateUnix: 1378339200,
Created: time1.Unix(),
DueDate: 1378339200,
Created: timeutil.FromTime(time1),
Description: "Lorem Ipsum dolor sit amet",
Attachments: []*models.TaskAttachment{
{
@ -212,18 +213,18 @@ func TestWunderlistParsing(t *testing.T) {
Mime: "text/plain",
Size: 12345,
Created: time2,
CreatedUnix: time2.Unix(),
CreatedUnix: timeutil.FromTime(time2),
FileContent: exampleFile,
},
Created: time2.Unix(),
Created: timeutil.FromTime(time2),
},
},
RemindersUnix: []int64{time4.Unix()},
Reminders: []timeutil.TimeStamp{timeutil.FromTime(time4)},
},
{
Text: "Ipsum2",
DueDateUnix: 1378339200,
Created: time1.Unix(),
DueDate: 1378339200,
Created: timeutil.FromTime(time1),
Description: "Lorem Ipsum dolor sit amet",
RelatedTasks: map[models.RelationKind][]*models.Task{
models.RelationKindSubtask: {
@ -239,15 +240,15 @@ func TestWunderlistParsing(t *testing.T) {
},
},
{
Created: time1.Unix(),
Created: timeutil.FromTime(time1),
Title: "Lorem2",
Tasks: []*models.Task{
{
Text: "Ipsum3",
Done: true,
DoneAtUnix: time1.Unix(),
DueDateUnix: 1378339200,
Created: time1.Unix(),
DoneAt: timeutil.FromTime(time1),
DueDate: 1378339200,
Created: timeutil.FromTime(time1),
Description: "Lorem Ipsum dolor sit amet",
Attachments: []*models.TaskAttachment{
{
@ -256,18 +257,18 @@ func TestWunderlistParsing(t *testing.T) {
Mime: "text/plain",
Size: 12345,
Created: time3,
CreatedUnix: time3.Unix(),
CreatedUnix: timeutil.FromTime(time3),
FileContent: exampleFile,
},
Created: time3.Unix(),
Created: timeutil.FromTime(time3),
},
},
},
{
Text: "Ipsum4",
DueDateUnix: 1378339200,
Created: time1.Unix(),
RemindersUnix: []int64{time3.Unix()},
Text: "Ipsum4",
DueDate: 1378339200,
Created: timeutil.FromTime(time1),
Reminders: []timeutil.TimeStamp{timeutil.FromTime(time3)},
RelatedTasks: map[models.RelationKind][]*models.Task{
models.RelationKindSubtask: {
{
@ -279,52 +280,52 @@ func TestWunderlistParsing(t *testing.T) {
},
},
{
Created: time1.Unix(),
Created: timeutil.FromTime(time1),
Title: "Lorem3",
Tasks: []*models.Task{
{
Text: "Ipsum5",
DueDateUnix: 1378339200,
Created: time1.Unix(),
Text: "Ipsum5",
DueDate: 1378339200,
Created: timeutil.FromTime(time1),
},
{
Text: "Ipsum6",
DueDateUnix: 1378339200,
Created: time1.Unix(),
Done: true,
DoneAtUnix: time1.Unix(),
Text: "Ipsum6",
DueDate: 1378339200,
Created: timeutil.FromTime(time1),
Done: true,
DoneAt: timeutil.FromTime(time1),
},
{
Text: "Ipsum7",
DueDateUnix: 1378339200,
Created: time1.Unix(),
Done: true,
DoneAtUnix: time1.Unix(),
Text: "Ipsum7",
DueDate: 1378339200,
Created: timeutil.FromTime(time1),
Done: true,
DoneAt: timeutil.FromTime(time1),
},
{
Text: "Ipsum8",
DueDateUnix: 1378339200,
Created: time1.Unix(),
Text: "Ipsum8",
DueDate: 1378339200,
Created: timeutil.FromTime(time1),
},
},
},
{
Created: time1.Unix(),
Created: timeutil.FromTime(time1),
Title: "Lorem4",
Tasks: []*models.Task{
{
Text: "Ipsum9",
DueDateUnix: 1378339200,
Created: time1.Unix(),
Done: true,
DoneAtUnix: time1.Unix(),
Text: "Ipsum9",
DueDate: 1378339200,
Created: timeutil.FromTime(time1),
Done: true,
DoneAt: timeutil.FromTime(time1),
},
{
Text: "Ipsum10",
DueDateUnix: 1378339200,
Created: time1.Unix(),
Done: true,
DoneAtUnix: time1.Unix(),
Text: "Ipsum10",
DueDate: 1378339200,
Created: timeutil.FromTime(time1),
Done: true,
DoneAt: timeutil.FromTime(time1),
},
},
},
@ -336,7 +337,7 @@ func TestWunderlistParsing(t *testing.T) {
},
Lists: []*models.List{
{
Created: time4.Unix(),
Created: timeutil.FromTime(time4),
Title: "List without a namespace",
},
},