diff --git a/client/src/components/Board/Board.jsx b/client/src/components/Board/Board.jsx index c2be9825..a751d744 100755 --- a/client/src/components/Board/Board.jsx +++ b/client/src/components/Board/Board.jsx @@ -13,7 +13,7 @@ import { ReactComponent as PlusMathIcon } from '../../assets/images/plus-math-ic import styles from './Board.module.css'; -const parseDNDId = (dndId) => parseInt(dndId.split(':').pop(), 10); +const parseDndId = (dndId) => dndId.split(':')[1]; const Board = React.memo( ({ @@ -51,7 +51,7 @@ const Board = React.memo( return; } - const id = parseDNDId(draggableId); + const id = parseDndId(draggableId); switch (type) { case DroppableTypes.LIST: @@ -59,7 +59,7 @@ const Board = React.memo( break; case DroppableTypes.CARD: - onCardMove(id, parseDNDId(destination.droppableId), destination.index); + onCardMove(id, parseDndId(destination.droppableId), destination.index); break; default: diff --git a/client/src/components/Boards/Boards.jsx b/client/src/components/Boards/Boards.jsx index 45677131..3b71c25c 100755 --- a/client/src/components/Boards/Boards.jsx +++ b/client/src/components/Boards/Boards.jsx @@ -168,7 +168,7 @@ const Boards = React.memo( Boards.propTypes = { items: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types - currentId: PropTypes.number, + currentId: PropTypes.string, isEditable: PropTypes.bool.isRequired, onCreate: PropTypes.func.isRequired, onUpdate: PropTypes.func.isRequired, diff --git a/client/src/components/Card/Card.jsx b/client/src/components/Card/Card.jsx index 58c470f1..6424c3ac 100755 --- a/client/src/components/Card/Card.jsx +++ b/client/src/components/Card/Card.jsx @@ -74,7 +74,7 @@ const Card = React.memo( )}
{name}
{tasks.length > 0 && } - {(dueDate || timer) && ( + {(dueDate || timer || notificationsTotal > 0) && ( {notificationsTotal > 0 && (
+ {item.notificationsTotal > 0 && ( + {item.notificationsTotal} + )}
{item.name}
@@ -69,7 +72,7 @@ const Projects = React.memo(({ Projects.propTypes = { items: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types - currentId: PropTypes.number, + currentId: PropTypes.string, isEditable: PropTypes.bool.isRequired, onAdd: PropTypes.func.isRequired, }; diff --git a/client/src/components/Projects/Projects.module.css b/client/src/components/Projects/Projects.module.css index a063f88e..d998f9e7 100644 --- a/client/src/components/Projects/Projects.module.css +++ b/client/src/components/Projects/Projects.module.css @@ -59,6 +59,20 @@ margin: 0 !important; } +.notification { + background: #eb5a46; + color: #fff; + float: right; + font-size: 12px; + line-height: 20px; + padding: 0px 6px; + border: none; + border-radius: 3px; + outline: none; + text-align: left; + transition: background 0.3s ease; +} + .open { background: #555; background-size: cover; diff --git a/client/src/sagas/app/services/board.js b/client/src/sagas/app/services/board.js index 110cc283..21390eb9 100644 --- a/client/src/sagas/app/services/board.js +++ b/client/src/sagas/app/services/board.js @@ -2,15 +2,9 @@ import { call, put, select } from 'redux-saga/effects'; import { goToBoardService, goToProjectService } from './router'; import { createBoardRequest, deleteBoardRequest, updateBoardRequest } from '../requests'; -import { - boardByIdSelector, - maxIdSelector, - nextBoardPositionSelector, - pathSelector, -} from '../../../selectors'; +import { boardByIdSelector, nextBoardPositionSelector, pathSelector } from '../../../selectors'; import { createBoard, deleteBoard, updateBoard } from '../../../actions'; -import { nextLocalId } from '../../../utils/local-id'; -import { Board } from '../../../models'; +import { createLocalId } from '../../../utils/local-id'; export function* createBoardService(projectId, data) { const nextData = { @@ -18,7 +12,7 @@ export function* createBoardService(projectId, data) { position: yield select(nextBoardPositionSelector, projectId), }; - const localId = nextLocalId(yield select(maxIdSelector, Board.modelName)); + const localId = yield call(createLocalId); yield put( createBoard({ diff --git a/client/src/sagas/app/services/card.js b/client/src/sagas/app/services/card.js index 087a4b26..ade180f0 100644 --- a/client/src/sagas/app/services/card.js +++ b/client/src/sagas/app/services/card.js @@ -2,10 +2,9 @@ import { call, put, select } from 'redux-saga/effects'; import { goToBoardService } from './router'; import { createCardRequest, deleteCardRequest, updateCardRequest } from '../requests'; -import { maxIdSelector, nextCardPositionSelector, pathSelector } from '../../../selectors'; +import { nextCardPositionSelector, pathSelector } from '../../../selectors'; import { createCard, deleteCard, updateCard } from '../../../actions'; -import { nextLocalId } from '../../../utils/local-id'; -import { Card } from '../../../models'; +import { createLocalId } from '../../../utils/local-id'; export function* createCardService(listId, data) { const nextData = { @@ -13,7 +12,7 @@ export function* createCardService(listId, data) { position: yield select(nextCardPositionSelector, listId), }; - const localId = nextLocalId(yield select(maxIdSelector, Card.modelName)); + const localId = yield call(createLocalId); yield put( createCard({ diff --git a/client/src/sagas/app/services/comment-action.js b/client/src/sagas/app/services/comment-action.js index d9524d8b..b1f47bda 100644 --- a/client/src/sagas/app/services/comment-action.js +++ b/client/src/sagas/app/services/comment-action.js @@ -5,14 +5,13 @@ import { deleteCommentActionRequest, updateCommentActionRequest, } from '../requests'; -import { currentUserIdSelector, maxIdSelector, pathSelector } from '../../../selectors'; +import { currentUserIdSelector, pathSelector } from '../../../selectors'; import { createCommentAction, deleteCommentAction, updateCommentAction } from '../../../actions'; -import { nextLocalId } from '../../../utils/local-id'; -import { Action } from '../../../models'; +import { createLocalId } from '../../../utils/local-id'; import { ActionTypes } from '../../../constants/Enums'; export function* createCommentActionService(cardId, data) { - const localId = nextLocalId(yield select(maxIdSelector, Action.modelName)); + const localId = yield call(createLocalId); const userId = yield select(currentUserIdSelector); yield put( diff --git a/client/src/sagas/app/services/label.js b/client/src/sagas/app/services/label.js index 9edf29e6..7d37a168 100644 --- a/client/src/sagas/app/services/label.js +++ b/client/src/sagas/app/services/label.js @@ -7,7 +7,7 @@ import { deleteLabelRequest, updateLabelRequest, } from '../requests'; -import { maxIdSelector, pathSelector } from '../../../selectors'; +import { pathSelector } from '../../../selectors'; import { addLabelToBoardFilter, addLabelToCard, @@ -17,11 +17,10 @@ import { removeLabelFromCard, updateLabel, } from '../../../actions'; -import { nextLocalId } from '../../../utils/local-id'; -import { Label } from '../../../models'; +import { createLocalId } from '../../../utils/local-id'; export function* createLabelService(boardId, data) { - const localId = nextLocalId(yield select(maxIdSelector, Label.modelName)); + const localId = yield call(createLocalId); yield put( createLabel({ diff --git a/client/src/sagas/app/services/list.js b/client/src/sagas/app/services/list.js index ce8c4b97..2effbff6 100644 --- a/client/src/sagas/app/services/list.js +++ b/client/src/sagas/app/services/list.js @@ -1,15 +1,9 @@ import { call, put, select } from 'redux-saga/effects'; import { createListRequest, deleteListRequest, updateListRequest } from '../requests'; -import { - listByIdSelector, - maxIdSelector, - nextListPositionSelector, - pathSelector, -} from '../../../selectors'; +import { listByIdSelector, nextListPositionSelector, pathSelector } from '../../../selectors'; import { createList, deleteList, updateList } from '../../../actions'; -import { nextLocalId } from '../../../utils/local-id'; -import { List } from '../../../models'; +import { createLocalId } from '../../../utils/local-id'; export function* createListService(boardId, data) { const nextData = { @@ -17,7 +11,7 @@ export function* createListService(boardId, data) { position: yield select(nextListPositionSelector, boardId), }; - const localId = nextLocalId(yield select(maxIdSelector, List.modelName)); + const localId = yield call(createLocalId); yield put( createList({ diff --git a/client/src/sagas/app/services/project-membership.js b/client/src/sagas/app/services/project-membership.js index 3d424bc0..314c354e 100644 --- a/client/src/sagas/app/services/project-membership.js +++ b/client/src/sagas/app/services/project-membership.js @@ -1,13 +1,12 @@ import { call, put, select } from 'redux-saga/effects'; import { createProjectMembershipRequest, deleteProjectMembershipRequest } from '../requests'; -import { maxIdSelector, pathSelector } from '../../../selectors'; +import { pathSelector } from '../../../selectors'; import { createProjectMembership, deleteProjectMembership } from '../../../actions'; -import { nextLocalId } from '../../../utils/local-id'; -import { ProjectMembership } from '../../../models'; +import { createLocalId } from '../../../utils/local-id'; export function* createProjectMembershipService(projectId, data) { - const localId = nextLocalId(yield select(maxIdSelector, ProjectMembership.modelName)); + const localId = yield call(createLocalId); yield put( createProjectMembership({ diff --git a/client/src/sagas/app/services/task.js b/client/src/sagas/app/services/task.js index 060a56a8..389112c4 100644 --- a/client/src/sagas/app/services/task.js +++ b/client/src/sagas/app/services/task.js @@ -1,13 +1,12 @@ import { call, put, select } from 'redux-saga/effects'; import { createTaskRequest, deleteTaskRequest, updateTaskRequest } from '../requests'; -import { maxIdSelector, pathSelector } from '../../../selectors'; +import { pathSelector } from '../../../selectors'; import { createTask, deleteTask, updateTask } from '../../../actions'; -import { nextLocalId } from '../../../utils/local-id'; -import { Task } from '../../../models'; +import { createLocalId } from '../../../utils/local-id'; export function* createTaskService(cardId, data) { - const localId = nextLocalId(yield select(maxIdSelector, Task.modelName)); + const localId = yield call(createLocalId); yield put( createTask({ diff --git a/client/src/selectors/common.js b/client/src/selectors/common.js index 2a33c4d1..1c594f1f 100755 --- a/client/src/selectors/common.js +++ b/client/src/selectors/common.js @@ -1,5 +1,3 @@ -export const maxIdSelector = ({ db }, modelName) => db[modelName].meta.maxId; - export const accessTokenSelector = ({ auth: { accessToken } }) => accessToken; export const isAppInitializingSelector = ({ app: { isInitializing } }) => isInitializing; diff --git a/client/src/utils/local-id.js b/client/src/utils/local-id.js index 2e3e4a5d..5508ce75 100755 --- a/client/src/utils/local-id.js +++ b/client/src/utils/local-id.js @@ -1,3 +1,3 @@ -export const nextLocalId = (maxId = 0) => maxId + Date.now() / 10000000000000; +export const createLocalId = () => `local:${Date.now()}`; -export const isLocalId = (id) => id % 1 !== 0; +export const isLocalId = (id) => id.startsWith('local:'); diff --git a/server/api/controllers/actions/index.js b/server/api/controllers/actions/index.js index 8632b75c..f81a989a 100755 --- a/server/api/controllers/actions/index.js +++ b/server/api/controllers/actions/index.js @@ -7,11 +7,13 @@ const Errors = { module.exports = { inputs: { cardId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, beforeId: { - type: 'number' + type: 'string', + regex: /^[0-9]+$/ } }, diff --git a/server/api/controllers/boards/create.js b/server/api/controllers/boards/create.js index 191adbd9..ea0457fc 100755 --- a/server/api/controllers/boards/create.js +++ b/server/api/controllers/boards/create.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { projectId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, position: { diff --git a/server/api/controllers/boards/delete.js b/server/api/controllers/boards/delete.js index 617f630f..3fae5ed4 100755 --- a/server/api/controllers/boards/delete.js +++ b/server/api/controllers/boards/delete.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/boards/show.js b/server/api/controllers/boards/show.js index e9900eba..2b57a171 100755 --- a/server/api/controllers/boards/show.js +++ b/server/api/controllers/boards/show.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/boards/update.js b/server/api/controllers/boards/update.js index 6b8535a6..d91242ef 100755 --- a/server/api/controllers/boards/update.js +++ b/server/api/controllers/boards/update.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, position: { diff --git a/server/api/controllers/card-labels/create.js b/server/api/controllers/card-labels/create.js index 6275c440..d28e16f4 100755 --- a/server/api/controllers/card-labels/create.js +++ b/server/api/controllers/card-labels/create.js @@ -13,11 +13,13 @@ const Errors = { module.exports = { inputs: { cardId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, labelId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/card-labels/delete.js b/server/api/controllers/card-labels/delete.js index 1dd76760..76596df6 100755 --- a/server/api/controllers/card-labels/delete.js +++ b/server/api/controllers/card-labels/delete.js @@ -10,11 +10,13 @@ const Errors = { module.exports = { inputs: { cardId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, labelId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/card-memberships/create.js b/server/api/controllers/card-memberships/create.js index fe10e8eb..9e8812c2 100755 --- a/server/api/controllers/card-memberships/create.js +++ b/server/api/controllers/card-memberships/create.js @@ -13,11 +13,13 @@ const Errors = { module.exports = { inputs: { cardId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, userId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/card-memberships/delete.js b/server/api/controllers/card-memberships/delete.js index c861da84..559bc459 100755 --- a/server/api/controllers/card-memberships/delete.js +++ b/server/api/controllers/card-memberships/delete.js @@ -10,11 +10,13 @@ const Errors = { module.exports = { inputs: { cardId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, userId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/cards/create.js b/server/api/controllers/cards/create.js index 05b2717b..761b2dd9 100755 --- a/server/api/controllers/cards/create.js +++ b/server/api/controllers/cards/create.js @@ -9,7 +9,8 @@ const Errors = { module.exports = { inputs: { listId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, position: { diff --git a/server/api/controllers/cards/delete.js b/server/api/controllers/cards/delete.js index 8a9cb736..fc545843 100755 --- a/server/api/controllers/cards/delete.js +++ b/server/api/controllers/cards/delete.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/cards/show.js b/server/api/controllers/cards/show.js index 38bd15c3..88b7c7f4 100755 --- a/server/api/controllers/cards/show.js +++ b/server/api/controllers/cards/show.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/cards/update.js b/server/api/controllers/cards/update.js index 851c1bbe..b9eaefe3 100755 --- a/server/api/controllers/cards/update.js +++ b/server/api/controllers/cards/update.js @@ -12,11 +12,13 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, listId: { - type: 'number' + type: 'string', + regex: /^[0-9]+$/ }, position: { type: 'number' diff --git a/server/api/controllers/comment-actions/create.js b/server/api/controllers/comment-actions/create.js index 4f6b9a50..7d9dcc4c 100755 --- a/server/api/controllers/comment-actions/create.js +++ b/server/api/controllers/comment-actions/create.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { cardId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, text: { diff --git a/server/api/controllers/comment-actions/delete.js b/server/api/controllers/comment-actions/delete.js index 6e75abd1..a27d5e7c 100755 --- a/server/api/controllers/comment-actions/delete.js +++ b/server/api/controllers/comment-actions/delete.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/comment-actions/update.js b/server/api/controllers/comment-actions/update.js index aef1e29d..4fd7b483 100755 --- a/server/api/controllers/comment-actions/update.js +++ b/server/api/controllers/comment-actions/update.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, text: { diff --git a/server/api/controllers/labels/create.js b/server/api/controllers/labels/create.js index fa5bcfab..24b9aaf1 100755 --- a/server/api/controllers/labels/create.js +++ b/server/api/controllers/labels/create.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { boardId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, name: { diff --git a/server/api/controllers/labels/delete.js b/server/api/controllers/labels/delete.js index 0a7d50e9..175b8429 100755 --- a/server/api/controllers/labels/delete.js +++ b/server/api/controllers/labels/delete.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/labels/update.js b/server/api/controllers/labels/update.js index e046199d..f0e433aa 100755 --- a/server/api/controllers/labels/update.js +++ b/server/api/controllers/labels/update.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, name: { diff --git a/server/api/controllers/lists/create.js b/server/api/controllers/lists/create.js index 3bb99981..abbd8fc8 100755 --- a/server/api/controllers/lists/create.js +++ b/server/api/controllers/lists/create.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { boardId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, position: { diff --git a/server/api/controllers/lists/delete.js b/server/api/controllers/lists/delete.js index 2fdb5014..8b4655f4 100755 --- a/server/api/controllers/lists/delete.js +++ b/server/api/controllers/lists/delete.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/lists/update.js b/server/api/controllers/lists/update.js index 92235cc6..7ea04d33 100755 --- a/server/api/controllers/lists/update.js +++ b/server/api/controllers/lists/update.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, position: { diff --git a/server/api/controllers/project-memberships/create.js b/server/api/controllers/project-memberships/create.js index b72f93fa..2f137be3 100755 --- a/server/api/controllers/project-memberships/create.js +++ b/server/api/controllers/project-memberships/create.js @@ -13,11 +13,13 @@ const Errors = { module.exports = { inputs: { projectId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, userId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/project-memberships/delete.js b/server/api/controllers/project-memberships/delete.js index aee1d350..e45ed192 100755 --- a/server/api/controllers/project-memberships/delete.js +++ b/server/api/controllers/project-memberships/delete.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/projects/delete.js b/server/api/controllers/projects/delete.js index 48e1a277..6829c984 100755 --- a/server/api/controllers/projects/delete.js +++ b/server/api/controllers/projects/delete.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/projects/update.js b/server/api/controllers/projects/update.js index 203762f7..aed03982 100755 --- a/server/api/controllers/projects/update.js +++ b/server/api/controllers/projects/update.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, name: { diff --git a/server/api/controllers/tasks/create.js b/server/api/controllers/tasks/create.js index fc00bf62..51361f1a 100755 --- a/server/api/controllers/tasks/create.js +++ b/server/api/controllers/tasks/create.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { cardId: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, name: { diff --git a/server/api/controllers/tasks/delete.js b/server/api/controllers/tasks/delete.js index 9b12b9c9..7d68b5ee 100755 --- a/server/api/controllers/tasks/delete.js +++ b/server/api/controllers/tasks/delete.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/tasks/update.js b/server/api/controllers/tasks/update.js index a107f51d..6c93fd55 100755 --- a/server/api/controllers/tasks/update.js +++ b/server/api/controllers/tasks/update.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, name: { diff --git a/server/api/controllers/users/delete.js b/server/api/controllers/users/delete.js index 0bc34a2b..c9bf7a99 100755 --- a/server/api/controllers/users/delete.js +++ b/server/api/controllers/users/delete.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/controllers/users/update.js b/server/api/controllers/users/update.js index 1c37f35e..2addaa35 100755 --- a/server/api/controllers/users/update.js +++ b/server/api/controllers/users/update.js @@ -7,7 +7,8 @@ const Errors = { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true }, isAdmin: { diff --git a/server/api/controllers/users/upload-avatar.js b/server/api/controllers/users/upload-avatar.js index 4df8b4e0..5c10b321 100755 --- a/server/api/controllers/users/upload-avatar.js +++ b/server/api/controllers/users/upload-avatar.js @@ -65,7 +65,8 @@ const createReceiver = () => { module.exports = { inputs: { id: { - type: 'number', + type: 'string', + regex: /^[0-9]+$/, required: true } }, diff --git a/server/api/helpers/create-card-membership.js b/server/api/helpers/create-card-membership.js index fc533eb4..26f8e130 100644 --- a/server/api/helpers/create-card-membership.js +++ b/server/api/helpers/create-card-membership.js @@ -6,7 +6,7 @@ module.exports = { }, userOrUserId: { type: 'ref', - custom: value => _.isPlainObject(value) || _.isFinite(value), + custom: value => _.isPlainObject(value) || _.isString(value), required: true }, request: { diff --git a/server/api/helpers/get-actions-for-card.js b/server/api/helpers/get-actions-for-card.js index 71a7ce50..58d98f46 100644 --- a/server/api/helpers/get-actions-for-card.js +++ b/server/api/helpers/get-actions-for-card.js @@ -4,11 +4,11 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true }, beforeId: { - type: 'number' + type: 'string' } }, diff --git a/server/api/helpers/get-boards-for-project.js b/server/api/helpers/get-boards-for-project.js index 8d21088f..64d514fb 100644 --- a/server/api/helpers/get-boards-for-project.js +++ b/server/api/helpers/get-boards-for-project.js @@ -2,12 +2,12 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true }, exceptBoardId: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value) + custom: value => _.isString(value) || _.isArray(value) } }, diff --git a/server/api/helpers/get-card-labels-for-card.js b/server/api/helpers/get-card-labels-for-card.js index f2efdef7..01b96344 100644 --- a/server/api/helpers/get-card-labels-for-card.js +++ b/server/api/helpers/get-card-labels-for-card.js @@ -2,7 +2,7 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true } }, diff --git a/server/api/helpers/get-cards-for-board.js b/server/api/helpers/get-cards-for-board.js index 84058169..23598729 100644 --- a/server/api/helpers/get-cards-for-board.js +++ b/server/api/helpers/get-cards-for-board.js @@ -2,7 +2,7 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true } }, diff --git a/server/api/helpers/get-cards-for-list.js b/server/api/helpers/get-cards-for-list.js index 60a3e687..e365ec1a 100644 --- a/server/api/helpers/get-cards-for-list.js +++ b/server/api/helpers/get-cards-for-list.js @@ -2,12 +2,12 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true }, exceptCardId: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value) + custom: value => _.isString(value) || _.isArray(value) } }, diff --git a/server/api/helpers/get-labels-for-board.js b/server/api/helpers/get-labels-for-board.js index 18b23931..20e1f376 100644 --- a/server/api/helpers/get-labels-for-board.js +++ b/server/api/helpers/get-labels-for-board.js @@ -2,7 +2,7 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true } }, diff --git a/server/api/helpers/get-lists-for-board.js b/server/api/helpers/get-lists-for-board.js index 556a6e2f..637d99b5 100644 --- a/server/api/helpers/get-lists-for-board.js +++ b/server/api/helpers/get-lists-for-board.js @@ -2,12 +2,12 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true }, exceptListId: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value) + custom: value => _.isString(value) || _.isArray(value) } }, diff --git a/server/api/helpers/get-membership-project-ids-for-user.js b/server/api/helpers/get-membership-project-ids-for-user.js index 483a1af3..66697287 100755 --- a/server/api/helpers/get-membership-project-ids-for-user.js +++ b/server/api/helpers/get-membership-project-ids-for-user.js @@ -2,7 +2,7 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true } }, diff --git a/server/api/helpers/get-membership-user-ids-for-project.js b/server/api/helpers/get-membership-user-ids-for-project.js index fb891911..72d74c44 100755 --- a/server/api/helpers/get-membership-user-ids-for-project.js +++ b/server/api/helpers/get-membership-user-ids-for-project.js @@ -2,7 +2,7 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true }, withProjectMemberships: { diff --git a/server/api/helpers/get-memberships-for-card.js b/server/api/helpers/get-memberships-for-card.js index aecba780..e77624e2 100644 --- a/server/api/helpers/get-memberships-for-card.js +++ b/server/api/helpers/get-memberships-for-card.js @@ -2,12 +2,12 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true }, exceptUserId: { - type: 'number', - custom: value => _.isInteger(value) || _.isArray(value) + type: 'json', + custom: value => _.isString(value) || _.isArray(value) } }, diff --git a/server/api/helpers/get-memberships-for-project.js b/server/api/helpers/get-memberships-for-project.js index 8f9257c7..1c171adc 100644 --- a/server/api/helpers/get-memberships-for-project.js +++ b/server/api/helpers/get-memberships-for-project.js @@ -2,7 +2,7 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true } }, diff --git a/server/api/helpers/get-notifications-for-user.js b/server/api/helpers/get-notifications-for-user.js index ff31b59d..eda5a7f1 100644 --- a/server/api/helpers/get-notifications-for-user.js +++ b/server/api/helpers/get-notifications-for-user.js @@ -2,7 +2,7 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true } }, diff --git a/server/api/helpers/get-project-memberships-for-user.js b/server/api/helpers/get-project-memberships-for-user.js index a8a230b9..691f8024 100644 --- a/server/api/helpers/get-project-memberships-for-user.js +++ b/server/api/helpers/get-project-memberships-for-user.js @@ -2,7 +2,7 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true } }, diff --git a/server/api/helpers/get-subscription-user-ids-for-card.js b/server/api/helpers/get-subscription-user-ids-for-card.js index d024f455..7d0426ed 100644 --- a/server/api/helpers/get-subscription-user-ids-for-card.js +++ b/server/api/helpers/get-subscription-user-ids-for-card.js @@ -2,12 +2,12 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true }, exceptUserId: { - type: 'number', - custom: value => _.isInteger(value) || _.isArray(value) + type: 'json', + custom: value => _.isString(value) || _.isArray(value) }, withCardSubscriptions: { type: 'boolean', diff --git a/server/api/helpers/get-subscriptions-by-user-for-card.js b/server/api/helpers/get-subscriptions-by-user-for-card.js index d40ab08b..bcb1bc7d 100644 --- a/server/api/helpers/get-subscriptions-by-user-for-card.js +++ b/server/api/helpers/get-subscriptions-by-user-for-card.js @@ -2,7 +2,7 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true }, userId: { diff --git a/server/api/helpers/get-subscriptions-for-card.js b/server/api/helpers/get-subscriptions-for-card.js index 4eb8c946..38f94d92 100644 --- a/server/api/helpers/get-subscriptions-for-card.js +++ b/server/api/helpers/get-subscriptions-for-card.js @@ -2,12 +2,12 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true }, exceptUserId: { - type: 'number', - custom: value => _.isInteger(value) || _.isArray(value) + type: 'json', + custom: value => _.isString(value) || _.isArray(value) } }, diff --git a/server/api/helpers/get-tasks-for-card.js b/server/api/helpers/get-tasks-for-card.js index bd8d95de..af01e76e 100644 --- a/server/api/helpers/get-tasks-for-card.js +++ b/server/api/helpers/get-tasks-for-card.js @@ -2,7 +2,7 @@ module.exports = { inputs: { id: { type: 'json', - custom: value => _.isInteger(value) || _.isArray(value), + custom: value => _.isString(value) || _.isArray(value), required: true } }, diff --git a/server/api/helpers/get-user.js b/server/api/helpers/get-user.js index cddbf7f5..5d319fe0 100644 --- a/server/api/helpers/get-user.js +++ b/server/api/helpers/get-user.js @@ -2,7 +2,7 @@ module.exports = { inputs: { criteria: { type: 'json', - custom: value => _.isInteger(value) || _.isPlainObject(value), + custom: value => _.isString(value) || _.isPlainObject(value), required: true } }, @@ -12,7 +12,7 @@ module.exports = { deletedAt: null }; - if (_.isInteger(inputs.criteria)) { + if (_.isString(inputs.criteria)) { criteria.id = inputs.criteria; } else if (_.isPlainObject(inputs.criteria)) { Object.assign(criteria, inputs.criteria); diff --git a/server/api/helpers/insert-to-positionables.js b/server/api/helpers/insert-to-positionables.js index 9e606b8b..9aff2e94 100755 --- a/server/api/helpers/insert-to-positionables.js +++ b/server/api/helpers/insert-to-positionables.js @@ -1,6 +1,6 @@ const GAP = 2 ** 14; const MIN_GAP = 0.125; -const MAX_POSITION = 2 ** 40; // 2 ** 50 +const MAX_POSITION = 2 ** 50; const findBeginnings = positions => { positions.unshift(0); diff --git a/server/api/helpers/is-user-member-for-project.js b/server/api/helpers/is-user-member-for-project.js index 4f3b2ce3..eb969539 100755 --- a/server/api/helpers/is-user-member-for-project.js +++ b/server/api/helpers/is-user-member-for-project.js @@ -1,11 +1,11 @@ module.exports = { inputs: { id: { - type: 'number', + type: 'string', required: true }, userId: { - type: 'number', + type: 'string', required: true } }, diff --git a/server/api/hooks/current-user/index.js b/server/api/hooks/current-user/index.js index f1104461..7d55a91e 100644 --- a/server/api/hooks/current-user/index.js +++ b/server/api/hooks/current-user/index.js @@ -12,7 +12,7 @@ module.exports = function defineCurrentUserHook(sails) { let id; try { - id = Number(sails.helpers.verifyToken(accessToken)); + id = sails.helpers.verifyToken(accessToken); } catch (unusedError) { return; } diff --git a/server/api/models/Archive.js b/server/api/models/Archive.js index 6cf5176c..435d8c8d 100755 --- a/server/api/models/Archive.js +++ b/server/api/models/Archive.js @@ -17,7 +17,7 @@ module.exports = { columnName: 'from_model' }, originalRecordId: { - type: 'number', + type: 'string', required: true, columnName: 'original_record_id' }, diff --git a/server/config/models.js b/server/config/models.js index da332273..df093e0a 100644 --- a/server/config/models.js +++ b/server/config/models.js @@ -66,7 +66,7 @@ module.exports.models = { attributes: { id: { - type: 'number', + type: 'string', autoIncrement: true, }, createdAt: { diff --git a/server/db/migrations/20180721020022_create_next_id_function.js b/server/db/migrations/20180721020022_create_next_id_function.js new file mode 100644 index 00000000..f2d71bcf --- /dev/null +++ b/server/db/migrations/20180721020022_create_next_id_function.js @@ -0,0 +1,26 @@ +module.exports.up = knex => knex.raw(` + CREATE SEQUENCE next_id_seq; + + CREATE FUNCTION next_id(OUT id BIGINT) AS $$ + DECLARE + shard INT := 1; + epoch BIGINT := 1567191600000; + + sequence BIGINT; + milliseconds BIGINT; + BEGIN + SELECT nextval('next_id_seq') % 1024 INTO sequence; + SELECT FLOOR(EXTRACT(EPOCH FROM clock_timestamp()) * 1000) INTO milliseconds; + + id := (milliseconds - epoch) << 23; + id := id | (shard << 10); + id := id | (sequence); + END; + $$ LANGUAGE PLPGSQL; +`); + +module.exports.down = knex => knex.raw(` + DROP SEQUENCE next_id_seq; + + DROP FUNCTION next_id(OUT id BIGINT); +`); diff --git a/server/db/migrations/20180721021044_create_archive.js b/server/db/migrations/20180721021044_create_archive_table.js similarity index 73% rename from server/db/migrations/20180721021044_create_archive.js rename to server/db/migrations/20180721021044_create_archive_table.js index 6a951205..b0dbf352 100755 --- a/server/db/migrations/20180721021044_create_archive.js +++ b/server/db/migrations/20180721021044_create_archive_table.js @@ -2,10 +2,13 @@ module.exports.up = knex => knex.schema.createTable('archive', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); table.text('from_model').notNullable(); - table.integer('original_record_id').notNullable(); + table.bigInteger('original_record_id').notNullable(); table.json('original_record').notNullable(); table.timestamp('created_at', true); diff --git a/server/db/migrations/20180721220409_create_user.js b/server/db/migrations/20180721220409_create_user_table.js similarity index 86% rename from server/db/migrations/20180721220409_create_user.js rename to server/db/migrations/20180721220409_create_user_table.js index 99e3baa5..81597478 100755 --- a/server/db/migrations/20180721220409_create_user.js +++ b/server/db/migrations/20180721220409_create_user_table.js @@ -3,7 +3,10 @@ module.exports.up = knex => .createTable('user', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); table.text('email').notNullable(); table.text('password').notNullable(); diff --git a/server/db/migrations/20180721233450_create_project.js b/server/db/migrations/20180721233450_create_project_table.js similarity index 75% rename from server/db/migrations/20180721233450_create_project.js rename to server/db/migrations/20180721233450_create_project_table.js index 6d41d833..9e1daa4d 100755 --- a/server/db/migrations/20180721233450_create_project.js +++ b/server/db/migrations/20180721233450_create_project_table.js @@ -2,7 +2,10 @@ module.exports.up = knex => knex.schema.createTable('project', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); table.text('name').notNullable(); diff --git a/server/db/migrations/20180721234154_create_project_membership.js b/server/db/migrations/20180721234154_create_project_membership_table.js similarity index 65% rename from server/db/migrations/20180721234154_create_project_membership.js rename to server/db/migrations/20180721234154_create_project_membership_table.js index 75bf0908..7a02ef78 100755 --- a/server/db/migrations/20180721234154_create_project_membership.js +++ b/server/db/migrations/20180721234154_create_project_membership_table.js @@ -2,10 +2,13 @@ module.exports.up = knex => knex.schema.createTable('project_membership', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); - table.integer('project_id').notNullable(); - table.integer('user_id').notNullable(); + table.bigInteger('project_id').notNullable(); + table.bigInteger('user_id').notNullable(); table.timestamp('created_at', true); table.timestamp('updated_at', true); diff --git a/server/db/migrations/20180722000627_create_board.js b/server/db/migrations/20180722000627_create_board_table.js similarity index 75% rename from server/db/migrations/20180722000627_create_board.js rename to server/db/migrations/20180722000627_create_board_table.js index 4144f67b..56204f0e 100755 --- a/server/db/migrations/20180722000627_create_board.js +++ b/server/db/migrations/20180722000627_create_board_table.js @@ -2,9 +2,12 @@ module.exports.up = knex => knex.schema.createTable('board', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); - table.integer('project_id').notNullable(); + table.bigInteger('project_id').notNullable(); table.specificType('position', 'double precision').notNullable(); table.text('name').notNullable(); diff --git a/server/db/migrations/20180722003437_create_list.js b/server/db/migrations/20180722003437_create_list_table.js similarity index 75% rename from server/db/migrations/20180722003437_create_list.js rename to server/db/migrations/20180722003437_create_list_table.js index fac1fc2c..3b3edec2 100755 --- a/server/db/migrations/20180722003437_create_list.js +++ b/server/db/migrations/20180722003437_create_list_table.js @@ -2,9 +2,12 @@ module.exports.up = knex => knex.schema.createTable('list', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); - table.integer('board_id').notNullable(); + table.bigInteger('board_id').notNullable(); table.specificType('position', 'double precision').notNullable(); table.text('name').notNullable(); diff --git a/server/db/migrations/20180722003502_create_label.js b/server/db/migrations/20180722003502_create_label_table.js similarity index 71% rename from server/db/migrations/20180722003502_create_label.js rename to server/db/migrations/20180722003502_create_label_table.js index 948a25a5..77075d46 100755 --- a/server/db/migrations/20180722003502_create_label.js +++ b/server/db/migrations/20180722003502_create_label_table.js @@ -2,9 +2,12 @@ module.exports.up = knex => knex.schema.createTable('label', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); - table.integer('board_id').notNullable(); + table.bigInteger('board_id').notNullable(); table.text('name'); table.text('color').notNullable(); diff --git a/server/db/migrations/20180722003614_create_card.js b/server/db/migrations/20180722003614_create_card_table.js similarity index 73% rename from server/db/migrations/20180722003614_create_card.js rename to server/db/migrations/20180722003614_create_card_table.js index 2f5d5047..4b502252 100755 --- a/server/db/migrations/20180722003614_create_card.js +++ b/server/db/migrations/20180722003614_create_card_table.js @@ -2,10 +2,13 @@ module.exports.up = knex => knex.schema.createTable('card', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); - table.integer('list_id').notNullable(); - table.integer('board_id').notNullable(); + table.bigInteger('list_id').notNullable(); + table.bigInteger('board_id').notNullable(); table.specificType('position', 'double precision').notNullable(); table.text('name').notNullable(); diff --git a/server/db/migrations/20180722005122_create_card_subscription.js b/server/db/migrations/20180722005122_create_card_subscription_table.js similarity index 68% rename from server/db/migrations/20180722005122_create_card_subscription.js rename to server/db/migrations/20180722005122_create_card_subscription_table.js index f572121b..83988698 100755 --- a/server/db/migrations/20180722005122_create_card_subscription.js +++ b/server/db/migrations/20180722005122_create_card_subscription_table.js @@ -2,10 +2,13 @@ module.exports.up = knex => knex.schema.createTable('card_subscription', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); - table.integer('card_id').notNullable(); - table.integer('user_id').notNullable(); + table.bigInteger('card_id').notNullable(); + table.bigInteger('user_id').notNullable(); table.boolean('is_permanent').notNullable(); diff --git a/server/db/migrations/20180722005359_create_card_membership.js b/server/db/migrations/20180722005359_create_card_membership_table.js similarity index 65% rename from server/db/migrations/20180722005359_create_card_membership.js rename to server/db/migrations/20180722005359_create_card_membership_table.js index d8b73888..ce720d4a 100755 --- a/server/db/migrations/20180722005359_create_card_membership.js +++ b/server/db/migrations/20180722005359_create_card_membership_table.js @@ -2,10 +2,13 @@ module.exports.up = knex => knex.schema.createTable('card_membership', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); - table.integer('card_id').notNullable(); - table.integer('user_id').notNullable(); + table.bigInteger('card_id').notNullable(); + table.bigInteger('user_id').notNullable(); table.timestamp('created_at', true); table.timestamp('updated_at', true); diff --git a/server/db/migrations/20180722005928_create_card_label.js b/server/db/migrations/20180722005928_create_card_label_table.js similarity index 65% rename from server/db/migrations/20180722005928_create_card_label.js rename to server/db/migrations/20180722005928_create_card_label_table.js index 3d900d3b..02eeaccb 100755 --- a/server/db/migrations/20180722005928_create_card_label.js +++ b/server/db/migrations/20180722005928_create_card_label_table.js @@ -2,10 +2,13 @@ module.exports.up = knex => knex.schema.createTable('card_label', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); - table.integer('card_id').notNullable(); - table.integer('label_id').notNullable(); + table.bigInteger('card_id').notNullable(); + table.bigInteger('label_id').notNullable(); table.timestamp('created_at', true); table.timestamp('updated_at', true); diff --git a/server/db/migrations/20180722006570_create_task.js b/server/db/migrations/20180722006570_create_task_table.js similarity index 73% rename from server/db/migrations/20180722006570_create_task.js rename to server/db/migrations/20180722006570_create_task_table.js index c7db320a..ead0beda 100755 --- a/server/db/migrations/20180722006570_create_task.js +++ b/server/db/migrations/20180722006570_create_task_table.js @@ -2,9 +2,12 @@ module.exports.up = knex => knex.schema.createTable('task', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); - table.integer('card_id').notNullable(); + table.bigInteger('card_id').notNullable(); table.text('name').notNullable(); table.boolean('is_completed').notNullable(); diff --git a/server/db/migrations/20181024220134_create_action.js b/server/db/migrations/20181024220134_create_action_table.js similarity index 66% rename from server/db/migrations/20181024220134_create_action.js rename to server/db/migrations/20181024220134_create_action_table.js index 3604c104..cd067682 100755 --- a/server/db/migrations/20181024220134_create_action.js +++ b/server/db/migrations/20181024220134_create_action_table.js @@ -2,10 +2,13 @@ module.exports.up = knex => knex.schema.createTable('action', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); - table.integer('card_id').notNullable(); - table.integer('user_id').notNullable(); + table.bigInteger('card_id').notNullable(); + table.bigInteger('user_id').notNullable(); table.text('type').notNullable(); table.jsonb('data').notNullable(); diff --git a/server/db/migrations/20181112104653_create_notification.js b/server/db/migrations/20181112104653_create_notification_table.js similarity index 65% rename from server/db/migrations/20181112104653_create_notification.js rename to server/db/migrations/20181112104653_create_notification_table.js index 70c13e7b..c5b3759d 100755 --- a/server/db/migrations/20181112104653_create_notification.js +++ b/server/db/migrations/20181112104653_create_notification_table.js @@ -2,11 +2,14 @@ module.exports.up = knex => knex.schema.createTable('notification', table => { /* Columns */ - table.increments(); + table + .bigInteger('id') + .primary() + .defaultTo(knex.raw('next_id()')); - table.integer('user_id').notNullable(); - table.integer('action_id').notNullable(); - table.integer('card_id').notNullable(); + table.bigInteger('user_id').notNullable(); + table.bigInteger('action_id').notNullable(); + table.bigInteger('card_id').notNullable(); table.boolean('is_read').notNullable();