import { readFileSync } from "fs"; import { AppDataSource, appDataSourceReady } from "./data_source.js"; import { Feed } from "./models/Feed.js"; import { Post } from "./models/Post.js"; import { User } from "./models/User.js"; interface IOld { feeds: { url: string; oldEntries: string[]; subscriber: number[]; }[]; } appDataSourceReady.then(async () => { let old = JSON.parse(readFileSync("./old.json", "utf-8")) as IOld; for (let feed of old.feeds) { let f = await AppDataSource.manager.findOne(Feed, { where: { url: feed.url } }) if (!f) { f = AppDataSource.manager.create(Feed, { url: feed.url, lastCheck: new Date(0), oldEntries: [], subscriber: [], }) await AppDataSource.manager.save(f); } for (let oldEntry of feed.oldEntries) { let existing = await AppDataSource.manager.findOne(Post, { where: { feed: f, hash: oldEntry } }) if (!existing) { let post = AppDataSource.manager.create(Post, { feed: f, hash: oldEntry }) await AppDataSource.manager.save(post); } } for (let subscriber of feed.subscriber) { let user = await AppDataSource.manager.findOne(User, { where: { chatid: subscriber }, relations: { feeds: true } }); if (!user) { user = AppDataSource.manager.create(User, { chatid: subscriber, feeds: [f], }) } else { user.feeds.push(f) } await AppDataSource.manager.save(user); } } })