diff --git a/server/version/version.go b/server/version/version.go index 6796588c..e5cf8c9b 100644 --- a/server/version/version.go +++ b/server/version/version.go @@ -9,10 +9,10 @@ import ( // Version is the service current released version. // Semantic versioning: https://semver.org/ -var Version = "0.21.0" +var Version = "0.22.0" // DevVersion is the service current development version. -var DevVersion = "0.21.0" +var DevVersion = "0.22.0" func GetCurrentVersion(mode string) string { if mode == "dev" || mode == "demo" { diff --git a/store/db/mysql/memo.go b/store/db/mysql/memo.go index 9f3f30c7..77d9ea61 100644 --- a/store/db/mysql/memo.go +++ b/store/db/mysql/memo.go @@ -12,8 +12,8 @@ import ( ) func (d *DB) CreateMemo(ctx context.Context, create *store.Memo) (*store.Memo, error) { - fields := []string{"`uid`", "`creator_id`", "`content`", "`visibility`", "`tags`"} - placeholder := []string{"?", "?", "?", "?", "?"} + fields := []string{"`uid`", "`creator_id`", "`content`", "`visibility`", "`tags`", "`payload`"} + placeholder := []string{"?", "?", "?", "?", "?", "?"} tags := "[]" if len(create.Tags) != 0 { tagsBytes, err := json.Marshal(create.Tags) @@ -22,7 +22,7 @@ func (d *DB) CreateMemo(ctx context.Context, create *store.Memo) (*store.Memo, e } tags = string(tagsBytes) } - args := []any{create.UID, create.CreatorID, create.Content, create.Visibility, tags} + args := []any{create.UID, create.CreatorID, create.Content, create.Visibility, tags, "{}"} stmt := "INSERT INTO `memo` (" + strings.Join(fields, ", ") + ") VALUES (" + strings.Join(placeholder, ", ") + ")" result, err := d.db.ExecContext(ctx, stmt, args...) diff --git a/store/db/mysql/migration/dev/LATEST__SCHEMA.sql b/store/db/mysql/migration/dev/LATEST__SCHEMA.sql index 13485010..3a3fb7d0 100644 --- a/store/db/mysql/migration/dev/LATEST__SCHEMA.sql +++ b/store/db/mysql/migration/dev/LATEST__SCHEMA.sql @@ -44,7 +44,8 @@ CREATE TABLE `memo` ( `row_status` VARCHAR(256) NOT NULL DEFAULT 'NORMAL', `content` TEXT NOT NULL, `visibility` VARCHAR(256) NOT NULL DEFAULT 'PRIVATE', - `tags` JSON NOT NULL + `tags` JSON NOT NULL, + `payload` JSON NOT NULL ); -- memo_organizer @@ -80,13 +81,6 @@ CREATE TABLE `resource` ( `payload` TEXT NOT NULL ); --- tag -CREATE TABLE `tag` ( - `name` VARCHAR(256) NOT NULL, - `creator_id` INT NOT NULL, - UNIQUE(`name`,`creator_id`) -); - -- activity CREATE TABLE `activity` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, diff --git a/store/db/mysql/migration/prod/0.22/02__memo_payload.sql b/store/db/mysql/migration/prod/0.22/02__memo_payload.sql new file mode 100644 index 00000000..c9cbb142 --- /dev/null +++ b/store/db/mysql/migration/prod/0.22/02__memo_payload.sql @@ -0,0 +1,4 @@ +ALTER TABLE `memo` ADD COLUMN `payload_temp` JSON; +UPDATE `memo` SET `payload_temp` = '{}'; +ALTER TABLE `memo` DROP COLUMN `payload`; +ALTER TABLE `memo` CHANGE COLUMN `payload_temp` `payload` JSON NOT NULL; diff --git a/store/db/mysql/migration/prod/0.22/03__drop_tag.sql b/store/db/mysql/migration/prod/0.22/03__drop_tag.sql new file mode 100644 index 00000000..ba302faa --- /dev/null +++ b/store/db/mysql/migration/prod/0.22/03__drop_tag.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS `tag`; diff --git a/store/db/mysql/migration/prod/LATEST__SCHEMA.sql b/store/db/mysql/migration/prod/LATEST__SCHEMA.sql index c25caa06..3a3fb7d0 100644 --- a/store/db/mysql/migration/prod/LATEST__SCHEMA.sql +++ b/store/db/mysql/migration/prod/LATEST__SCHEMA.sql @@ -43,7 +43,9 @@ CREATE TABLE `memo` ( `updated_ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `row_status` VARCHAR(256) NOT NULL DEFAULT 'NORMAL', `content` TEXT NOT NULL, - `visibility` VARCHAR(256) NOT NULL DEFAULT 'PRIVATE' + `visibility` VARCHAR(256) NOT NULL DEFAULT 'PRIVATE', + `tags` JSON NOT NULL, + `payload` JSON NOT NULL ); -- memo_organizer @@ -71,18 +73,12 @@ CREATE TABLE `resource` ( `updated_ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `filename` TEXT NOT NULL, `blob` MEDIUMBLOB, - `external_link` TEXT NOT NULL, `type` VARCHAR(256) NOT NULL DEFAULT '', `size` INT NOT NULL DEFAULT '0', - `internal_path` VARCHAR(256) NOT NULL DEFAULT '', - `memo_id` INT DEFAULT NULL -); - --- tag -CREATE TABLE `tag` ( - `name` VARCHAR(256) NOT NULL, - `creator_id` INT NOT NULL, - UNIQUE(`name`,`creator_id`) + `memo_id` INT DEFAULT NULL, + `storage_type` VARCHAR(256) NOT NULL DEFAULT '', + `reference` VARCHAR(256) NOT NULL DEFAULT '', + `payload` TEXT NOT NULL ); -- activity @@ -95,14 +91,6 @@ CREATE TABLE `activity` ( `payload` TEXT NOT NULL ); --- storage -CREATE TABLE `storage` ( - `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, - `name` VARCHAR(256) NOT NULL, - `type` VARCHAR(256) NOT NULL, - `config` TEXT NOT NULL -); - -- idp CREATE TABLE `idp` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, diff --git a/store/db/postgres/migration/dev/LATEST__SCHEMA.sql b/store/db/postgres/migration/dev/LATEST__SCHEMA.sql index dba43e18..957eaced 100644 --- a/store/db/postgres/migration/dev/LATEST__SCHEMA.sql +++ b/store/db/postgres/migration/dev/LATEST__SCHEMA.sql @@ -44,7 +44,8 @@ CREATE TABLE memo ( row_status TEXT NOT NULL DEFAULT 'NORMAL', content TEXT NOT NULL, visibility TEXT NOT NULL DEFAULT 'PRIVATE', - tags JSONB NOT NULL DEFAULT '[]' + tags JSONB NOT NULL DEFAULT '[]', + payload JSONB NOT NULL DEFAULT '{}' ); -- memo_organizer @@ -80,13 +81,6 @@ CREATE TABLE resource ( payload TEXT NOT NULL DEFAULT '{}' ); --- tag -CREATE TABLE tag ( - name TEXT NOT NULL, - creator_id INTEGER NOT NULL, - UNIQUE(name, creator_id) -); - -- activity CREATE TABLE activity ( id SERIAL PRIMARY KEY, diff --git a/store/db/postgres/migration/prod/0.22/02__memo_payload.sql b/store/db/postgres/migration/prod/0.22/02__memo_payload.sql new file mode 100644 index 00000000..68dc159c --- /dev/null +++ b/store/db/postgres/migration/prod/0.22/02__memo_payload.sql @@ -0,0 +1 @@ +ALTER TABLE memo ADD COLUMN payload JSONB NOT NULL DEFAULT '{}'; diff --git a/store/db/postgres/migration/prod/0.22/03__drop_tag.sql b/store/db/postgres/migration/prod/0.22/03__drop_tag.sql new file mode 100644 index 00000000..8e3d418e --- /dev/null +++ b/store/db/postgres/migration/prod/0.22/03__drop_tag.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS tag; diff --git a/store/db/postgres/migration/prod/LATEST__SCHEMA.sql b/store/db/postgres/migration/prod/LATEST__SCHEMA.sql index 06c422b9..957eaced 100644 --- a/store/db/postgres/migration/prod/LATEST__SCHEMA.sql +++ b/store/db/postgres/migration/prod/LATEST__SCHEMA.sql @@ -43,7 +43,9 @@ CREATE TABLE memo ( updated_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()), row_status TEXT NOT NULL DEFAULT 'NORMAL', content TEXT NOT NULL, - visibility TEXT NOT NULL DEFAULT 'PRIVATE' + visibility TEXT NOT NULL DEFAULT 'PRIVATE', + tags JSONB NOT NULL DEFAULT '[]', + payload JSONB NOT NULL DEFAULT '{}' ); -- memo_organizer @@ -71,18 +73,12 @@ CREATE TABLE resource ( updated_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()), filename TEXT NOT NULL, blob BYTEA, - external_link TEXT NOT NULL, type TEXT NOT NULL DEFAULT '', size INTEGER NOT NULL DEFAULT 0, - internal_path TEXT NOT NULL DEFAULT '', - memo_id INTEGER DEFAULT NULL -); - --- tag -CREATE TABLE tag ( - name TEXT NOT NULL, - creator_id INTEGER NOT NULL, - UNIQUE(name, creator_id) + memo_id INTEGER DEFAULT NULL, + storage_type TEXT NOT NULL DEFAULT '', + reference TEXT NOT NULL DEFAULT '', + payload TEXT NOT NULL DEFAULT '{}' ); -- activity @@ -95,14 +91,6 @@ CREATE TABLE activity ( payload JSONB NOT NULL DEFAULT '{}' ); --- storage -CREATE TABLE storage ( - id SERIAL PRIMARY KEY, - name TEXT NOT NULL, - type TEXT NOT NULL, - config JSONB NOT NULL DEFAULT '{}' -); - -- idp CREATE TABLE idp ( id SERIAL PRIMARY KEY, diff --git a/store/db/sqlite/migration/dev/LATEST__SCHEMA.sql b/store/db/sqlite/migration/dev/LATEST__SCHEMA.sql index 231677d4..8052de8c 100644 --- a/store/db/sqlite/migration/dev/LATEST__SCHEMA.sql +++ b/store/db/sqlite/migration/dev/LATEST__SCHEMA.sql @@ -47,7 +47,8 @@ CREATE TABLE memo ( row_status TEXT NOT NULL CHECK (row_status IN ('NORMAL', 'ARCHIVED')) DEFAULT 'NORMAL', content TEXT NOT NULL DEFAULT '', visibility TEXT NOT NULL CHECK (visibility IN ('PUBLIC', 'PROTECTED', 'PRIVATE')) DEFAULT 'PRIVATE', - tags TEXT NOT NULL DEFAULT '[]' + tags TEXT NOT NULL DEFAULT '[]', + payload TEXT NOT NULL DEFAULT '{}' ); CREATE INDEX idx_memo_creator_id ON memo (creator_id); @@ -92,13 +93,6 @@ CREATE INDEX idx_resource_creator_id ON resource (creator_id); CREATE INDEX idx_resource_memo_id ON resource (memo_id); --- tag -CREATE TABLE tag ( - name TEXT NOT NULL, - creator_id INTEGER NOT NULL, - UNIQUE(name, creator_id) -); - -- activity CREATE TABLE activity ( id INTEGER PRIMARY KEY AUTOINCREMENT, diff --git a/store/db/sqlite/migration/prod/0.22/02__memo_payload.sql b/store/db/sqlite/migration/prod/0.22/02__memo_payload.sql new file mode 100644 index 00000000..267a7497 --- /dev/null +++ b/store/db/sqlite/migration/prod/0.22/02__memo_payload.sql @@ -0,0 +1 @@ +ALTER TABLE memo ADD COLUMN payload TEXT NOT NULL DEFAULT '{}'; diff --git a/store/db/sqlite/migration/prod/0.22/03__drop_tag.sql b/store/db/sqlite/migration/prod/0.22/03__drop_tag.sql new file mode 100644 index 00000000..6411efb7 --- /dev/null +++ b/store/db/sqlite/migration/prod/0.22/03__drop_tag.sql @@ -0,0 +1 @@ +DROP TABLE tag; \ No newline at end of file diff --git a/store/db/sqlite/migration/prod/LATEST__SCHEMA.sql b/store/db/sqlite/migration/prod/LATEST__SCHEMA.sql index def1d7dc..8052de8c 100644 --- a/store/db/sqlite/migration/prod/LATEST__SCHEMA.sql +++ b/store/db/sqlite/migration/prod/LATEST__SCHEMA.sql @@ -46,12 +46,15 @@ CREATE TABLE memo ( updated_ts BIGINT NOT NULL DEFAULT (strftime('%s', 'now')), row_status TEXT NOT NULL CHECK (row_status IN ('NORMAL', 'ARCHIVED')) DEFAULT 'NORMAL', content TEXT NOT NULL DEFAULT '', - visibility TEXT NOT NULL CHECK (visibility IN ('PUBLIC', 'PROTECTED', 'PRIVATE')) DEFAULT 'PRIVATE' + visibility TEXT NOT NULL CHECK (visibility IN ('PUBLIC', 'PROTECTED', 'PRIVATE')) DEFAULT 'PRIVATE', + tags TEXT NOT NULL DEFAULT '[]', + payload TEXT NOT NULL DEFAULT '{}' ); CREATE INDEX idx_memo_creator_id ON memo (creator_id); CREATE INDEX idx_memo_content ON memo (content); CREATE INDEX idx_memo_visibility ON memo (visibility); +CREATE INDEX idx_memo_tags ON memo (tags); -- memo_organizer CREATE TABLE memo_organizer ( @@ -78,24 +81,18 @@ CREATE TABLE resource ( updated_ts BIGINT NOT NULL DEFAULT (strftime('%s', 'now')), filename TEXT NOT NULL DEFAULT '', blob BLOB DEFAULT NULL, - external_link TEXT NOT NULL DEFAULT '', type TEXT NOT NULL DEFAULT '', size INTEGER NOT NULL DEFAULT 0, - internal_path TEXT NOT NULL DEFAULT '', - memo_id INTEGER + memo_id INTEGER, + storage_type TEXT NOT NULL DEFAULT '', + reference TEXT NOT NULL DEFAULT '', + payload TEXT NOT NULL DEFAULT '{}' ); CREATE INDEX idx_resource_creator_id ON resource (creator_id); CREATE INDEX idx_resource_memo_id ON resource (memo_id); --- tag -CREATE TABLE tag ( - name TEXT NOT NULL, - creator_id INTEGER NOT NULL, - UNIQUE(name, creator_id) -); - -- activity CREATE TABLE activity ( id INTEGER PRIMARY KEY AUTOINCREMENT, @@ -106,14 +103,6 @@ CREATE TABLE activity ( payload TEXT NOT NULL DEFAULT '{}' ); --- storage -CREATE TABLE storage ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - type TEXT NOT NULL, - config TEXT NOT NULL DEFAULT '{}' -); - -- idp CREATE TABLE idp ( id INTEGER PRIMARY KEY AUTOINCREMENT,