1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-18 20:59:44 +02:00

Change id generation algorithm, display notifications total on the main page

This commit is contained in:
Maksim Eltyshev 2019-10-10 02:51:54 +05:00
parent 9ebc82bf22
commit 3848cc194a
86 changed files with 264 additions and 159 deletions

View file

@ -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);
`);

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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