mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-04-25 22:05:51 +03:00
[PR #484] [MERGED] feat: support transfer address from user to user #590
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/cloudflare_temp_email#590
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/dreamhunter2333/cloudflare_temp_email/pull/484
Author: @dreamhunter2333
Created: 11/14/2024
Status: ✅ Merged
Merged: 11/14/2024
Merged by: @dreamhunter2333
Base:
main← Head:feature/dev📝 Commits (2)
cfda051feat: support transfer address from user to userdf453cdfeat: remove service worker📊 Changes
7 files changed (+159 additions, -9 deletions)
View changed files
📝
CHANGELOG.md(+1 -0)📝
db/schema.sql(+1 -1)📝
frontend/src/main.js(+0 -4)📝
frontend/src/views/user/AddressManagement.vue(+65 -2)📝
frontend/vite.config.js(+1 -1)📝
worker/src/user_api/bind_address.ts(+90 -1)📝
worker/src/user_api/index.ts(+1 -0)📄 Description
User description
如果你是全新部署,不需要迁移数据,下面的内容可以忽略,可以离开本文档了。
如果要用户间转移邮箱地址,并需要之前的用户无法登录,就需要进行数据迁移操作。因为目前的表结构最大的 ID 会被重复使用,所以转移最大 id 的邮箱会导致 ID 相同,如果你并不在意这件事可以忽略下面的步骤。
下面是更改表结构的详细步骤
创建新表:
为了增加新的特性(例如 AUTOINCREMENT)并且保留现有 id,您需要创建一个新表。确保新表结构与原始表完全一致,只是在 id 列上添加 AUTOINCREMENT。
CREATE TABLE address_new (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
从旧表迁移数据到新表:
这里,我们需要保留所有字段,包括 id 列。因此,插入时要明确指定各个字段:
INSERT INTO address_new (id, name, created_at, updated_at)
SELECT id, name, created_at, updated_at FROM address;
验证迁移数据:
迁移后,我们需要验证新表中的数据是否与旧表一致,包括 id 值是否正确迁移:
SELECT * FROM address_new;
重命名旧表:
在迁移数据成功并验证之后,可以重命名旧表以备用:
ALTER TABLE address RENAME TO address_old;
将新表重命名为原始表的名称:
紧接着,将新表重命名为原始表名,以便应用程序继续使用相同的表名:
ALTER TABLE address_new RENAME TO address;
最终验证:
确认新命名的表结构和数据:
PRAGMA table_info(address);
SELECT * FROM address;
删除旧表(可选):
确认一切工作正常并且不再需要旧表后,可以删除旧表以释放空间(此步骤是可选的):
DROP TABLE address_old;
完整示例
以下是从创建新表、迁移数据到最终重命名表的完整 SQL 示例:
-- Step 1: 创建新的 table
CREATE TABLE address_new (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Step 2: 从旧表迁移数据,包括 id 列
INSERT INTO address_new (id, name, created_at, updated_at)
SELECT id, name, created_at, updated_at FROM address;
-- Step 3: 验证迁移
SELECT * FROM address_new;
-- Step 4: 重命名旧表
ALTER TABLE address RENAME TO address_old;
-- Step 5: 将新表重命名为旧表名称
ALTER TABLE address_new RENAME TO address;
-- Step 6: 最终验证
PRAGMA table_info(address);
SELECT * FROM address;
-- Step 7: 删除旧表(可选)
DROP TABLE address_old;
通过上述步骤,您将成功地迁移旧表的数据至新表,包括 id 列的完整保留,并有效实现 AUTOINCREMENT。
PR Type
Enhancement, Documentation
Description
idcolumn in theaddresstable.Changes walkthrough 📝
AddressManagement.vue
Add UI and logic for transferring addresses between usersfrontend/src/views/user/AddressManagement.vue
bind_address.ts
Implement API endpoint and logic for address transferworker/src/user_api/bind_address.ts
index.ts
Add route for address transfer API endpointworker/src/user_api/index.ts
schema.sql
Update address table schema to use AUTOINCREMENTdb/schema.sql
addresstable schema to use AUTOINCREMENT for theidcolumn.CHANGELOG.md
Update changelog with address transfer featureCHANGELOG.md
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.