UNPKG

@wepublish/api

Version:
89 lines 3.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AgendaBaselService = void 0; const tslib_1 = require("tslib"); const cache_manager_1 = require("@nestjs/cache-manager"); const common_1 = require("@nestjs/common"); const client_1 = require("@prisma/client"); const api_1 = require("../../../../image-api/src"); const kulturagenda_parser_1 = require("./kulturagenda-parser"); let AgendaBaselService = exports.AgendaBaselService = class AgendaBaselService { constructor(cacheManager, prisma, mediaAdapter, imageFetcher) { this.cacheManager = cacheManager; this.prisma = prisma; this.mediaAdapter = mediaAdapter; this.imageFetcher = imageFetcher; this.name = 'AgendaBasel'; this.url = 'https://www.agendabasel.ch/xmlexport/kzexport-basel.xml'; } getEvents() { return tslib_1.__awaiter(this, void 0, void 0, function* () { const cachedEvents = yield this.cacheManager.get('agenda-basel-events'); if (cachedEvents) { return cachedEvents; } const events = yield (0, kulturagenda_parser_1.fetchAndParseKulturagenda)(this.url, this.name); const ttl = 8 * 60 * 60 * 1000; // 8 hours yield this.cacheManager.set('agenda-basel-events', events, ttl); return events; }); } importedEvents() { return tslib_1.__awaiter(this, void 0, void 0, function* () { const parsedEvents = yield this.getEvents(); return parsedEvents; }); } importedEvent({ id }) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const parsedEvents = yield this.getEvents(); const event = parsedEvents.find(e => e.id === id); if (!event) { throw Error(`Event with id ${id} not found.`); } return event; }); } createEvent({ id }) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const parsedEvents = yield this.getEvents(); let createdImageId = null; const event = parsedEvents === null || parsedEvents === void 0 ? void 0 : parsedEvents.find(e => e.id === id); if (!event) { throw Error(`Event with id ${id} not found.`); } if (event.imageUrl) { const file = this.imageFetcher.fetch(event.imageUrl); const _a = yield this.mediaAdapter.uploadImageFromArrayBuffer(file), { id } = _a, image = tslib_1.__rest(_a, ["id"]); const createdImage = yield this.prisma.image.create({ data: Object.assign(Object.assign({ id }, image), { filename: image.filename }), include: { focalPoint: true } }); createdImageId = createdImage.id; } const createdEvent = yield this.prisma.event.create({ data: { name: event.name, description: event.description, location: event.location, startsAt: event.startsAt, imageId: createdImageId || null, endsAt: event.endsAt, externalSourceName: event.externalSourceName, externalSourceId: event.externalSourceId } }); return createdEvent.id; }); } }; exports.AgendaBaselService = AgendaBaselService = tslib_1.__decorate([ (0, common_1.Injectable)(), tslib_1.__param(0, (0, common_1.Inject)(cache_manager_1.CACHE_MANAGER)), tslib_1.__metadata("design:paramtypes", [Object, client_1.PrismaClient, api_1.MediaAdapterService, api_1.ImageFetcherService]) ], AgendaBaselService); //# sourceMappingURL=agenda-basel.service.js.map