mirror of
https://codeberg.org/yeentown/barkey.git
synced 2025-07-07 12:36:57 +00:00
add foreign keys to note/user where instance is referenced
This commit is contained in:
parent
f3eca0b5cf
commit
59099a2b2a
3 changed files with 73 additions and 1 deletions
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {import('typeorm').MigrationInterface} MigrationInterface
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class
|
||||||
|
* @implements {MigrationInterface}
|
||||||
|
*/
|
||||||
|
export class AddInstanceForeignKeys1748128176881 {
|
||||||
|
name = 'AddInstanceForeignKeys1748128176881'
|
||||||
|
|
||||||
|
async up(queryRunner) {
|
||||||
|
await queryRunner.query(`ALTER TABLE "user" ADD CONSTRAINT "FK_user_host" FOREIGN KEY ("host") REFERENCES "instance"("host") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "note" ADD CONSTRAINT "FK_note_userHost" FOREIGN KEY ("userHost") REFERENCES "instance"("host") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "note" ADD CONSTRAINT "FK_note_replyUserHost" FOREIGN KEY ("replyUserHost") REFERENCES "instance"("host") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "note" ADD CONSTRAINT "FK_note_renoteUserHost" FOREIGN KEY ("renoteUserHost") REFERENCES "instance"("host") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
}
|
||||||
|
|
||||||
|
async down(queryRunner) {
|
||||||
|
await queryRunner.query(`ALTER TABLE "note" DROP CONSTRAINT "FK_note_renoteUserHost"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "note" DROP CONSTRAINT "FK_note_replyUserHost"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "note" DROP CONSTRAINT "FK_note_userHost"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user" DROP CONSTRAINT "FK_user_host"`);
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
import { Entity, Index, JoinColumn, Column, PrimaryColumn, ManyToOne } from 'typeorm';
|
import { Entity, Index, JoinColumn, Column, PrimaryColumn, ManyToOne } from 'typeorm';
|
||||||
import { noteVisibilities } from '@/types.js';
|
import { noteVisibilities } from '@/types.js';
|
||||||
|
import { MiInstance } from '@/models/Instance.js';
|
||||||
import { id } from './util/id.js';
|
import { id } from './util/id.js';
|
||||||
import { MiUser } from './User.js';
|
import { MiUser } from './User.js';
|
||||||
import { MiChannel } from './Channel.js';
|
import { MiChannel } from './Channel.js';
|
||||||
|
@ -222,6 +223,16 @@ export class MiNote {
|
||||||
})
|
})
|
||||||
public userHost: string | null;
|
public userHost: string | null;
|
||||||
|
|
||||||
|
@ManyToOne(() => MiInstance, {
|
||||||
|
onDelete: 'CASCADE',
|
||||||
|
})
|
||||||
|
@JoinColumn({
|
||||||
|
name: 'userHost',
|
||||||
|
foreignKeyConstraintName: 'FK_note_userHost',
|
||||||
|
referencedColumnName: 'host',
|
||||||
|
})
|
||||||
|
public userInstance: MiInstance | null;
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
...id(),
|
...id(),
|
||||||
nullable: true,
|
nullable: true,
|
||||||
|
@ -235,6 +246,16 @@ export class MiNote {
|
||||||
})
|
})
|
||||||
public replyUserHost: string | null;
|
public replyUserHost: string | null;
|
||||||
|
|
||||||
|
@ManyToOne(() => MiInstance, {
|
||||||
|
onDelete: 'CASCADE',
|
||||||
|
})
|
||||||
|
@JoinColumn({
|
||||||
|
name: 'replyUserHost',
|
||||||
|
foreignKeyConstraintName: 'FK_note_replyUserHost',
|
||||||
|
referencedColumnName: 'host',
|
||||||
|
})
|
||||||
|
public replyUserInstance: MiInstance | null;
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
...id(),
|
...id(),
|
||||||
nullable: true,
|
nullable: true,
|
||||||
|
@ -247,6 +268,16 @@ export class MiNote {
|
||||||
comment: '[Denormalized]',
|
comment: '[Denormalized]',
|
||||||
})
|
})
|
||||||
public renoteUserHost: string | null;
|
public renoteUserHost: string | null;
|
||||||
|
|
||||||
|
@ManyToOne(() => MiInstance, {
|
||||||
|
onDelete: 'CASCADE',
|
||||||
|
})
|
||||||
|
@JoinColumn({
|
||||||
|
name: 'renoteUserHost',
|
||||||
|
foreignKeyConstraintName: 'FK_note_renoteUserHost',
|
||||||
|
referencedColumnName: 'host',
|
||||||
|
})
|
||||||
|
public renoteUserInstance: MiInstance | null;
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
constructor(data: Partial<MiNote>) {
|
constructor(data: Partial<MiNote>) {
|
||||||
|
|
|
@ -3,8 +3,9 @@
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Entity, Column, Index, OneToOne, JoinColumn, PrimaryColumn } from 'typeorm';
|
import { Entity, Column, Index, OneToOne, JoinColumn, PrimaryColumn, ManyToOne } from 'typeorm';
|
||||||
import { type UserUnsignedFetchOption, userUnsignedFetchOptions } from '@/const.js';
|
import { type UserUnsignedFetchOption, userUnsignedFetchOptions } from '@/const.js';
|
||||||
|
import { MiInstance } from '@/models/Instance.js';
|
||||||
import { id } from './util/id.js';
|
import { id } from './util/id.js';
|
||||||
import { MiDriveFile } from './DriveFile.js';
|
import { MiDriveFile } from './DriveFile.js';
|
||||||
|
|
||||||
|
@ -292,6 +293,16 @@ export class MiUser {
|
||||||
})
|
})
|
||||||
public host: string | null;
|
public host: string | null;
|
||||||
|
|
||||||
|
@ManyToOne(() => MiInstance, {
|
||||||
|
onDelete: 'CASCADE',
|
||||||
|
})
|
||||||
|
@JoinColumn({
|
||||||
|
name: 'host',
|
||||||
|
foreignKeyConstraintName: 'FK_user_host',
|
||||||
|
referencedColumnName: 'host',
|
||||||
|
})
|
||||||
|
public instance: MiInstance | null;
|
||||||
|
|
||||||
@Column('varchar', {
|
@Column('varchar', {
|
||||||
length: 512, nullable: true,
|
length: 512, nullable: true,
|
||||||
comment: 'The inbox URL of the User. It will be null if the origin of the user is local.',
|
comment: 'The inbox URL of the User. It will be null if the origin of the user is local.',
|
||||||
|
|
Loading…
Add table
Reference in a new issue