import GelbooruServiceResponse from "src/types/GelbooruServiceResponse"; import Image from "src/types/Image"; import BotApiService from "src/services/BotApiService"; import GelbooruApiService from "src/services/GelbooruApiService"; import logger from "src/logger"; class ImageService { postsQueue: Image[] = []; async get(): Promise { while (this.postsQueue.length === 0) { const validPosts = await this.getNewValidImages(); this.postsQueue = validPosts; logger.info(`Got ${validPosts.length} images from remote`); } return this.postsQueue.pop() as Image; } private async getNewValidImages(): Promise { const gelbooruResponse: GelbooruServiceResponse = await GelbooruApiService.get(); const posts = gelbooruResponse.posts; const botResponse = await BotApiService.getAll(); const imagesUrls = botResponse.images.map((image) => image.url); const validPosts = Promise.all( posts .filter((post) => !imagesUrls.some((url) => url === post.url)) .map((post): Image => { return { url: post.url, tags: post.tags }; }) ); return validPosts; } } export default new ImageService();