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();