fe-middleware/src/services/ImageService.ts

40 lines
1.2 KiB
TypeScript
Raw Normal View History

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";
2024-03-28 11:43:24 +00:00
class ImageService {
2024-04-17 18:04:43 +00:00
postsQueue: Image[] = [];
2024-04-17 18:04:43 +00:00
async get(): Promise<Image> {
while (this.postsQueue.length === 0) {
const validPosts = await this.getNewValidImages();
this.postsQueue = validPosts;
logger.info(`Got ${validPosts.length} images from remote`);
2024-03-28 11:43:24 +00:00
}
2024-04-17 18:04:43 +00:00
return this.postsQueue.pop() as Image;
}
2024-03-28 15:52:39 +00:00
2024-04-17 18:04:43 +00:00
private async getNewValidImages(): Promise<Image[]> {
const gelbooruResponse: GelbooruServiceResponse =
await GelbooruApiService.get();
const posts = gelbooruResponse.posts;
2024-03-28 11:43:24 +00:00
2024-04-17 18:04:43 +00:00
const botResponse = await BotApiService.getAll();
const imagesUrls = botResponse.images.map((image) => image.url);
2024-03-28 11:43:24 +00:00
2024-04-17 18:04:43 +00:00
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;
}
2024-03-28 11:43:24 +00:00
}
2024-04-17 18:04:43 +00:00
export default new ImageService();