fix type errors from notes/versions endpoint

This commit is contained in:
Hazelnoot 2025-03-31 14:30:01 -04:00
parent 000b1f4fe2
commit 08b8d50124
2 changed files with 40 additions and 22 deletions

View file

@ -3,7 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */
import { Entity, JoinColumn, Column, ManyToOne, PrimaryColumn, Index } from "typeorm"; import { Entity, JoinColumn, Column, ManyToOne, PrimaryColumn, Index } from 'typeorm';
import { id } from './util/id.js'; import { id } from './util/id.js';
import { MiNote } from './Note.js'; import { MiNote } from './Note.js';
import type { MiDriveFile } from './DriveFile.js'; import type { MiDriveFile } from './DriveFile.js';
@ -16,27 +16,27 @@ export class NoteEdit {
@Index() @Index()
@Column({ @Column({
...id(), ...id(),
comment: "The ID of note.", comment: 'The ID of note.',
}) })
public noteId: MiNote["id"]; public noteId: MiNote['id'];
@ManyToOne((type) => MiNote, { @ManyToOne(() => MiNote, {
onDelete: "CASCADE", onDelete: 'CASCADE',
}) })
@JoinColumn() @JoinColumn()
public note: MiNote | null; public note: MiNote | null;
@Column("text", { @Column('text', {
nullable: true, nullable: true,
}) })
public oldText: string | null; public oldText: string | null;
@Column("text", { @Column('text', {
nullable: true, nullable: true,
}) })
public newText: string | null; public newText: string | null;
@Column("varchar", { @Column('varchar', {
length: 512, length: 512,
nullable: true, nullable: true,
}) })
@ -45,17 +45,17 @@ export class NoteEdit {
@Column({ @Column({
...id(), ...id(),
array: true, array: true,
default: "{}", default: '{}',
}) })
public fileIds: MiDriveFile["id"][]; public fileIds: MiDriveFile['id'][];
@Column("timestamp with time zone", { @Column('timestamp with time zone', {
comment: "The updated date of the Note.", comment: 'The updated date of the Note.',
}) })
public updatedAt: Date; public updatedAt: Date;
@Column("timestamp with time zone", { @Column('timestamp with time zone', {
comment: "The old date from before the edit", comment: 'The old date from before the edit',
}) })
public oldDate: Date; public oldDate: Date;
} }

View file

@ -17,8 +17,25 @@ export const meta = {
requireCredential: false, requireCredential: false,
res: { res: {
type: 'object', type: 'array',
optional: false, nullable: false, items: {
type: 'object',
optional: false, nullable: false,
properties: {
oldDate: {
type: 'string',
optional: false, nullable: false,
},
updatedAt: {
type: 'string',
optional: false, nullable: false,
},
text: {
type: 'string',
optional: false, nullable: true,
},
},
},
}, },
errors: { errors: {
@ -60,13 +77,13 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private queryService: QueryService, private queryService: QueryService,
) { ) {
super(meta, paramDef, async (ps, me) => { super(meta, paramDef, async (ps, me) => {
const query = await this.notesRepository.createQueryBuilder('note') const query = this.notesRepository.createQueryBuilder('note')
.where('note.id = :noteId', { noteId: ps.noteId }) .where('note.id = :noteId', { noteId: ps.noteId })
.innerJoinAndSelect('note.user', 'user'); .innerJoinAndSelect('note.user', 'user');
this.queryService.generateVisibilityQuery(query, me); this.queryService.generateVisibilityQuery(query, me);
if (me) { if (me) {
this.queryService.generateBlockedUserQuery(query, me); this.queryService.generateBlockedUserQueryForNotes(query, me);
} }
const note = await query.getOne(); const note = await query.getOne();
@ -75,6 +92,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
throw new ApiError(meta.errors.noSuchNote); throw new ApiError(meta.errors.noSuchNote);
} }
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
if (note.user!.requireSigninToViewContents && me == null) { if (note.user!.requireSigninToViewContents && me == null) {
throw new ApiError(meta.errors.signinRequired); throw new ApiError(meta.errors.signinRequired);
} }
@ -84,17 +102,17 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
throw err; throw err;
}); });
let editArray = []; let editArray: { oldDate: string, updatedAt: string, text: string | null }[] = [];
for (const edit of edits) { for (const edit of edits) {
editArray.push({ editArray.push({
oldDate: edit.oldDate as Date | null ?? null, oldDate: edit.oldDate.toISOString(),
updatedAt: edit.updatedAt, updatedAt: edit.updatedAt.toISOString(),
text: edit.oldText ?? edit.newText ?? null, text: edit.oldText ?? edit.newText ?? null,
}); });
} }
editArray = editArray.sort((a, b) => { return new Date(b.oldDate ?? b.updatedAt).getTime() - new Date(a.oldDate ?? a.updatedAt).getTime(); }); editArray = editArray.sort((a, b) => { return new Date(b.oldDate).getTime() - new Date(a.oldDate).getTime(); });
return editArray; return editArray;
}); });