diff --git a/src/models/repositories/user.ts b/src/models/repositories/user.ts index 33eb53612..330220fb7 100644 --- a/src/models/repositories/user.ts +++ b/src/models/repositories/user.ts @@ -72,7 +72,10 @@ export class UserRepository extends Repository { const meId = me ? typeof me === 'string' ? me : me.id : null; const relation = meId && (meId !== user.id) && opts.detail ? await this.getRelation(meId, user.id) : null; - const pins = opts.detail ? await UserNotePinings.find({ userId: user.id }) : []; + const pins = opts.detail ? await UserNotePinings.find({ + where: { userId: user.id }, + order: { id: 'DESC' } + }) : []; const profile = opts.detail ? await UserProfiles.findOne(user.id).then(ensure) : null; const falsy = opts.detail ? false : undefined; diff --git a/src/remote/activitypub/models/person.ts b/src/remote/activitypub/models/person.ts index a40677dfc..654d36403 100644 --- a/src/remote/activitypub/models/person.ts +++ b/src/remote/activitypub/models/person.ts @@ -474,9 +474,15 @@ export async function updateFeatured(userId: User['id']) { .slice(0, 5) .map(item => limit(() => resolveNote(item, resolver)))); + // delete + await UserNotePinings.delete({ userId: user.id }); + + // とりあえずidを別の時間で生成して順番を維持 + let td = 0; for (const note of featuredNotes.filter(note => note != null)) { + td -= 1000; UserNotePinings.save({ - id: genId(), + id: genId(new Date(Date.now() + td)), createdAt: new Date(), userId: user.id, noteId: note!.id diff --git a/src/server/activitypub/featured.ts b/src/server/activitypub/featured.ts index 86ec1000c..dae72f16b 100644 --- a/src/server/activitypub/featured.ts +++ b/src/server/activitypub/featured.ts @@ -21,7 +21,10 @@ export default async (ctx: Router.IRouterContext) => { return; } - const pinings = await UserNotePinings.find({ userId: user.id }); + const pinings = await UserNotePinings.find({ + where: { userId: user.id }, + order: { id: 'DESC' } + }); const pinnedNotes = await Promise.all(pinings.map(pining => Notes.findOne(pining.noteId).then(ensure)));