Files
planka/server/api/models/Board.js

161 lines
4.4 KiB
JavaScript
Raw Normal View History

/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
2019-08-31 04:07:25 +05:00
/**
* Board.js
*
* @description :: A model definition represents a database table/collection.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
2025-09-08 16:20:27 +02:00
/**
* @swagger
* components:
* schemas:
* Board:
* type: object
* required:
* - projectId
* - position
* - name
* properties:
* id:
* type: string
* description: Unique identifier for the board
2025-09-08 19:14:31 +02:00
* example: "1357158568008091264"
2025-09-08 16:20:27 +02:00
* projectId:
* type: string
* description: ID of the project the board belongs to
2025-09-08 19:14:31 +02:00
* example: "1357158568008091265"
2025-09-08 16:20:27 +02:00
* position:
* type: number
* description: Position of the board within the project
* example: 65536
* name:
* type: string
* description: Name/title of the board
* example: Development Board
* defaultView:
* type: string
* enum: [kanban, grid, list]
* description: Default view for the board
* example: kanban
* defaultCardType:
* type: string
* enum: [project, story]
* description: Default card type for new cards
* example: project
* limitCardTypesToDefaultOne:
* type: boolean
* description: Whether to limit card types to default one
* example: false
* alwaysDisplayCardCreator:
* type: boolean
* description: Whether to always display the card creator
* example: false
* expandTaskListsByDefault:
* type: boolean
* description: Whether to expand task lists by default
* example: false
* createdAt:
* type: string
* format: date-time
* nullable: true
* description: When the board was created
* example: 2024-01-01T00:00:00.000Z
* updatedAt:
* type: string
* format: date-time
* nullable: true
* description: When the board was last updated
* example: 2024-01-01T00:00:00.000Z
*/
const Card = require('./Card');
const Views = {
KANBAN: 'kanban',
GRID: 'grid',
LIST: 'list',
};
const ImportTypes = {
TRELLO: 'trello',
};
2019-08-31 04:07:25 +05:00
module.exports = {
Views,
ImportTypes,
2019-08-31 04:07:25 +05:00
attributes: {
// ╔═╗╦═╗╦╔╦╗╦╔╦╗╦╦ ╦╔═╗╔═╗
// ╠═╝╠╦╝║║║║║ ║ ║╚╗╔╝║╣ ╚═╗
// ╩ ╩╚═╩╩ ╩╩ ╩ ╩ ╚╝ ╚═╝╚═╝
position: {
type: 'number',
required: true,
2019-08-31 04:07:25 +05:00
},
name: {
type: 'string',
required: true,
2019-08-31 04:07:25 +05:00
},
defaultView: {
type: 'string',
isIn: Object.values(Views),
defaultsTo: Views.KANBAN,
columnName: 'default_view',
},
defaultCardType: {
type: 'string',
isIn: Object.values(Card.Types),
defaultsTo: Card.Types.PROJECT,
columnName: 'default_card_type',
},
limitCardTypesToDefaultOne: {
type: 'boolean',
defaultsTo: false,
columnName: 'limit_card_types_to_default_one',
},
alwaysDisplayCardCreator: {
type: 'boolean',
defaultsTo: false,
columnName: 'always_display_card_creator',
},
expandTaskListsByDefault: {
type: 'boolean',
defaultsTo: false,
columnName: 'expand_task_lists_by_default',
},
2019-08-31 04:07:25 +05:00
// ╔═╗╔╦╗╔╗ ╔═╗╔╦╗╔═╗
// ║╣ ║║║╠╩╗║╣ ║║╚═╗
// ╚═╝╩ ╩╚═╝╚═╝═╩╝╚═╝
// ╔═╗╔═╗╔═╗╔═╗╔═╗╦╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
// ╠═╣╚═╗╚═╗║ ║║ ║╠═╣ ║ ║║ ║║║║╚═╗
// ╩ ╩╚═╝╚═╝╚═╝╚═╝╩╩ ╩ ╩ ╩╚═╝╝╚╝╚═╝
projectId: {
model: 'Project',
required: true,
columnName: 'project_id',
2019-08-31 04:07:25 +05:00
},
memberUsers: {
collection: 'User',
via: 'boardId',
through: 'BoardMembership',
},
2019-08-31 04:07:25 +05:00
lists: {
collection: 'List',
via: 'boardId',
2019-08-31 04:07:25 +05:00
},
labels: {
collection: 'Label',
via: 'boardId',
},
},
2019-08-31 04:07:25 +05:00
};