mirror of
https://github.com/mattermost/focalboard.git
synced 2024-12-24 13:43:12 +02:00
9918a0b3f8
* WIP * WIP * Removed unused webapp util * Added server tests * Lint fix * Updating existing tests * Updating existing tests * Updating existing tests * Fixing existing tests * Fixing existing tests * Fixing existing tests * WIP * Added category sort order migration * Added logic to set new category on top * Implemented api, WS listein logic remining * finished webapp implementation * Added category type and tests * updated tests * Fixed integration test * type fix * WIP * implemented boards DND to other category and in same category * removed seconds from boards name * wip * debugging cy test * Enabled hiding views list while DNDing * Removed some debug logs * Fixed a bug preventing users from collapsing boards category * WIP * Debugging cypress test * CI * debugging cy test * Testing a fix * reverting test fix * Handled personal server * WIP * WIP * Adding support for building with esbuild * Using different index.html templates for esbuild * WIP * WIP * Fixed delete category and rename category * WIP * WIP * Finally, its done. * Adde suppor tot update board-category mapping in bulk * Fixed a bug where create category option didn't show up on default category * Fixed bug where new board was added as last board in Boards category instead of first board * Minor cleanup * WIP * Added support to drab boards onto collapsed categories * Fixed route order from specific to generic * Fix linter * Updated existin server tests * fixed integration tests * Fixed webapp test err * Removed accidental dependencies * Adding new server tests * Finished server tests * added api to client.go * Added API integration test * Fixed existing webapp tests * WIP * WIP * WIP * WIP * WIP * Fixed missing paranthesis * Some cleanup * fixed server lint * noopped down migration * Fixed issue with DND not working great with newly added category * Fixed a test * Fixed a test * Fixed a test * Fixed console error while DNDing * pakg lock restore * Fixed missing react beautiful dnd in package.lock.json * updated snapshots * Fixed webapp test * Review fixes * Added API permission check Co-authored-by: Jesús Espino <jespinog@gmail.com>
116 lines
2.4 KiB
Go
116 lines
2.4 KiB
Go
package model
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"strings"
|
|
|
|
"github.com/mattermost/focalboard/server/utils"
|
|
)
|
|
|
|
const (
|
|
CategoryTypeSystem = "system"
|
|
CategoryTypeCustom = "custom"
|
|
)
|
|
|
|
// Category is a board category
|
|
// swagger:model
|
|
type Category struct {
|
|
// The id for this category
|
|
// required: true
|
|
ID string `json:"id"`
|
|
|
|
// The name for this category
|
|
// required: true
|
|
Name string `json:"name"`
|
|
|
|
// The user's id for this category
|
|
// required: true
|
|
UserID string `json:"userID"`
|
|
|
|
// The team id for this category
|
|
// required: true
|
|
TeamID string `json:"teamID"`
|
|
|
|
// The creation time in miliseconds since the current epoch
|
|
// required: true
|
|
CreateAt int64 `json:"createAt"`
|
|
|
|
// The last modified time in miliseconds since the current epoch
|
|
// required: true
|
|
UpdateAt int64 `json:"updateAt"`
|
|
|
|
// The deleted time in miliseconds since the current epoch. Set to indicate this category is deleted
|
|
// required: false
|
|
DeleteAt int64 `json:"deleteAt"`
|
|
|
|
// Category's state in client side
|
|
// required: true
|
|
Collapsed bool `json:"collapsed"`
|
|
|
|
// Inter-category sort order per user
|
|
// required: true
|
|
SortOrder int `json:"sortOrder"`
|
|
|
|
// The sorting method applied on this category
|
|
// required: true
|
|
Sorting string `json:"sorting"`
|
|
|
|
// Category's type
|
|
// required: true
|
|
Type string `json:"type"`
|
|
}
|
|
|
|
func (c *Category) Hydrate() {
|
|
if c.ID == "" {
|
|
c.ID = utils.NewID(utils.IDTypeNone)
|
|
}
|
|
|
|
if c.CreateAt == 0 {
|
|
c.CreateAt = utils.GetMillis()
|
|
}
|
|
|
|
if c.UpdateAt == 0 {
|
|
c.UpdateAt = c.CreateAt
|
|
}
|
|
|
|
if c.SortOrder < 0 {
|
|
c.SortOrder = 0
|
|
}
|
|
|
|
if strings.TrimSpace(c.Type) == "" {
|
|
c.Type = CategoryTypeCustom
|
|
}
|
|
}
|
|
|
|
func (c *Category) IsValid() error {
|
|
if strings.TrimSpace(c.ID) == "" {
|
|
return NewErrInvalidCategory("category ID cannot be empty")
|
|
}
|
|
|
|
if strings.TrimSpace(c.Name) == "" {
|
|
return NewErrInvalidCategory("category name cannot be empty")
|
|
}
|
|
|
|
if strings.TrimSpace(c.UserID) == "" {
|
|
return NewErrInvalidCategory("category user ID cannot be empty")
|
|
}
|
|
|
|
if strings.TrimSpace(c.TeamID) == "" {
|
|
return NewErrInvalidCategory("category team id ID cannot be empty")
|
|
}
|
|
|
|
if c.Type != CategoryTypeCustom && c.Type != CategoryTypeSystem {
|
|
return NewErrInvalidCategory(fmt.Sprintf("category type is invalid. Allowed types: %s and %s", CategoryTypeSystem, CategoryTypeCustom))
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func CategoryFromJSON(data io.Reader) *Category {
|
|
var category *Category
|
|
_ = json.NewDecoder(data).Decode(&category)
|
|
return category
|
|
}
|