diff --git a/engage-api/struct-activity.mjs b/engage-api/struct-activity.mjs index 4583289..a4fe4ff 100644 --- a/engage-api/struct-activity.mjs +++ b/engage-api/struct-activity.mjs @@ -1,4 +1,5 @@ // struct-activity.mjs +import pangu from 'pangu'; import { logger } from '../utils/logger.mjs'; let clubSchema = { @@ -51,7 +52,15 @@ async function applyFields(field, structuredActivityData) { structuredActivityData.category = field.fData; break; case field.fID == "activityname": - structuredActivityData.name = field.fData; + structuredActivityData.name = field.fData.replaceAll(" "," "); + structuredActivityData.name = structuredActivityData.name.replaceAll(")", ")"); + structuredActivityData.name = structuredActivityData.name.replaceAll("(", "("); + structuredActivityData.name = structuredActivityData.name.replaceAll("’", "'"); + structuredActivityData.name = structuredActivityData.name.replaceAll(".", ""); + structuredActivityData.name = structuredActivityData.name.replaceAll("IssuesT台上的社会问题", "Issues T 台上的社会问题"); + structuredActivityData.name = + structuredActivityData.name.replaceAll("校管弦乐团(新老成员都适用", "校管弦乐团(新老成员都适用)").replaceAll("))",")"); + structuredActivityData.name = pangu.spacing(structuredActivityData.name); break; case field.fID == "day": structuredActivityData.meeting.day = field.fData; @@ -91,8 +100,12 @@ async function applyFields(field, structuredActivityData) { } async function postProcess(structuredActivityData) { + // Format description structuredActivityData.description = structuredActivityData.description.replaceAll("
","\n"); structuredActivityData.description = structuredActivityData.description.replaceAll("\u000B","\v"); + structuredActivityData.description = pangu.spacing(structuredActivityData.description); + structuredActivityData.description = structuredActivityData.description.replaceAll("\n ","\n"); + // Finishing fields if (structuredActivityData.name.search("Student-led") != -1 || structuredActivityData.name.search("学生社团") != -1 || structuredActivityData.name.search("(SL)") != -1) { @@ -107,8 +120,8 @@ async function postProcess(structuredActivityData) { if (!grades || grades.length < 3) { throw new Error('Invalid grade format in schedule'); } - structuredActivityData.grades.min = grades[1]; - structuredActivityData.grades.max = grades[2]; + structuredActivityData.grades.min = parseInt(grades[1]).toString(10); + structuredActivityData.grades.max = parseInt(grades[2]).toString(10); } catch (error) { logger.error(`Failed to parse grades: ${error.message}`); structuredActivityData.grades.min = null; diff --git a/package.json b/package.json index 643bd99..633d557 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "ioredis": "^5.6.1", "node-fetch": "^3.3.2", "p-limit": "^6.2.0", + "pangu": "^4.0.7", "uuid": "^11.1.0" }, "packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6708b8c..206c98f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ importers: p-limit: specifier: ^6.2.0 version: 6.2.0 + pangu: + specifier: ^4.0.7 + version: 4.0.7 uuid: specifier: ^11.1.0 version: 11.1.0 @@ -683,6 +686,10 @@ packages: resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} engines: {node: '>=18'} + pangu@4.0.7: + resolution: {integrity: sha512-weZKJIwwy5gjt4STGVUH9bix3BGk7wZ2ahtIypwe3e/mllsrIZIvtfLx1dPX56GcpZFOCFKmeqI1qVuB9enRzA==} + hasBin: true + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -1886,6 +1893,8 @@ snapshots: dependencies: yocto-queue: 1.2.1 + pangu@4.0.7: {} + parseurl@1.3.3: {} path-to-regexp@8.2.0: {}