feat(sheet): 支持在创建表格后添加协作者
All checks were successful
Egg Server MIflow / build-image (push) Successful in 41s
All checks were successful
Egg Server MIflow / build-image (push) Successful in 41s
This commit is contained in:
parent
398419067b
commit
9447ef2b6b
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -12,7 +12,10 @@
|
||||
"Gruntfuggly",
|
||||
"metas",
|
||||
"mina",
|
||||
"mindnote",
|
||||
"openchat",
|
||||
"tseslint",
|
||||
"userid",
|
||||
"wlpbbgiky",
|
||||
"Yoav"
|
||||
]
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { getChatId } from "@egg/lark-msg-tool"
|
||||
import { getChatId, getChatType, getUserId } from "@egg/lark-msg-tool"
|
||||
|
||||
import { Context, LarkServer } from "../../types"
|
||||
import { genSheetDbErrorMsg, genTempMsg } from "../../utils/genMsg"
|
||||
@ -6,8 +6,7 @@ import { genSheetDbErrorMsg, genTempMsg } from "../../utils/genMsg"
|
||||
/**
|
||||
* 创建键值多维表格
|
||||
* 实际上是从模版复制出来一个
|
||||
* @param {Context.Data} ctx - 上下文数据,包括larkService和logger
|
||||
* @returns {Promise<LarkServer.BaseRes>} - 返回包含链接和token的响应
|
||||
* @param ctx - Context
|
||||
*/
|
||||
const create = async ({
|
||||
larkService,
|
||||
@ -43,6 +42,9 @@ const create = async ({
|
||||
data: {
|
||||
link,
|
||||
token,
|
||||
fileToken,
|
||||
tableId,
|
||||
viewId,
|
||||
},
|
||||
message: "success",
|
||||
}
|
||||
@ -50,21 +52,54 @@ const create = async ({
|
||||
|
||||
/**
|
||||
* 从事件创建键值多维表格
|
||||
* @param {Context.Data} ctx - 上下文数据,包括larkService和logger
|
||||
* @param ctx - Context
|
||||
*/
|
||||
const createFromEvent = async (ctx: Context.Data) => {
|
||||
const chatId = getChatId(ctx.body)
|
||||
if (!chatId) return
|
||||
const createRes = await create(ctx)
|
||||
// 错误处理,发送错误消息
|
||||
if (createRes.code !== 0) {
|
||||
const errorMsg = genSheetDbErrorMsg(createRes.message)
|
||||
// 先发一条消息告诉用户正在创建
|
||||
ctx.larkService.message.send(
|
||||
"chat_id",
|
||||
chatId,
|
||||
"text",
|
||||
"正在为您创建多维表格,请稍等片刻~"
|
||||
)
|
||||
|
||||
try {
|
||||
const createRes = await create(ctx)
|
||||
// 错误处理,发送错误消息
|
||||
if (createRes.code !== 0) throw new Error(createRes.message)
|
||||
|
||||
// 创建成功,根据消息类型添加协作者
|
||||
if (getChatType(ctx.body) === "p2p") {
|
||||
const addRes = await ctx.larkService.drive.addCollaborator(
|
||||
createRes.data.fileToken,
|
||||
"bitable",
|
||||
"userid",
|
||||
getUserId(ctx.body)!,
|
||||
"full_access"
|
||||
)
|
||||
if (addRes.code !== 0) throw new Error(addRes.message)
|
||||
}
|
||||
// 为群组添加协作者
|
||||
else {
|
||||
const addRes = await ctx.larkService.drive.addCollaborator(
|
||||
createRes.data.fileToken,
|
||||
"bitable",
|
||||
"openchat",
|
||||
chatId,
|
||||
"full_access"
|
||||
)
|
||||
if (addRes.code !== 0) throw new Error(addRes.message)
|
||||
}
|
||||
// 全部成功,发送成功消息
|
||||
const successMsg = genTempMsg("ctp_AA00oqPWPXtG", createRes.data)
|
||||
ctx.larkService.message.send("chat_id", chatId, "interactive", successMsg)
|
||||
} catch (e: any) {
|
||||
ctx.logger.error(`create KV bitable failed: ${e.message}`)
|
||||
const errorMsg = genSheetDbErrorMsg(e.message)
|
||||
ctx.larkService.message.send("chat_id", chatId, "interactive", errorMsg)
|
||||
return
|
||||
}
|
||||
// 成功了组织一下URL和Token,发送成功消息
|
||||
const successMsg = genTempMsg("ctp_AA00oqPWPXtG", createRes.data)
|
||||
ctx.larkService.message.send("chat_id", chatId, "interactive", successMsg)
|
||||
}
|
||||
|
||||
const createKVTemp = {
|
||||
|
@ -5,10 +5,10 @@ class LarkDriveService extends LarkBaseService {
|
||||
/**
|
||||
* 批量获取文档元数据。
|
||||
*
|
||||
* @param {string[]} docTokens - 文档令牌数组。
|
||||
* @param {string} [doc_type="doc"] - 文档类型,默认为 "doc"。
|
||||
* @param {string} [user_id_type="user_id"] - 用户ID类型,默认为 "user_id"。
|
||||
* @returns {Promise<{ code: number, data: { metas: any[], failed_list: any[] }, message: string }>} 包含元数据和失败列表的响应对象。
|
||||
* @param docTokens - 文档令牌数组。
|
||||
* @param doc_type - 文档类型,默认为 "doc"。
|
||||
* @param user_id_type - 用户ID类型,默认为 "user_id"。
|
||||
* @returns 包含元数据和失败列表的响应对象。
|
||||
*/
|
||||
async batchGetMeta(
|
||||
docTokens: string[],
|
||||
@ -57,8 +57,8 @@ class LarkDriveService extends LarkBaseService {
|
||||
/**
|
||||
* 获取文件列表。
|
||||
*
|
||||
* @param {string} folderToken - 文件夹令牌。
|
||||
* @returns {Promise<LarkServer.BaseRes>} 包含文件列表的响应对象。
|
||||
* @param folderToken - 文件夹令牌。
|
||||
* @returns 包含文件列表的响应对象。
|
||||
*/
|
||||
async listFiles(folderToken: string) {
|
||||
const path = "/drive/v1/files"
|
||||
@ -70,10 +70,10 @@ class LarkDriveService extends LarkBaseService {
|
||||
/**
|
||||
* 创建文件。
|
||||
*
|
||||
* @param {string} folderToken - 文件夹令牌。
|
||||
* @param {string} fileName - 文件名。
|
||||
* @param {"doc" | "sheet" | "bitable"} fileType - 文件类型。
|
||||
* @returns {Promise<LarkServer.BaseRes>} 包含响应数据的Promise。
|
||||
* @param folderToken - 文件夹令牌。
|
||||
* @param fileName - 文件名。
|
||||
* @param fileType - 文件类型。
|
||||
* @returns 包含响应数据的Promise。
|
||||
*/
|
||||
async createFile(
|
||||
folderToken: string,
|
||||
@ -90,17 +90,17 @@ class LarkDriveService extends LarkBaseService {
|
||||
/**
|
||||
* 复制文件。
|
||||
*
|
||||
* @param {string} folderToken - 文件夹令牌。
|
||||
* @param {string} fileToken - 文件令牌。
|
||||
* @param {string} fileName - 文件名。
|
||||
* @param {"doc" | "sheet" | "bitable"} fileType - 文件类型。
|
||||
* @returns {Promise<LarkServer.BaseRes<LarkServer.CopyFileData>} 包含响应数据的Promise。
|
||||
* @param folderToken - 文件夹令牌。
|
||||
* @param fileToken - 文件令牌。
|
||||
* @param fileName - 文件名。
|
||||
* @param fileType - 文件类型。
|
||||
* @returns 包含响应数据的Promise。
|
||||
*/
|
||||
async copyFile(
|
||||
folderToken: string,
|
||||
fileToken: string,
|
||||
fileName: string,
|
||||
fileType: "doc" | "sheet" | "bitable"
|
||||
fileType: LarkServer.FileType
|
||||
) {
|
||||
const path = `/drive/v1/files/${fileToken}/copy`
|
||||
return this.post<LarkServer.BaseRes<LarkServer.CopyFileData>>(path, {
|
||||
@ -109,6 +109,33 @@ class LarkDriveService extends LarkBaseService {
|
||||
name: fileName,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文件元数据。
|
||||
*
|
||||
* @param fileToken - 文件令牌。
|
||||
* @returns 包含文件元数据的Promise。
|
||||
*/
|
||||
async addCollaborator(
|
||||
fileToken: string,
|
||||
fileType: LarkServer.FileType,
|
||||
memberType: "userid" | "openchat",
|
||||
memberId: string,
|
||||
perm: "view" | "edit" | "full_access"
|
||||
) {
|
||||
const path = `/drive/v1/permissions/${fileToken}/members`
|
||||
return this.post<LarkServer.BaseRes>(
|
||||
path,
|
||||
{
|
||||
member_type: memberType,
|
||||
member_id: memberId,
|
||||
perm,
|
||||
},
|
||||
{
|
||||
type: fileType,
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default LarkDriveService
|
||||
|
@ -156,4 +156,15 @@ export namespace LarkServer {
|
||||
| "interactive"
|
||||
| "share_chat"
|
||||
| "share_user"
|
||||
|
||||
export type FileType =
|
||||
| "doc"
|
||||
| "sheet"
|
||||
| "bitable"
|
||||
| "file"
|
||||
| "wiki"
|
||||
| "docx"
|
||||
| "folder"
|
||||
| "mindnote"
|
||||
| "minutes"
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user