@wepublish/api
Version:
API core for we.publish.
89 lines • 3.93 kB
JavaScript
;
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