From 3277f6acf77ab7dbb6392a459a44e474878008e5 Mon Sep 17 00:00:00 2001 From: sytone Date: Wed, 2 Jun 2021 21:20:22 +0000 Subject: [PATCH] Add default list setting (#875) Co-authored-by: Sytone Reviewed-on: https://kolaente.dev/vikunja/api/pulls/875 Reviewed-by: konrad Co-authored-by: sytone Co-committed-by: sytone --- .editorconfig | 22 +++++++++++++++ pkg/migration/20210527105701.go | 43 ++++++++++++++++++++++++++++++ pkg/routes/api/v1/user_settings.go | 4 +++ pkg/routes/api/v1/user_show.go | 1 + pkg/swagger/docs.go | 4 +++ pkg/swagger/swagger.json | 4 +++ pkg/swagger/swagger.yaml | 5 ++++ pkg/user/user.go | 10 ++++--- 8 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 .editorconfig create mode 100644 pkg/migration/20210527105701.go diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..8e994f3ca1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = tab +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = false + +[*.go] +indent_style = tab + +[*.{yaml,yml}] +indent_style = space +indent_size = 2 + +[*.json] +indent_style = space +indent_size = 4 \ No newline at end of file diff --git a/pkg/migration/20210527105701.go b/pkg/migration/20210527105701.go new file mode 100644 index 0000000000..3f6a96f6bc --- /dev/null +++ b/pkg/migration/20210527105701.go @@ -0,0 +1,43 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-2021 Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public Licensee as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public Licensee for more details. +// +// You should have received a copy of the GNU Affero General Public Licensee +// along with this program. If not, see . + +package migration + +import ( + "src.techknowlogick.com/xormigrate" + "xorm.io/xorm" +) + +type users20210527105701 struct { + DefaultListID int64 `xorm:"bigint null index" json:"-"` +} + +func (users20210527105701) TableName() string { + return "users" +} + +func init() { + migrations = append(migrations, &xormigrate.Migration{ + ID: "20210527105701", + Description: "Add default list for new tasks setting to users", + Migrate: func(tx *xorm.Engine) error { + return tx.Sync2(users20210527105701{}) + }, + Rollback: func(tx *xorm.Engine) error { + return nil + }, + }) +} diff --git a/pkg/routes/api/v1/user_settings.go b/pkg/routes/api/v1/user_settings.go index e5255efe89..3eacef8e8a 100644 --- a/pkg/routes/api/v1/user_settings.go +++ b/pkg/routes/api/v1/user_settings.go @@ -45,6 +45,9 @@ type UserSettings struct { DiscoverableByEmail bool `json:"discoverable_by_email"` // If enabled, the user will get an email for their overdue tasks each morning. OverdueTasksRemindersEnabled bool `json:"overdue_tasks_reminders_enabled"` + // If a task is created without a specified list this value should be used. Applies + // to tasks made directly in API and from clients. + DefaultListID int64 `json:"default_list_id"` } // GetUserAvatarProvider returns the currently set user avatar @@ -170,6 +173,7 @@ func UpdateGeneralUserSettings(c echo.Context) error { user.DiscoverableByEmail = us.DiscoverableByEmail user.DiscoverableByName = us.DiscoverableByName user.OverdueTasksRemindersEnabled = us.OverdueTasksRemindersEnabled + user.DefaultListID = us.DefaultListID _, err = user2.UpdateUser(s, user) if err != nil { diff --git a/pkg/routes/api/v1/user_show.go b/pkg/routes/api/v1/user_show.go index 601962d634..b9793997a5 100644 --- a/pkg/routes/api/v1/user_show.go +++ b/pkg/routes/api/v1/user_show.go @@ -68,6 +68,7 @@ func UserShow(c echo.Context) error { DiscoverableByName: u.DiscoverableByName, DiscoverableByEmail: u.DiscoverableByEmail, OverdueTasksRemindersEnabled: u.OverdueTasksRemindersEnabled, + DefaultListID: u.DefaultListID, }, } diff --git a/pkg/swagger/docs.go b/pkg/swagger/docs.go index f7e878ebbd..b4d89e9cc5 100644 --- a/pkg/swagger/docs.go +++ b/pkg/swagger/docs.go @@ -8556,6 +8556,10 @@ var doc = `{ "v1.UserSettings": { "type": "object", "properties": { + "default_list_id": { + "description": "If a task is created without a specified list this value should be used. Applies\nto tasks made directly in API and from clients.", + "type": "integer" + }, "discoverable_by_email": { "description": "If true, the user can be found when searching for their exact email.", "type": "boolean" diff --git a/pkg/swagger/swagger.json b/pkg/swagger/swagger.json index 7428aeb831..70e7ef04d3 100644 --- a/pkg/swagger/swagger.json +++ b/pkg/swagger/swagger.json @@ -8539,6 +8539,10 @@ "v1.UserSettings": { "type": "object", "properties": { + "default_list_id": { + "description": "If a task is created without a specified list this value should be used. Applies\nto tasks made directly in API and from clients.", + "type": "integer" + }, "discoverable_by_email": { "description": "If true, the user can be found when searching for their exact email.", "type": "boolean" diff --git a/pkg/swagger/swagger.yaml b/pkg/swagger/swagger.yaml index bfa224f284..3bb815c664 100644 --- a/pkg/swagger/swagger.yaml +++ b/pkg/swagger/swagger.yaml @@ -1178,6 +1178,11 @@ definitions: type: object v1.UserSettings: properties: + default_list_id: + description: |- + If a task is created without a specified list this value should be used. Applies + to tasks made directly in API and from clients. + type: integer discoverable_by_email: description: If true, the user can be found when searching for their exact email. diff --git a/pkg/user/user.go b/pkg/user/user.go index 8b32510a28..2108c87354 100644 --- a/pkg/user/user.go +++ b/pkg/user/user.go @@ -67,10 +67,11 @@ type User struct { Issuer string `xorm:"text null" json:"-"` Subject string `xorm:"text null" json:"-"` - EmailRemindersEnabled bool `xorm:"bool default true" json:"-"` - DiscoverableByName bool `xorm:"bool default false index" json:"-"` - DiscoverableByEmail bool `xorm:"bool default false index" json:"-"` - OverdueTasksRemindersEnabled bool `xorm:"bool default true index" json:"-"` + EmailRemindersEnabled bool `xorm:"bool default true" json:"-"` + DiscoverableByName bool `xorm:"bool default false index" json:"-"` + DiscoverableByEmail bool `xorm:"bool default false index" json:"-"` + OverdueTasksRemindersEnabled bool `xorm:"bool default true index" json:"-"` + DefaultListID int64 `xorm:"bigint null index" json:"-"` // A timestamp when this task was created. You cannot change this value. Created time.Time `xorm:"created not null" json:"created"` @@ -371,6 +372,7 @@ func UpdateUser(s *xorm.Session, user *User) (updatedUser *User, err error) { "discoverable_by_name", "discoverable_by_email", "overdue_tasks_reminders_enabled", + "default_list_id", ). Update(user) if err != nil {