Skip to content

Commit 92e302c

Browse files
committed
feat(event): cria parser de sitemap pra páginas públicas de eventos
1 parent 58c4ac5 commit 92e302c

File tree

4 files changed

+53
-0
lines changed

4 files changed

+53
-0
lines changed
+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export * from './lib/event-providers';
22
export * from './lib/application';
33
export * from './lib/schemas';
4+
export * from './lib/utils';
45
export * from './lib/dtos';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { EventDto } from '../dtos';
2+
3+
const createSitemapUrl = (loc: string, lastmod: string | null) => `<url>
4+
<loc>${loc}</loc>
5+
${lastmod ? `<lastmod>${lastmod}</lastmod>` : ''}
6+
</url>`;
7+
8+
export function createSitemapFromEvents(events: EventDto[]) {
9+
const header = `<?xml version="1.0" encoding="UTF-8"?>
10+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">`;
11+
12+
const urls = events
13+
.map((event) => {
14+
const loc = `https://devparana.mx/#/evento/${event.id}`;
15+
const lastmod = event.date ? new Date(event.date).toISOString() : null;
16+
17+
return createSitemapUrl(loc, lastmod);
18+
})
19+
.join('');
20+
21+
const footer = `</urlset>`;
22+
23+
return `${header}${urls}${footer}`;
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './create-sitemap-from-events';

packages/event/resource/src/lib/controllers/events.ts

+27
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import {
1818
Query,
1919
Delete,
2020
Controller,
21+
Res,
22+
BadRequestException,
2123
} from '@nestjs/common';
2224
import {
2325
EventDto,
@@ -27,9 +29,12 @@ import {
2729
UpdateEventDto,
2830
RSVPsFacade,
2931
CreateRSVPDto,
32+
createSitemapFromEvents,
3033
} from '@devmx/event-data-source';
3134
import 'multer';
3235
import { subDays } from 'date-fns/subDays';
36+
import { Response } from 'express';
37+
3338

3439
@ApiTags('Eventos')
3540
@Controller('events')
@@ -49,6 +54,28 @@ export class EventsController {
4954
}
5055
}
5156

57+
@Get('sitemap.xml')
58+
@Allowed()
59+
@ApiPage(EventDto)
60+
async sitemap(@Res() res: Response) {
61+
let date = new Date();
62+
date = subDays(date, 1);
63+
64+
try {
65+
const events = await this.eventsFacade.findFrom(date, {
66+
page: 0,
67+
size: 100,
68+
});
69+
70+
const sitemap = createSitemapFromEvents(events.data);
71+
72+
res.setHeader('Content-Type', 'application/xml');
73+
res.send(sitemap);
74+
} catch (err) {
75+
throw new BadRequestException();
76+
}
77+
}
78+
5279
@Get()
5380
@Allowed()
5481
@ApiPage(EventDto)

0 commit comments

Comments
 (0)