diff --git a/store/db/mysql/memo.go b/store/db/mysql/memo.go index 7b14686d..5b2e0535 100644 --- a/store/db/mysql/memo.go +++ b/store/db/mysql/memo.go @@ -12,9 +12,9 @@ import ( ) func (d *DB) CreateMemo(ctx context.Context, create *store.Memo) (*store.Memo, error) { - fields := []string{"`creator_id`", "`content`", "`visibility`"} - placeholder := []string{"?", "?", "?"} - args := []any{create.CreatorID, create.Content, create.Visibility} + fields := []string{"`resource_name`", "`creator_id`", "`content`", "`visibility`"} + placeholder := []string{"?", "?", "?", "?"} + args := []any{create.ResourceName, create.CreatorID, create.Content, create.Visibility} stmt := "INSERT INTO `memo` (" + strings.Join(fields, ", ") + ") VALUES (" + strings.Join(placeholder, ", ") + ")" result, err := d.db.ExecContext(ctx, stmt, args...) @@ -43,6 +43,9 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo if v := find.ID; v != nil { where, args = append(where, "`memo`.`id` = ?"), append(args, *v) } + if v := find.ResourceName; v != nil { + where, args = append(where, "`memo`.`resource_name` = ?"), append(args, *v) + } if v := find.CreatorID; v != nil { where, args = append(where, "`memo`.`creator_id` = ?"), append(args, *v) } @@ -91,6 +94,7 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo fields := []string{ "`memo`.`id` AS `id`", + "`memo`.`resource_name` AS `resource_name`", "`memo`.`creator_id` AS `creator_id`", "UNIX_TIMESTAMP(`memo`.`created_ts`) AS `created_ts`", "UNIX_TIMESTAMP(`memo`.`updated_ts`) AS `updated_ts`", @@ -122,6 +126,7 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo var memo store.Memo dests := []any{ &memo.ID, + &memo.ResourceName, &memo.CreatorID, &memo.CreatedTs, &memo.UpdatedTs, @@ -161,6 +166,9 @@ func (d *DB) GetMemo(ctx context.Context, find *store.FindMemo) (*store.Memo, er func (d *DB) UpdateMemo(ctx context.Context, update *store.UpdateMemo) error { set, args := []string{}, []any{} + if v := update.ResourceName; v != nil { + set, args = append(set, "`resource_name` = ?"), append(args, *v) + } if v := update.CreatedTs; v != nil { set, args = append(set, "`created_ts` = FROM_UNIXTIME(?)"), append(args, *v) } diff --git a/store/db/mysql/migration/dev/LATEST__SCHEMA.sql b/store/db/mysql/migration/dev/LATEST__SCHEMA.sql index 2ff4b65e..b5379a34 100644 --- a/store/db/mysql/migration/dev/LATEST__SCHEMA.sql +++ b/store/db/mysql/migration/dev/LATEST__SCHEMA.sql @@ -36,6 +36,7 @@ CREATE TABLE `user_setting` ( -- memo CREATE TABLE `memo` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + `resource_name` VARCHAR(256) NOT NULL UNIQUE, `creator_id` INT NOT NULL, `created_ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, diff --git a/store/db/postgres/memo.go b/store/db/postgres/memo.go index f363818f..ad74a372 100644 --- a/store/db/postgres/memo.go +++ b/store/db/postgres/memo.go @@ -12,8 +12,8 @@ import ( ) func (d *DB) CreateMemo(ctx context.Context, create *store.Memo) (*store.Memo, error) { - fields := []string{"creator_id", "content", "visibility"} - args := []any{create.CreatorID, create.Content, create.Visibility} + fields := []string{"resource_name", "creator_id", "content", "visibility"} + args := []any{create.ResourceName, create.CreatorID, create.Content, create.Visibility} stmt := "INSERT INTO memo (" + strings.Join(fields, ", ") + ") VALUES (" + placeholders(len(args)) + ") RETURNING id, created_ts, updated_ts, row_status" if err := d.db.QueryRowContext(ctx, stmt, args...).Scan( @@ -34,6 +34,9 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo if v := find.ID; v != nil { where, args = append(where, "memo.id = "+placeholder(len(args)+1)), append(args, *v) } + if v := find.ResourceName; v != nil { + where, args = append(where, "memo.resource_name = "+placeholder(len(args)+1)), append(args, *v) + } if v := find.CreatorID; v != nil { where, args = append(where, "memo.creator_id = "+placeholder(len(args)+1)), append(args, *v) } @@ -82,6 +85,7 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo fields := []string{ `memo.id AS id`, + `memo.resource_name AS resource_name`, `memo.creator_id AS creator_id`, `memo.created_ts AS created_ts`, `memo.updated_ts AS updated_ts`, @@ -118,6 +122,7 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo var memo store.Memo dests := []any{ &memo.ID, + &memo.ResourceName, &memo.CreatorID, &memo.CreatedTs, &memo.UpdatedTs, @@ -157,6 +162,9 @@ func (d *DB) GetMemo(ctx context.Context, find *store.FindMemo) (*store.Memo, er func (d *DB) UpdateMemo(ctx context.Context, update *store.UpdateMemo) error { set, args := []string{}, []any{} + if v := update.ResourceName; v != nil { + set, args = append(set, "resource_name = "+placeholder(len(args)+1)), append(args, *v) + } if v := update.CreatedTs; v != nil { set, args = append(set, "created_ts = "+placeholder(len(args)+1)), append(args, *v) } diff --git a/store/db/postgres/migration/dev/LATEST__SCHEMA.sql b/store/db/postgres/migration/dev/LATEST__SCHEMA.sql index 8c414fd1..b31e5f4e 100644 --- a/store/db/postgres/migration/dev/LATEST__SCHEMA.sql +++ b/store/db/postgres/migration/dev/LATEST__SCHEMA.sql @@ -36,6 +36,7 @@ CREATE TABLE user_setting ( -- memo CREATE TABLE memo ( id SERIAL PRIMARY KEY, + resource_name TEXT NOT NULL UNIQUE, creator_id INTEGER NOT NULL, created_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()), updated_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),