upd: add backend for post editing

This commit is contained in:
Mar0xy 2023-09-22 21:05:42 +02:00
parent deb8f73127
commit feec3c302b
No known key found for this signature in database
GPG key ID: 56569BBE47D2C828
16 changed files with 1310 additions and 2 deletions

View file

@ -239,6 +239,12 @@ export class MiNote {
comment: '[Denormalized]',
})
public renoteUserHost: string | null;
@Index()
@Column('timestamp with time zone', {
comment: 'The update time of the Note.',
})
public updatedAt: Date | null;
//#endregion
constructor(data: Partial<MiNote>) {

View file

@ -0,0 +1,46 @@
import { Entity, JoinColumn, Column, ManyToOne, PrimaryColumn, Index } from "typeorm";
import { id } from './util/id.js';
import { MiNote } from './Note.js';
import type { MiDriveFile } from './DriveFile.js';
@Entity()
export class NoteEdit {
@PrimaryColumn(id())
public id: string;
@Index()
@Column({
...id(),
comment: "The ID of note.",
})
public noteId: MiNote["id"];
@ManyToOne((type) => MiNote, {
onDelete: "CASCADE",
})
@JoinColumn()
public note: MiNote | null;
@Column("text", {
nullable: true,
})
public text: string | null;
@Column("varchar", {
length: 512,
nullable: true,
})
public cw: string | null;
@Column({
...id(),
array: true,
default: "{}",
})
public fileIds: MiDriveFile["id"][];
@Column("timestamp with time zone", {
comment: "The updated date of the Note.",
})
public updatedAt: Date;
}

View file

@ -5,7 +5,7 @@
import { Module } from '@nestjs/common';
import { DI } from '@/di-symbols.js';
import { MiAbuseUserReport, MiAccessToken, MiAd, MiAnnouncement, MiAnnouncementRead, MiAntenna, MiApp, MiAuthSession, MiBlocking, MiChannel, MiChannelFavorite, MiChannelFollowing, MiClip, MiClipFavorite, MiClipNote, MiDriveFile, MiDriveFolder, MiEmoji, MiFlash, MiFlashLike, MiFollowRequest, MiFollowing, MiGalleryLike, MiGalleryPost, MiHashtag, MiInstance, MiMeta, MiModerationLog, MiMutedNote, MiMuting, MiNote, MiNoteFavorite, MiNoteReaction, MiNoteThreadMuting, MiNoteUnread, MiPage, MiPageLike, MiPasswordResetRequest, MiPoll, MiPollVote, MiPromoNote, MiPromoRead, MiRegistrationTicket, MiRegistryItem, MiRelay, MiRenoteMuting, MiRetentionAggregation, MiRole, MiRoleAssignment, MiSignin, MiSwSubscription, MiUsedUsername, MiUser, MiUserIp, MiUserKeypair, MiUserList, MiUserListFavorite, MiUserListJoining, MiUserMemo, MiUserNotePining, MiUserPending, MiUserProfile, MiUserPublickey, MiUserSecurityKey, MiWebhook } from './_.js';
import { MiAbuseUserReport, MiAccessToken, MiAd, MiAnnouncement, MiAnnouncementRead, MiAntenna, MiApp, MiAuthSession, MiBlocking, MiChannel, MiChannelFavorite, MiChannelFollowing, MiClip, MiClipFavorite, MiClipNote, MiDriveFile, MiDriveFolder, MiEmoji, MiFlash, MiFlashLike, MiFollowRequest, MiFollowing, MiGalleryLike, MiGalleryPost, MiHashtag, MiInstance, MiMeta, MiModerationLog, MiMutedNote, MiMuting, MiNote, MiNoteFavorite, MiNoteReaction, MiNoteThreadMuting, MiNoteUnread, MiPage, MiPageLike, MiPasswordResetRequest, MiPoll, MiPollVote, MiPromoNote, MiPromoRead, MiRegistrationTicket, MiRegistryItem, MiRelay, MiRenoteMuting, MiRetentionAggregation, MiRole, MiRoleAssignment, MiSignin, MiSwSubscription, MiUsedUsername, MiUser, MiUserIp, MiUserKeypair, MiUserList, MiUserListFavorite, MiUserListJoining, MiUserMemo, MiUserNotePining, MiUserPending, MiUserProfile, MiUserPublickey, MiUserSecurityKey, MiWebhook, NoteEdit } from './_.js';
import type { DataSource } from 'typeorm';
import type { Provider } from '@nestjs/common';
@ -399,6 +399,12 @@ const $userMemosRepository: Provider = {
inject: [DI.db],
};
const $noteEditRepository: Provider = {
provide: DI.noteEditRepository,
useFactory: (db: DataSource) => db.getRepository(NoteEdit),
inject: [DI.db],
};
@Module({
imports: [
],
@ -468,6 +474,7 @@ const $userMemosRepository: Provider = {
$flashsRepository,
$flashLikesRepository,
$userMemosRepository,
$noteEditRepository,
],
exports: [
$usersRepository,
@ -535,6 +542,7 @@ const $userMemosRepository: Provider = {
$flashsRepository,
$flashLikesRepository,
$userMemosRepository,
$noteEditRepository,
],
})
export class RepositoryModule {}

View file

@ -68,6 +68,7 @@ import { MiRoleAssignment } from '@/models/RoleAssignment.js';
import { MiFlash } from '@/models/Flash.js';
import { MiFlashLike } from '@/models/FlashLike.js';
import { MiUserListFavorite } from '@/models/UserListFavorite.js';
import { NoteEdit } from '@/models/NoteEdit.js';
import type { Repository } from 'typeorm';
export {
@ -136,6 +137,7 @@ export {
MiFlash,
MiFlashLike,
MiUserMemo,
NoteEdit,
};
export type AbuseUserReportsRepository = Repository<MiAbuseUserReport>;
@ -203,3 +205,4 @@ export type RoleAssignmentsRepository = Repository<MiRoleAssignment>;
export type FlashsRepository = Repository<MiFlash>;
export type FlashLikesRepository = Repository<MiFlashLike>;
export type UserMemoRepository = Repository<MiUserMemo>;
export type NoteEditRepository = Repository<NoteEdit>;

View file

@ -0,0 +1,49 @@
export const packedNoteEdit = {
type: "object",
properties: {
id: {
type: "string",
optional: false,
nullable: false,
format: "id",
example: "xxxxxxxxxx",
},
updatedAt: {
type: "string",
optional: false,
nullable: false,
format: "date-time",
},
note: {
type: "object",
optional: false,
nullable: false,
ref: "Note",
},
noteId: {
type: "string",
optional: false,
nullable: false,
format: "id",
},
text: {
type: "string",
optional: true,
nullable: true,
},
cw: {
type: "string",
optional: true,
nullable: true,
},
fileIds: {
type: "array",
optional: true,
nullable: true,
items: {
type: "string",
format: "id",
},
},
},
} as const;

View file

@ -22,6 +22,11 @@ export const packedNoteSchema = {
optional: true, nullable: true,
format: 'date-time',
},
updatedAt: {
type: 'string',
optional: true, nullable: true,
format: 'date-time',
},
text: {
type: 'string',
optional: false, nullable: true,