From 6e74e0974d324155007bfa851c05a40957802763 Mon Sep 17 00:00:00 2001 From: meetqy Date: Tue, 28 Feb 2023 15:00:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20tagsGroups?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/transform-eagle/lib/index.ts | 4 +- .../lib/{ => metadata}/folder.ts | 29 ++-------- .../transform-eagle/lib/metadata/index.ts | 24 ++++++++ .../lib/metadata/tags-groups.ts | 57 +++++++++++++++++++ packages/transform-eagle/types.d.ts | 2 +- 5 files changed, 89 insertions(+), 27 deletions(-) rename packages/transform-eagle/lib/{ => metadata}/folder.ts (62%) create mode 100644 packages/transform-eagle/lib/metadata/index.ts create mode 100644 packages/transform-eagle/lib/metadata/tags-groups.ts diff --git a/packages/transform-eagle/lib/index.ts b/packages/transform-eagle/lib/index.ts index db7bc14f..8824fff5 100644 --- a/packages/transform-eagle/lib/index.ts +++ b/packages/transform-eagle/lib/index.ts @@ -1,6 +1,6 @@ import * as dotenv from "dotenv"; import watchImage from "./image"; -import watchFloder from "./folder"; +import watchMetadata from "./metadata"; import { logger } from "@eagleuse/utils"; import { getNSFW } from "./image/nsfw"; @@ -16,6 +16,6 @@ export const transformEagle = async () => { logger.info("Complete init nsfw."); } - watchFloder(LIBRARY); + watchMetadata(LIBRARY); watchImage(LIBRARY); }; diff --git a/packages/transform-eagle/lib/folder.ts b/packages/transform-eagle/lib/metadata/folder.ts similarity index 62% rename from packages/transform-eagle/lib/folder.ts rename to packages/transform-eagle/lib/metadata/folder.ts index 22590a4b..e79372b1 100644 --- a/packages/transform-eagle/lib/folder.ts +++ b/packages/transform-eagle/lib/metadata/folder.ts @@ -1,14 +1,9 @@ -import { join } from "path"; -import * as chokidar from "chokidar"; -import { getPrisma } from "./prisma"; -import { readJsonSync } from "fs-extra"; +import { getPrisma } from "../prisma"; import { Folder } from "@prisma/client"; import { logger } from "@eagleuse/utils"; -import * as _ from "lodash"; -import { trigger } from "./trigger"; +import { trigger } from "../trigger"; const prisma = getPrisma(); -const _wait = 3000; // 多级嵌套转为一级 const demotionFolder = (folders: EagleUse.Folder[]): Folder[] => { @@ -29,9 +24,8 @@ const demotionFolder = (folders: EagleUse.Folder[]): Folder[] => { return newFolders; }; -const handleFloder = async (file: string) => { - const json = readJsonSync(file); - const folders = demotionFolder(json["folders"]); +export const handleFloder = async (metadataFolders: EagleUse.Folder[]) => { + const folders = demotionFolder(metadataFolders); folders.forEach((folder) => { prisma.folder @@ -67,23 +61,10 @@ const deleteUnnecessary = (localFolder: Folder[]) => { }, }, }) - .then((res) => { - logger.debug(res, "Delete unnecessary folder: "); - }) .catch((e) => { - logger.error(e, "Delete unnecessary folder"); + logger.error(e, "Delete folder error: "); }); } }); trigger(); }; - -const _debounce = _.debounce(handleFloder, _wait); - -const watchFloder = (LIBRARY: string) => { - const file = join(LIBRARY, "./metadata.json"); - - chokidar.watch(file).on("add", _debounce).on("change", _debounce); -}; - -export default watchFloder; diff --git a/packages/transform-eagle/lib/metadata/index.ts b/packages/transform-eagle/lib/metadata/index.ts new file mode 100644 index 00000000..b00b0777 --- /dev/null +++ b/packages/transform-eagle/lib/metadata/index.ts @@ -0,0 +1,24 @@ +import { join } from "path"; +import * as chokidar from "chokidar"; +import _ from "lodash"; +import { readJsonSync } from "fs-extra"; +import { handleFloder } from "./folder"; +import { handleTagsGroups } from "./tags-groups"; + +const _wait = 5000; + +const handleMetadata = (file: string) => { + const json = readJsonSync(file); + handleFloder(json["folders"]); + handleTagsGroups(json["tagsGroups"]); +}; + +const _debounce = _.debounce(handleMetadata, _wait); + +const watchMetaData = (LIBRARY: string) => { + const file = join(LIBRARY, "./metadata.json"); + + chokidar.watch(file).on("add", _debounce).on("change", _debounce); +}; + +export default watchMetaData; diff --git a/packages/transform-eagle/lib/metadata/tags-groups.ts b/packages/transform-eagle/lib/metadata/tags-groups.ts new file mode 100644 index 00000000..91f1a8e3 --- /dev/null +++ b/packages/transform-eagle/lib/metadata/tags-groups.ts @@ -0,0 +1,57 @@ +import { logger } from "@eagleuse/utils"; +import { getPrisma } from "../prisma"; +import { trigger } from "../trigger"; + +const prisma = getPrisma(); + +export const handleTagsGroups = (localTagsGroups: EagleUse.TagsGroupsItem[]) => { + localTagsGroups.forEach((item) => { + const tags = (item.tags as string[]) || []; + + const data = { + ...item, + tags: { + connect: tags.map((tag) => ({ id: tag })), + }, + }; + + prisma.tagsGroups + .upsert({ + where: { id: item.id }, + create: data, + update: data, + }) + .catch((e) => logger.info(e, "TagsGroups error: ")); + + trigger(); + }); + + deleteUnnecessary(localTagsGroups); +}; + +const deleteUnnecessary = (localTagsGroup: EagleUse.TagsGroupsItem[]) => { + prisma.tagsGroups + .findMany({ + where: { + id: { + notIn: localTagsGroup.map((item) => item.id), + }, + }, + }) + .then((folders) => { + if (folders && folders.length > 0) { + prisma.tagsGroups + .deleteMany({ + where: { + id: { + in: folders.map((item) => item.id), + }, + }, + }) + .catch((e) => { + logger.error(e, "TagsGroups Delete error: "); + }); + } + }); + trigger(); +}; diff --git a/packages/transform-eagle/types.d.ts b/packages/transform-eagle/types.d.ts index 78689803..cf08aa82 100644 --- a/packages/transform-eagle/types.d.ts +++ b/packages/transform-eagle/types.d.ts @@ -69,7 +69,7 @@ declare namespace EagleUse { id: string; name: string; color?: string; - tags: Tag[]; + tags: (Tag | string)[]; } export interface SearchParams {