feat(sheet): 支持在创建表格后添加协作者
All checks were successful
Egg Server MIflow / build-image (push) Successful in 41s

This commit is contained in:
zhaoyingbo 2024-09-24 03:26:03 +00:00
parent 398419067b
commit 9447ef2b6b
4 changed files with 104 additions and 28 deletions

View File

@ -12,7 +12,10 @@
"Gruntfuggly",
"metas",
"mina",
"mindnote",
"openchat",
"tseslint",
"userid",
"wlpbbgiky",
"Yoav"
]

View File

@ -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 = {

View File

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

View File

@ -156,4 +156,15 @@ export namespace LarkServer {
| "interactive"
| "share_chat"
| "share_user"
export type FileType =
| "doc"
| "sheet"
| "bitable"
| "file"
| "wiki"
| "docx"
| "folder"
| "mindnote"
| "minutes"
}