mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 07:24:13 +00:00 
			
		
		
		
	add latest_note table
				
					
				
			This commit is contained in:
		
							parent
							
								
									c224ed031f
								
							
						
					
					
						commit
						f8b55d357d
					
				
					 6 changed files with 67 additions and 0 deletions
				
			
		
							
								
								
									
										15
									
								
								packages/backend/1727659258948-add_latest_note.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								packages/backend/1727659258948-add_latest_note.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
export class AddLatestNote1727659258948 {
 | 
			
		||||
	name = 'AddLatestNote1727659258948';
 | 
			
		||||
 | 
			
		||||
	async up(queryRunner) {
 | 
			
		||||
		await queryRunner.query('CREATE TABLE "latest_note" ("user_id" character varying(32) NOT NULL, "note_id" character varying(32) NOT NULL, "userId" character varying(32), "noteId" character varying(32), CONSTRAINT "PK_f619b62bfaafabe68f52fb50c9a" PRIMARY KEY ("user_id"))');
 | 
			
		||||
		await queryRunner.query('ALTER TABLE "latest_note" ADD CONSTRAINT "FK_20e346fffe4a2174585005d6d80" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION');
 | 
			
		||||
		await queryRunner.query('ALTER TABLE "latest_note" ADD CONSTRAINT "FK_47a38b1c13de6ce4e5090fb1acd" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	async down(queryRunner) {
 | 
			
		||||
		await queryRunner.query('ALTER TABLE "latest_note" DROP CONSTRAINT "FK_47a38b1c13de6ce4e5090fb1acd"');
 | 
			
		||||
		await queryRunner.query('ALTER TABLE "latest_note" DROP CONSTRAINT "FK_20e346fffe4a2174585005d6d80"');
 | 
			
		||||
		await queryRunner.query('DROP TABLE "latest_note"');
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ export const DI = {
 | 
			
		|||
	announcementReadsRepository: Symbol('announcementReadsRepository'),
 | 
			
		||||
	appsRepository: Symbol('appsRepository'),
 | 
			
		||||
	avatarDecorationsRepository: Symbol('avatarDecorationsRepository'),
 | 
			
		||||
	latestNotesRepository: Symbol('latestNotesRepository'),
 | 
			
		||||
	noteFavoritesRepository: Symbol('noteFavoritesRepository'),
 | 
			
		||||
	noteThreadMutingsRepository: Symbol('noteThreadMutingsRepository'),
 | 
			
		||||
	noteReactionsRepository: Symbol('noteReactionsRepository'),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										37
									
								
								packages/backend/src/models/LatestNote.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								packages/backend/src/models/LatestNote.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
import { PrimaryColumn, Entity, JoinColumn, Column, ManyToOne } from 'typeorm';
 | 
			
		||||
import { MiUser } from '@/models/User.js';
 | 
			
		||||
import { MiNote } from '@/models/Note.js';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Maps a user to the most recent post by that user.
 | 
			
		||||
 * Public, home-only, and followers-only posts are included.
 | 
			
		||||
 * DMs are not counted.
 | 
			
		||||
 */
 | 
			
		||||
@Entity('latest_note')
 | 
			
		||||
export class LatestNote {
 | 
			
		||||
	@PrimaryColumn({
 | 
			
		||||
		name: 'user_id',
 | 
			
		||||
		type: 'varchar' as const,
 | 
			
		||||
		length: 32,
 | 
			
		||||
	})
 | 
			
		||||
	public userId: string;
 | 
			
		||||
 | 
			
		||||
	@ManyToOne(() => MiUser, {
 | 
			
		||||
		onDelete: 'CASCADE',
 | 
			
		||||
	})
 | 
			
		||||
	@JoinColumn()
 | 
			
		||||
	public user: MiUser | null;
 | 
			
		||||
 | 
			
		||||
	@Column({
 | 
			
		||||
		name: 'note_id',
 | 
			
		||||
		type: 'varchar' as const,
 | 
			
		||||
		length: 32,
 | 
			
		||||
	})
 | 
			
		||||
	public noteId: string;
 | 
			
		||||
 | 
			
		||||
	@ManyToOne(() => MiNote, {
 | 
			
		||||
		onDelete: 'CASCADE',
 | 
			
		||||
	})
 | 
			
		||||
	@JoinColumn()
 | 
			
		||||
	public note: MiNote | null;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ import type { Provider } from '@nestjs/common';
 | 
			
		|||
import { Module } from '@nestjs/common';
 | 
			
		||||
import { DI } from '@/di-symbols.js';
 | 
			
		||||
import {
 | 
			
		||||
	LatestNote,
 | 
			
		||||
	MiAbuseReportNotificationRecipient,
 | 
			
		||||
	MiAbuseUserReport,
 | 
			
		||||
	MiAccessToken,
 | 
			
		||||
| 
						 | 
				
			
			@ -118,6 +119,12 @@ const $avatarDecorationsRepository: Provider = {
 | 
			
		|||
	inject: [DI.db],
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const $latestNotesRepository: Provider = {
 | 
			
		||||
	provide: DI.latestNotesRepository,
 | 
			
		||||
	useFactory: (db: DataSource) => db.getRepository(LatestNote).extend(miRepository as MiRepository<LatestNote>),
 | 
			
		||||
	inject: [DI.db],
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const $noteFavoritesRepository: Provider = {
 | 
			
		||||
	provide: DI.noteFavoritesRepository,
 | 
			
		||||
	useFactory: (db: DataSource) => db.getRepository(MiNoteFavorite).extend(miRepository as MiRepository<MiNoteFavorite>),
 | 
			
		||||
| 
						 | 
				
			
			@ -511,6 +518,7 @@ const $reversiGamesRepository: Provider = {
 | 
			
		|||
		$announcementReadsRepository,
 | 
			
		||||
		$appsRepository,
 | 
			
		||||
		$avatarDecorationsRepository,
 | 
			
		||||
		$latestNotesRepository,
 | 
			
		||||
		$noteFavoritesRepository,
 | 
			
		||||
		$noteThreadMutingsRepository,
 | 
			
		||||
		$noteReactionsRepository,
 | 
			
		||||
| 
						 | 
				
			
			@ -583,6 +591,7 @@ const $reversiGamesRepository: Provider = {
 | 
			
		|||
		$announcementReadsRepository,
 | 
			
		||||
		$appsRepository,
 | 
			
		||||
		$avatarDecorationsRepository,
 | 
			
		||||
		$latestNotesRepository,
 | 
			
		||||
		$noteFavoritesRepository,
 | 
			
		||||
		$noteThreadMutingsRepository,
 | 
			
		||||
		$noteReactionsRepository,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@ import { RelationIdLoader } from 'typeorm/query-builder/relation-id/RelationIdLo
 | 
			
		|||
import { RawSqlResultsToEntityTransformer } from 'typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.js';
 | 
			
		||||
import { ObjectUtils } from 'typeorm/util/ObjectUtils.js';
 | 
			
		||||
import { OrmUtils } from 'typeorm/util/OrmUtils.js';
 | 
			
		||||
import { LatestNote } from '@/models/LatestNote.js';
 | 
			
		||||
import { MiAbuseUserReport } from '@/models/AbuseUserReport.js';
 | 
			
		||||
import { MiAbuseReportNotificationRecipient } from '@/models/AbuseReportNotificationRecipient.js';
 | 
			
		||||
import { MiAccessToken } from '@/models/AccessToken.js';
 | 
			
		||||
| 
						 | 
				
			
			@ -126,6 +127,7 @@ export const miRepository = {
 | 
			
		|||
} satisfies MiRepository<ObjectLiteral>;
 | 
			
		||||
 | 
			
		||||
export {
 | 
			
		||||
	LatestNote,
 | 
			
		||||
	MiAbuseUserReport,
 | 
			
		||||
	MiAbuseReportNotificationRecipient,
 | 
			
		||||
	MiAccessToken,
 | 
			
		||||
| 
						 | 
				
			
			@ -224,6 +226,7 @@ export type GalleryPostsRepository = Repository<MiGalleryPost> & MiRepository<Mi
 | 
			
		|||
export type HashtagsRepository = Repository<MiHashtag> & MiRepository<MiHashtag>;
 | 
			
		||||
export type InstancesRepository = Repository<MiInstance> & MiRepository<MiInstance>;
 | 
			
		||||
export type MetasRepository = Repository<MiMeta> & MiRepository<MiMeta>;
 | 
			
		||||
export type LatestNoteRepository = Repository<LatestNote> & MiRepository<LatestNote>;
 | 
			
		||||
export type ModerationLogsRepository = Repository<MiModerationLog> & MiRepository<MiModerationLog>;
 | 
			
		||||
export type MutingsRepository = Repository<MiMuting> & MiRepository<MiMuting>;
 | 
			
		||||
export type RenoteMutingsRepository = Repository<MiRenoteMuting> & MiRepository<MiRenoteMuting>;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,6 +83,7 @@ import { MiReversiGame } from '@/models/ReversiGame.js';
 | 
			
		|||
import { Config } from '@/config.js';
 | 
			
		||||
import MisskeyLogger from '@/logger.js';
 | 
			
		||||
import { bindThis } from '@/decorators.js';
 | 
			
		||||
import {LatestNote} from "@/models/LatestNote.js";
 | 
			
		||||
 | 
			
		||||
pg.types.setTypeParser(20, Number);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -130,6 +131,7 @@ class MyCustomLogger implements Logger {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
export const entities = [
 | 
			
		||||
	LatestNote,
 | 
			
		||||
	MiAnnouncement,
 | 
			
		||||
	MiAnnouncementRead,
 | 
			
		||||
	MiMeta,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue