remove unused files
This commit is contained in:
parent
c8f6bc0dab
commit
786f1d8be8
|
@ -1,53 +0,0 @@
|
||||||
import rndstr from 'rndstr';
|
|
||||||
import type { Note } from '@/models/entities/Note.js';
|
|
||||||
import type { User } from '@/models/entities/User.js';
|
|
||||||
|
|
||||||
// TODO: リアクション、Renote、返信などをしたノートは除外する
|
|
||||||
|
|
||||||
export async function injectFeatured(timeline: Note[], user?: User | null) {
|
|
||||||
if (timeline.length < 5) return;
|
|
||||||
|
|
||||||
if (user) {
|
|
||||||
const profile = await UserProfiles.findOneByOrFail({ userId: user.id });
|
|
||||||
if (!profile.injectFeaturedNote) return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const max = 30;
|
|
||||||
const day = 1000 * 60 * 60 * 24 * 3; // 3日前まで
|
|
||||||
|
|
||||||
const query = Notes.createQueryBuilder('note')
|
|
||||||
.addSelect('note.score')
|
|
||||||
.where('note.userHost IS NULL')
|
|
||||||
.andWhere('note.score > 0')
|
|
||||||
.andWhere('note.createdAt > :date', { date: new Date(Date.now() - day) })
|
|
||||||
.andWhere('note.visibility = \'public\'')
|
|
||||||
.innerJoinAndSelect('note.user', 'user');
|
|
||||||
|
|
||||||
if (user) {
|
|
||||||
query.andWhere('note.userId != :userId', { userId: user.id });
|
|
||||||
|
|
||||||
generateMutedUserQuery(query, user);
|
|
||||||
generateBlockedUserQuery(query, user);
|
|
||||||
|
|
||||||
const reactionQuery = NoteReactions.createQueryBuilder('reaction')
|
|
||||||
.select('reaction.noteId')
|
|
||||||
.where('reaction.userId = :userId', { userId: user.id });
|
|
||||||
|
|
||||||
query.andWhere(`note.id NOT IN (${ reactionQuery.getQuery() })`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const notes = await query
|
|
||||||
.orderBy('note.score', 'DESC')
|
|
||||||
.take(max)
|
|
||||||
.getMany();
|
|
||||||
|
|
||||||
if (notes.length === 0) return;
|
|
||||||
|
|
||||||
// Pick random one
|
|
||||||
const featured = notes[Math.floor(Math.random() * notes.length)];
|
|
||||||
|
|
||||||
(featured as any)._featuredId_ = rndstr('a-z0-9', 8);
|
|
||||||
|
|
||||||
// Inject featured
|
|
||||||
timeline.splice(3, 0, featured);
|
|
||||||
}
|
|
|
@ -1,33 +0,0 @@
|
||||||
import rndstr from 'rndstr';
|
|
||||||
import type { Note } from '@/models/entities/Note.js';
|
|
||||||
import type { User } from '@/models/entities/User.js';
|
|
||||||
|
|
||||||
export async function injectPromo(timeline: Note[], user?: User | null) {
|
|
||||||
if (timeline.length < 5) return;
|
|
||||||
|
|
||||||
// TODO: readやexpireフィルタはクエリ側でやる
|
|
||||||
|
|
||||||
const reads = user ? await PromoReads.findBy({
|
|
||||||
userId: user.id,
|
|
||||||
}) : [];
|
|
||||||
|
|
||||||
let promos = await PromoNotes.find();
|
|
||||||
|
|
||||||
promos = promos.filter(n => n.expiresAt.getTime() > Date.now());
|
|
||||||
promos = promos.filter(n => !reads.map(r => r.noteId).includes(n.noteId));
|
|
||||||
|
|
||||||
if (promos.length === 0) return;
|
|
||||||
|
|
||||||
// Pick random promo
|
|
||||||
const promo = promos[Math.floor(Math.random() * promos.length)];
|
|
||||||
|
|
||||||
const note = await Notes.findOneByOrFail({ id: promo.noteId });
|
|
||||||
|
|
||||||
// Join
|
|
||||||
note.user = await Users.findOneByOrFail({ id: note.userId });
|
|
||||||
|
|
||||||
(note as any)._prId_ = rndstr('a-z0-9', 8);
|
|
||||||
|
|
||||||
// Inject promo
|
|
||||||
timeline.splice(3, 0, note);
|
|
||||||
}
|
|
Loading…
Reference in New Issue