You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.2 KiB

3 years ago
  1. import {Request, Response} from 'express';
  2. import {LESSONS} from "./db-data";
  3. import {setTimeout} from "timers";
  4. export function searchLessons(req: Request, res: Response) {
  5. console.log('Searching for lessons ...');
  6. const queryParams = req.query;
  7. const courseId = queryParams.courseId,
  8. filter = queryParams.filter || '',
  9. sortOrder = queryParams.sortOrder || 'asc',
  10. pageNumber = parseInt(queryParams.pageNumber) || 0,
  11. pageSize = parseInt(queryParams.pageSize);
  12. let lessons = Object.values(LESSONS).filter(lesson => lesson.courseId == courseId).sort((l1, l2) => l1.id - l2.id);
  13. if (filter) {
  14. lessons = lessons.filter(lesson => lesson.description.trim().toLowerCase().search(filter.toLowerCase()) >= 0);
  15. }
  16. if (sortOrder == "desc") {
  17. lessons = lessons.reverse();
  18. }
  19. const initialPos = pageNumber * pageSize;
  20. console.log(`Retrieving lessons page starting at position ${initialPos}, page size ${pageSize} for course ${courseId}`);
  21. const lessonsPage = lessons.slice(initialPos, initialPos + pageSize);
  22. res.status(200).json(lessonsPage);
  23. }