mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-03 23:14:13 +00:00 
			
		
		
		
	enhance: 各ノートが被クリップ数を保持するようにし、無意味にnotes/clipsを叩かないように
This commit is contained in:
		
							parent
							
								
									907d519da3
								
							
						
					
					
						commit
						f7c6932a83
					
				
					 9 changed files with 48 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -1,3 +1,8 @@
 | 
			
		|||
/*
 | 
			
		||||
 * SPDX-FileCopyrightText: syuilo and other misskey contributors
 | 
			
		||||
 * SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
export class ServerIconsAndManifest1694850832075 {
 | 
			
		||||
    name = 'ServerIconsAndManifest1694850832075'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								packages/backend/migration/1694915420864-clipped-count.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								packages/backend/migration/1694915420864-clipped-count.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
/*
 | 
			
		||||
 * SPDX-FileCopyrightText: syuilo and other misskey contributors
 | 
			
		||||
 * SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
export class ClippedCount1694915420864 {
 | 
			
		||||
    name = 'ClippedCount1694915420864'
 | 
			
		||||
 | 
			
		||||
    async up(queryRunner) {
 | 
			
		||||
        await queryRunner.query(`ALTER TABLE "note" ADD "clippedCount" smallint NOT NULL DEFAULT '0'`);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async down(queryRunner) {
 | 
			
		||||
        await queryRunner.query(`ALTER TABLE "note" DROP COLUMN "clippedCount"`);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -340,6 +340,8 @@ export class NoteEntityService implements OnModuleInit {
 | 
			
		|||
			url: note.url ?? undefined,
 | 
			
		||||
 | 
			
		||||
			...(opts.detail ? {
 | 
			
		||||
				clippedCount: note.clippedCount,
 | 
			
		||||
 | 
			
		||||
				reply: note.replyId ? this.pack(note.reply ?? note.replyId, me, {
 | 
			
		||||
					detail: false,
 | 
			
		||||
					_hint_: options?._hint_,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -107,6 +107,11 @@ export class MiNote {
 | 
			
		|||
	})
 | 
			
		||||
	public repliesCount: number;
 | 
			
		||||
 | 
			
		||||
	@Column('smallint', {
 | 
			
		||||
		default: 0,
 | 
			
		||||
	})
 | 
			
		||||
	public clippedCount: number;
 | 
			
		||||
 | 
			
		||||
	@Column('jsonb', {
 | 
			
		||||
		default: {},
 | 
			
		||||
	})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ import ms from 'ms';
 | 
			
		|||
import { Endpoint } from '@/server/api/endpoint-base.js';
 | 
			
		||||
import { IdService } from '@/core/IdService.js';
 | 
			
		||||
import { DI } from '@/di-symbols.js';
 | 
			
		||||
import type { ClipNotesRepository, ClipsRepository } from '@/models/_.js';
 | 
			
		||||
import type { ClipNotesRepository, ClipsRepository, NotesRepository } from '@/models/_.js';
 | 
			
		||||
import { GetterService } from '@/server/api/GetterService.js';
 | 
			
		||||
import { RoleService } from '@/core/RoleService.js';
 | 
			
		||||
import { ApiError } from '../../error.js';
 | 
			
		||||
| 
						 | 
				
			
			@ -72,6 +72,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 | 
			
		|||
		@Inject(DI.clipNotesRepository)
 | 
			
		||||
		private clipNotesRepository: ClipNotesRepository,
 | 
			
		||||
 | 
			
		||||
		@Inject(DI.notesRepository)
 | 
			
		||||
		private notesRepository: NotesRepository,
 | 
			
		||||
 | 
			
		||||
		private idService: IdService,
 | 
			
		||||
		private roleService: RoleService,
 | 
			
		||||
		private getterService: GetterService,
 | 
			
		||||
| 
						 | 
				
			
			@ -115,9 +118,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 | 
			
		|||
				clipId: clip.id,
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
			await this.clipsRepository.update(clip.id, {
 | 
			
		||||
			this.clipsRepository.update(clip.id, {
 | 
			
		||||
				lastClippedAt: new Date(),
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
			this.notesRepository.increment({ id: note.id }, 'clippedCount', 1);
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,6 +52,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 | 
			
		|||
		@Inject(DI.clipNotesRepository)
 | 
			
		||||
		private clipNotesRepository: ClipNotesRepository,
 | 
			
		||||
 | 
			
		||||
		@Inject(DI.notesRepository)
 | 
			
		||||
		private notesRepository: NotesRepository,
 | 
			
		||||
 | 
			
		||||
		private getterService: GetterService,
 | 
			
		||||
	) {
 | 
			
		||||
		super(meta, paramDef, async (ps, me) => {
 | 
			
		||||
| 
						 | 
				
			
			@ -73,6 +76,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 | 
			
		|||
				noteId: note.id,
 | 
			
		||||
				clipId: clip.id,
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
			this.notesRepository.decrement({ id: note.id }, 'clippedCount', 1);
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -94,13 +94,14 @@ function fetchNote() {
 | 
			
		|||
		noteId: props.noteId,
 | 
			
		||||
	}).then(res => {
 | 
			
		||||
		note = res;
 | 
			
		||||
		Promise.all([
 | 
			
		||||
		// 古いノートは被クリップ数をカウントしていないので、2023-10-01以前のものは強制的にnotes/clipsを叩く
 | 
			
		||||
		if (note.clippedCount > 0 || new Date(note.createdAt).getTime() < new Date('2023-10-01').getTime()) {
 | 
			
		||||
			os.api('notes/clips', {
 | 
			
		||||
				noteId: note.id,
 | 
			
		||||
			}),
 | 
			
		||||
		]).then(([_clips]) => {
 | 
			
		||||
			clips = _clips;
 | 
			
		||||
		});
 | 
			
		||||
			}).then((_clips) => {
 | 
			
		||||
				clips = _clips;
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
	}).catch(err => {
 | 
			
		||||
		error = err;
 | 
			
		||||
	});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2539,6 +2539,7 @@ type Note = {
 | 
			
		|||
    reactions: Record<string, number>;
 | 
			
		||||
    renoteCount: number;
 | 
			
		||||
    repliesCount: number;
 | 
			
		||||
    clippedCount?: number;
 | 
			
		||||
    poll?: {
 | 
			
		||||
        expiresAt: DateString | null;
 | 
			
		||||
        multiple: boolean;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -175,6 +175,7 @@ export type Note = {
 | 
			
		|||
	reactions: Record<string, number>;
 | 
			
		||||
	renoteCount: number;
 | 
			
		||||
	repliesCount: number;
 | 
			
		||||
	clippedCount?: number;
 | 
			
		||||
	poll?: {
 | 
			
		||||
		expiresAt: DateString | null;
 | 
			
		||||
		multiple: boolean;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue