fix(backend): use insertOne insteadof insert/findOneOrFail combination (#13908)
* fix(backend): use insertOne insteadof insert/findOneOrFail combination * fix: typo * fix(backend): inherit mainAlias? * refactor(backend): use extend * fix(backend): invalid entityTarget * fix(backend): fake where * chore: debug * chore: debug * test: log * fix(backend): column names * fix(backend): remove dummy from * revert: log * fix(backend): position * fix(backend): automatic aliasing * chore(backend): alias * chore(backend): remove from * fix(backend): type * fix(backend): avoid pure name * test(backend): fix type * chore(backend): use cte * fix(backend): avoid useless alias * fix(backend): fix typo * fix(backend): __disambiguation__ * fix(backend): quote * chore(backend): t * chore(backend): accessible * chore(backend): concrete returning * fix(backend): quote * chore: log more * chore: log metadata * chore(backend): use raw * fix(backend): returning column name * fix(backend): transform * build(backend): wanna logging * build(backend): transform empty * build(backend): build alias * build(backend): restore name * chore: return entity * fix: test case * test(backend): 204 * chore(backend): log sql * chore(backend): assert user joined * fix(backend): typo * chore(backend): log long sql * chore(backend): log join * chore(backend): log join depth null * chore(backend): joinAttributes * chore(backend): override createJoinExpression * chore: join log * fix(backend): escape * test(backend): log log * chore(backend): join gonna success? * chore(backend): relations * chore(backend): undefined * chore(backend): target * chore(backend): remove log * chore(backend): log chart update * chore(backend): log columns * chore(backend): check hasMetadata * chore(backend): unshift id when not included * chore(backend): missing select * chore(backend): remove debug code
This commit is contained in:
		| @@ -29,13 +29,13 @@ export class SigninService { | ||||
| 	public signin(request: FastifyRequest, reply: FastifyReply, user: MiLocalUser) { | ||||
| 		setImmediate(async () => { | ||||
| 			// Append signin history | ||||
| 			const record = await this.signinsRepository.insert({ | ||||
| 			const record = await this.signinsRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				userId: user.id, | ||||
| 				ip: request.ip, | ||||
| 				headers: request.headers as any, | ||||
| 				success: true, | ||||
| 			}).then(x => this.signinsRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			}); | ||||
|  | ||||
| 			// Publish signin event | ||||
| 			this.globalEventService.publishMainStream(user.id, 'signin', await this.signinEntityService.pack(record)); | ||||
|   | ||||
| @@ -183,13 +183,13 @@ export class SignupApiService { | ||||
| 			const salt = await bcrypt.genSalt(8); | ||||
| 			const hash = await bcrypt.hash(password, salt); | ||||
|  | ||||
| 			const pendingUser = await this.userPendingsRepository.insert({ | ||||
| 			const pendingUser = await this.userPendingsRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				code, | ||||
| 				email: emailAddress!, | ||||
| 				username: username, | ||||
| 				password: hash, | ||||
| 			}).then(x => this.userPendingsRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			}); | ||||
|  | ||||
| 			const link = `${this.config.url}/signup-complete/${code}`; | ||||
|  | ||||
|   | ||||
| @@ -50,7 +50,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 		private moderationLogService: ModerationLogService, | ||||
| 	) { | ||||
| 		super(meta, paramDef, async (ps, me) => { | ||||
| 			const ad = await this.adsRepository.insert({ | ||||
| 			const ad = await this.adsRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				expiresAt: new Date(ps.expiresAt), | ||||
| 				startsAt: new Date(ps.startsAt), | ||||
| @@ -61,7 +61,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				ratio: ps.ratio, | ||||
| 				place: ps.place, | ||||
| 				memo: ps.memo, | ||||
| 			}).then(r => this.adsRepository.findOneByOrFail({ id: r.identifiers[0].id })); | ||||
| 			}); | ||||
|  | ||||
| 			this.moderationLogService.log(me, 'createAd', { | ||||
| 				adId: ad.id, | ||||
|   | ||||
| @@ -66,11 +66,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 			const ticketsPromises = []; | ||||
|  | ||||
| 			for (let i = 0; i < ps.count; i++) { | ||||
| 				ticketsPromises.push(this.registrationTicketsRepository.insert({ | ||||
| 				ticketsPromises.push(this.registrationTicketsRepository.insertOne({ | ||||
| 					id: this.idService.gen(), | ||||
| 					expiresAt: ps.expiresAt ? new Date(ps.expiresAt) : null, | ||||
| 					code: generateInviteCode(), | ||||
| 				}).then(x => this.registrationTicketsRepository.findOneByOrFail(x.identifiers[0]))); | ||||
| 				})); | ||||
| 			} | ||||
|  | ||||
| 			const tickets = await Promise.all(ticketsPromises); | ||||
|   | ||||
| @@ -112,7 +112,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
|  | ||||
| 			const now = new Date(); | ||||
|  | ||||
| 			const antenna = await this.antennasRepository.insert({ | ||||
| 			const antenna = await this.antennasRepository.insertOne({ | ||||
| 				id: this.idService.gen(now.getTime()), | ||||
| 				lastUsedAt: now, | ||||
| 				userId: me.id, | ||||
| @@ -127,7 +127,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				excludeBots: ps.excludeBots, | ||||
| 				withReplies: ps.withReplies, | ||||
| 				withFile: ps.withFile, | ||||
| 			}).then(x => this.antennasRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			}); | ||||
|  | ||||
| 			this.globalEventService.publishInternalEvent('antennaCreated', antenna); | ||||
|  | ||||
|   | ||||
| @@ -54,7 +54,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 			const permission = unique(ps.permission.map(v => v.replace(/^(.+)(\/|-)(read|write)$/, '$3:$1'))); | ||||
|  | ||||
| 			// Create account | ||||
| 			const app = await this.appsRepository.insert({ | ||||
| 			const app = await this.appsRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				userId: me ? me.id : null, | ||||
| 				name: ps.name, | ||||
| @@ -62,7 +62,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				permission, | ||||
| 				callbackUrl: ps.callbackUrl, | ||||
| 				secret: secret, | ||||
| 			}).then(x => this.appsRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			}); | ||||
|  | ||||
| 			return await this.appEntityService.pack(app, null, { | ||||
| 				detail: true, | ||||
|   | ||||
| @@ -78,11 +78,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 			const token = randomUUID(); | ||||
|  | ||||
| 			// Create session token document | ||||
| 			const doc = await this.authSessionsRepository.insert({ | ||||
| 			const doc = await this.authSessionsRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				appId: app.id, | ||||
| 				token: token, | ||||
| 			}).then(x => this.authSessionsRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			}); | ||||
|  | ||||
| 			return { | ||||
| 				token: doc.token, | ||||
|   | ||||
| @@ -80,7 +80,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			const channel = await this.channelsRepository.insert({ | ||||
| 			const channel = await this.channelsRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				userId: me.id, | ||||
| 				name: ps.name, | ||||
| @@ -89,7 +89,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				isSensitive: ps.isSensitive ?? false, | ||||
| 				...(ps.color !== undefined ? { color: ps.color } : {}), | ||||
| 				allowRenoteToExternal: ps.allowRenoteToExternal ?? true, | ||||
| 			} as MiChannel).then(x => this.channelsRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			} as MiChannel); | ||||
|  | ||||
| 			return await this.channelEntityService.pack(channel, me); | ||||
| 		}); | ||||
|   | ||||
| @@ -75,12 +75,12 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 			} | ||||
|  | ||||
| 			// Create folder | ||||
| 			const folder = await this.driveFoldersRepository.insert({ | ||||
| 			const folder = await this.driveFoldersRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				name: ps.name, | ||||
| 				parentId: parent !== null ? parent.id : null, | ||||
| 				userId: me.id, | ||||
| 			}).then(x => this.driveFoldersRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			}); | ||||
|  | ||||
| 			const folderObj = await this.driveFolderEntityService.pack(folder); | ||||
|  | ||||
|   | ||||
| @@ -59,7 +59,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 		private idService: IdService, | ||||
| 	) { | ||||
| 		super(meta, paramDef, async (ps, me) => { | ||||
| 			const flash = await this.flashsRepository.insert({ | ||||
| 			const flash = await this.flashsRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				userId: me.id, | ||||
| 				updatedAt: new Date(), | ||||
| @@ -68,7 +68,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				script: ps.script, | ||||
| 				permissions: ps.permissions, | ||||
| 				visibility: ps.visibility, | ||||
| 			}).then(x => this.flashsRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			}); | ||||
|  | ||||
| 			return await this.flashEntityService.pack(flash); | ||||
| 		}); | ||||
|   | ||||
| @@ -76,7 +76,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				throw new Error(); | ||||
| 			} | ||||
|  | ||||
| 			const post = await this.galleryPostsRepository.insert(new MiGalleryPost({ | ||||
| 			const post = await this.galleryPostsRepository.insertOne(new MiGalleryPost({ | ||||
| 				id: this.idService.gen(), | ||||
| 				updatedAt: new Date(), | ||||
| 				title: ps.title, | ||||
| @@ -84,7 +84,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				userId: me.id, | ||||
| 				isSensitive: ps.isSensitive, | ||||
| 				fileIds: files.map(file => file.id), | ||||
| 			})).then(x => this.galleryPostsRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			})); | ||||
|  | ||||
| 			return await this.galleryPostEntityService.pack(post, me); | ||||
| 		}); | ||||
|   | ||||
| @@ -89,14 +89,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				throw new ApiError(meta.errors.tooManyWebhooks); | ||||
| 			} | ||||
|  | ||||
| 			const webhook = await this.webhooksRepository.insert({ | ||||
| 			const webhook = await this.webhooksRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				userId: me.id, | ||||
| 				name: ps.name, | ||||
| 				url: ps.url, | ||||
| 				secret: ps.secret, | ||||
| 				on: ps.on, | ||||
| 			}).then(x => this.webhooksRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			}); | ||||
|  | ||||
| 			this.globalEventService.publishInternalEvent('webhookCreated', webhook); | ||||
|  | ||||
|   | ||||
| @@ -66,13 +66,13 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			const ticket = await this.registrationTicketsRepository.insert({ | ||||
| 			const ticket = await this.registrationTicketsRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				createdBy: me, | ||||
| 				createdById: me.id, | ||||
| 				expiresAt: policies.inviteExpirationTime ? new Date(Date.now() + (policies.inviteExpirationTime * 1000 * 60)) : null, | ||||
| 				code: generateInviteCode(), | ||||
| 			}).then(x => this.registrationTicketsRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			}); | ||||
|  | ||||
| 			return await this.inviteCodeEntityService.pack(ticket, me); | ||||
| 		}); | ||||
|   | ||||
| @@ -144,12 +144,12 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 			} | ||||
|  | ||||
| 			// Create vote | ||||
| 			const vote = await this.pollVotesRepository.insert({ | ||||
| 			const vote = await this.pollVotesRepository.insertOne({ | ||||
| 				id: this.idService.gen(createdAt.getTime()), | ||||
| 				noteId: note.id, | ||||
| 				userId: me.id, | ||||
| 				choice: ps.choice, | ||||
| 			}).then(x => this.pollVotesRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			}); | ||||
|  | ||||
| 			// Increment votes count | ||||
| 			const index = ps.choice + 1; // In SQL, array index is 1 based | ||||
|   | ||||
| @@ -102,7 +102,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				} | ||||
| 			}); | ||||
|  | ||||
| 			const page = await this.pagesRepository.insert(new MiPage({ | ||||
| 			const page = await this.pagesRepository.insertOne(new MiPage({ | ||||
| 				id: this.idService.gen(), | ||||
| 				updatedAt: new Date(), | ||||
| 				title: ps.title, | ||||
| @@ -117,7 +117,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				alignCenter: ps.alignCenter, | ||||
| 				hideTitleWhenPinned: ps.hideTitleWhenPinned, | ||||
| 				font: ps.font, | ||||
| 			})).then(x => this.pagesRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			})); | ||||
|  | ||||
| 			return await this.pageEntityService.pack(page); | ||||
| 		}); | ||||
|   | ||||
| @@ -104,11 +104,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				throw new ApiError(meta.errors.tooManyUserLists); | ||||
| 			} | ||||
|  | ||||
| 			const userList = await this.userListsRepository.insert({ | ||||
| 			const userList = await this.userListsRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				userId: me.id, | ||||
| 				name: ps.name, | ||||
| 			} as MiUserList).then(x => this.userListsRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			} as MiUserList); | ||||
|  | ||||
| 			const users = (await this.userListMembershipsRepository.findBy({ | ||||
| 				userListId: ps.listId, | ||||
|   | ||||
| @@ -65,11 +65,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				throw new ApiError(meta.errors.tooManyUserLists); | ||||
| 			} | ||||
|  | ||||
| 			const userList = await this.userListsRepository.insert({ | ||||
| 			const userList = await this.userListsRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				userId: me.id, | ||||
| 				name: ps.name, | ||||
| 			} as MiUserList).then(x => this.userListsRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			} as MiUserList); | ||||
|  | ||||
| 			return await this.userListEntityService.pack(userList); | ||||
| 		}); | ||||
|   | ||||
| @@ -82,14 +82,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				throw new ApiError(meta.errors.cannotReportAdmin); | ||||
| 			} | ||||
|  | ||||
| 			const report = await this.abuseUserReportsRepository.insert({ | ||||
| 			const report = await this.abuseUserReportsRepository.insertOne({ | ||||
| 				id: this.idService.gen(), | ||||
| 				targetUserId: user.id, | ||||
| 				targetUserHost: user.host, | ||||
| 				reporterId: me.id, | ||||
| 				reporterHost: null, | ||||
| 				comment: ps.comment, | ||||
| 			}).then(x => this.abuseUserReportsRepository.findOneByOrFail(x.identifiers[0])); | ||||
| 			}); | ||||
|  | ||||
| 			// Publish event to moderators | ||||
| 			setImmediate(async () => { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Acid Chicken
					Acid Chicken