Skip to content

Commit 28faccf

Browse files
committed
Update filter function to return fulldata(papers) for papers
1 parent f1cbdb7 commit 28faccf

File tree

2 files changed

+68
-13
lines changed

2 files changed

+68
-13
lines changed

server/src/generic-controller.ts

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,10 @@ export class GenericController {
268268
fieldType.constructor.name.includes("DECIMAL")
269269
) {
270270
value = Number(value); // Convert to number
271-
} else if (fieldType.constructor.name.includes("TEXT")) {
271+
} else if (
272+
fieldType.constructor.name.includes("TEXT") ||
273+
fieldType.constructor.name.includes("ENUM")
274+
) {
272275
value = { [Op.like]: `%${filters[key]}%` }; // Ensure LIKE is used correctly
273276
} else {
274277
value = filters[key]; // Default case
@@ -346,6 +349,13 @@ export class GenericController {
346349

347350
console.log("Found records:", records.length);
348351

352+
if (modelName == "papers") {
353+
console.log("AAAAAAAA");
354+
return Promise.all(
355+
records.map((r) => this.getFullPaperById(r.getDataValue("id"))),
356+
);
357+
}
358+
349359
return records.map((r) => r.get({ plain: true }));
350360
}
351361

@@ -445,6 +455,51 @@ export class GenericController {
445455
};
446456
}
447457

458+
/** Retrieve all papers with full related data */
459+
static async getFullPaper() {
460+
console.log("Fetching all papers with full data format.");
461+
462+
// Fetch all papers with authors, parts, and nested relationships
463+
const papers = await models.Paper.findAll({
464+
include: [
465+
{ model: models.Author, as: "authors" },
466+
{
467+
model: models.Part,
468+
as: "parts",
469+
include: [
470+
{ model: models.Tid, as: "tids" },
471+
{ model: models.See, as: "sees" },
472+
{ model: models.Dd, as: "dds" },
473+
],
474+
},
475+
],
476+
});
477+
478+
// If no papers found, return an empty array
479+
if (!papers || papers.length === 0) {
480+
console.warn("No papers found.");
481+
return [];
482+
}
483+
484+
// Convert all paper models to the structured format
485+
return papers.map((paper) => {
486+
const paperData = paper.get({ plain: true });
487+
488+
return {
489+
...paperData,
490+
authors: Array.isArray(paperData.authors) ? paperData.authors : [],
491+
parts: Array.isArray(paperData.parts)
492+
? paperData.parts.map((part: any) => ({
493+
...part,
494+
tids: Array.isArray(part.tids) ? part.tids : [],
495+
sees: Array.isArray(part.sees) ? part.sees : [],
496+
dds: Array.isArray(part.dds) ? part.dds : [],
497+
}))
498+
: [],
499+
};
500+
});
501+
}
502+
448503
/** Close the database connection */
449504
async closeDB(): Promise<void> {
450505
await sequelize.close();

server/src/routes/cascade-router.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,6 @@ const router = express.Router();
99
export default function cascadeRouter(dbController: GenericController): Router {
1010
const router = Router();
1111

12-
// router.post("/bulk", async (req: Request, res: Response) => {
13-
// try {
14-
// const data = req.body;
15-
// console.log("Processing bulk creation...");
16-
// const createdInstances = await GenericController.bulkCreate(data);
17-
// res.status(201).json(createdInstances);
18-
// } catch (error) {
19-
// console.error("Error in bulk creation:", error);
20-
// res.status(500).json({ error: "Internal Server Error" });
21-
// }
22-
// });
23-
2412
/** Create a new record for any model */
2513
router.post("/:model", async (req: Request, res: Response) => {
2614
try {
@@ -98,6 +86,18 @@ export default function cascadeRouter(dbController: GenericController): Router {
9886
}
9987
});
10088

89+
router.get("/papers/full", async (req: Request, res: Response) => {
90+
try {
91+
console.log("Received request to fetch all full papers.");
92+
const papers = await GenericController.getFullPaper();
93+
94+
res.json(papers);
95+
} catch (error) {
96+
console.error("Error fetching all full papers:", error);
97+
res.status(500).json({ error: "Internal Server Error" });
98+
}
99+
});
100+
101101
router.get("/papers/full/:id", async (req: Request, res: Response) => {
102102
try {
103103
const id = parseInt(req.params.id, 10);

0 commit comments

Comments
 (0)