wip
This commit is contained in:
		
							parent
							
								
									0571b83978
								
							
						
					
					
						commit
						b697b2f651
					
				|  | @ -1,5 +1,4 @@ | |||
| import { Injectable } from '@nestjs/common'; | ||||
| import ms from 'ms'; | ||||
| import { Endpoint } from '@/server/api/endpoint-base.js'; | ||||
| import { ApResolverService } from '@/core/activitypub/ApResolverService.js'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,4 @@ | |||
| import { Inject, Injectable } from '@nestjs/common'; | ||||
| import ms from 'ms'; | ||||
| import { Endpoint } from '@/server/api/endpoint-base.js'; | ||||
| import type { UsersRepository, NotesRepository } from '@/models/index.js'; | ||||
| import type { Note } from '@/models/entities/Note.js'; | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| import ms from 'ms'; | ||||
| import { Inject, Injectable } from '@nestjs/common'; | ||||
| import { Endpoint } from '@/server/api/endpoint-base.js'; | ||||
| import type { UsersRepository, BlockingsRepository } from '@/models/index.js'; | ||||
|  |  | |||
|  | @ -1,5 +1,4 @@ | |||
| import { Inject, Injectable } from '@nestjs/common'; | ||||
| import ms from 'ms'; | ||||
| import { Endpoint } from '@/server/api/endpoint-base.js'; | ||||
| import type { ChannelsRepository, DriveFilesRepository } from '@/models/index.js'; | ||||
| import type { Channel } from '@/models/entities/Channel.js'; | ||||
|  |  | |||
|  | @ -1,5 +1,4 @@ | |||
| import { Inject, Injectable } from '@nestjs/common'; | ||||
| import ms from 'ms'; | ||||
| import { Endpoint } from '@/server/api/endpoint-base.js'; | ||||
| import { IdService } from '@/core/IdService.js'; | ||||
| import { DI } from '@/di-symbols.js'; | ||||
|  | @ -8,59 +7,10 @@ import { GetterService } from '@/server/api/GetterService.js'; | |||
| import { RoleService } from '@/core/RoleService.js'; | ||||
| import { ApiError } from '../../error.js'; | ||||
| 
 | ||||
| export const meta = { | ||||
| 	tags: ['account', 'notes', 'clips'], | ||||
| 
 | ||||
| 	requireCredential: true, | ||||
| 
 | ||||
| 	prohibitMoved: true, | ||||
| 
 | ||||
| 	kind: 'write:account', | ||||
| 
 | ||||
| 	limit: { | ||||
| 		duration: ms('1hour'), | ||||
| 		max: 20, | ||||
| 	}, | ||||
| 
 | ||||
| 	errors: { | ||||
| 		noSuchClip: { | ||||
| 			message: 'No such clip.', | ||||
| 			code: 'NO_SUCH_CLIP', | ||||
| 			id: 'd6e76cc0-a1b5-4c7c-a287-73fa9c716dcf', | ||||
| 		}, | ||||
| 
 | ||||
| 		noSuchNote: { | ||||
| 			message: 'No such note.', | ||||
| 			code: 'NO_SUCH_NOTE', | ||||
| 			id: 'fc8c0b49-c7a3-4664-a0a6-b418d386bb8b', | ||||
| 		}, | ||||
| 
 | ||||
| 		alreadyClipped: { | ||||
| 			message: 'The note has already been clipped.', | ||||
| 			code: 'ALREADY_CLIPPED', | ||||
| 			id: '734806c4-542c-463a-9311-15c512803965', | ||||
| 		}, | ||||
| 
 | ||||
| 		tooManyClipNotes: { | ||||
| 			message: 'You cannot add notes to the clip any more.', | ||||
| 			code: 'TOO_MANY_CLIP_NOTES', | ||||
| 			id: 'f0dba960-ff73-4615-8df4-d6ac5d9dc118', | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
| 
 | ||||
| export const paramDef = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		clipId: { type: 'string', format: 'misskey:id' }, | ||||
| 		noteId: { type: 'string', format: 'misskey:id' }, | ||||
| 	}, | ||||
| 	required: ['clipId', 'noteId'], | ||||
| } as const; | ||||
| 
 | ||||
| // eslint-disable-next-line import/no-default-export
 | ||||
| @Injectable() | ||||
| export default class extends Endpoint<typeof meta, typeof paramDef> { | ||||
| export default class extends Endpoint<'clips/add-note'> { | ||||
| 	name = 'clips/add-note' as const; | ||||
| 	constructor( | ||||
| 		@Inject(DI.clipsRepository) | ||||
| 		private clipsRepository: ClipsRepository, | ||||
|  | @ -72,18 +22,18 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { | |||
| 		private roleService: RoleService, | ||||
| 		private getterService: GetterService, | ||||
| 	) { | ||||
| 		super(meta, paramDef, async (ps, me) => { | ||||
| 		super(async (ps, me) => { | ||||
| 			const clip = await this.clipsRepository.findOneBy({ | ||||
| 				id: ps.clipId, | ||||
| 				userId: me.id, | ||||
| 			}); | ||||
| 
 | ||||
| 			if (clip == null) { | ||||
| 				throw new ApiError(meta.errors.noSuchClip); | ||||
| 				throw new ApiError(this.meta.errors.noSuchClip); | ||||
| 			} | ||||
| 
 | ||||
| 			const note = await this.getterService.getNote(ps.noteId).catch(e => { | ||||
| 				if (e.id === '9725d0ce-ba28-4dde-95a7-2cbb2c15de24') throw new ApiError(meta.errors.noSuchNote); | ||||
| 				if (e.id === '9725d0ce-ba28-4dde-95a7-2cbb2c15de24') throw new ApiError(this.meta.errors.noSuchNote); | ||||
| 				throw e; | ||||
| 			}); | ||||
| 
 | ||||
|  | @ -93,14 +43,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { | |||
| 			}); | ||||
| 
 | ||||
| 			if (exist != null) { | ||||
| 				throw new ApiError(meta.errors.alreadyClipped); | ||||
| 				throw new ApiError(this.meta.errors.alreadyClipped); | ||||
| 			} | ||||
| 
 | ||||
| 			const currentCount = await this.clipNotesRepository.countBy({ | ||||
| 				clipId: clip.id, | ||||
| 			}); | ||||
| 			if (currentCount > (await this.roleService.getUserPolicies(me.id)).noteEachClipsLimit) { | ||||
| 				throw new ApiError(meta.errors.tooManyClipNotes); | ||||
| 				throw new ApiError(this.meta.errors.tooManyClipNotes); | ||||
| 			} | ||||
| 
 | ||||
| 			await this.clipNotesRepository.insert({ | ||||
|  |  | |||
|  | @ -3223,6 +3223,61 @@ export const endpoints = { | |||
| 		}], | ||||
| 	}, | ||||
| 	//#endregion
 | ||||
| 
 | ||||
| 	//#region clips
 | ||||
| 	'clips/add-note': { | ||||
| 		tags: ['account', 'notes', 'clips'], | ||||
| 	 | ||||
| 		requireCredential: true, | ||||
| 	 | ||||
| 		prohibitMoved: true, | ||||
| 	 | ||||
| 		kind: 'write:account', | ||||
| 	 | ||||
| 		limit: { | ||||
| 			duration: ms('1hour'), | ||||
| 			max: 20, | ||||
| 		}, | ||||
| 	 | ||||
| 		errors: { | ||||
| 			noSuchClip: { | ||||
| 				message: 'No such clip.', | ||||
| 				code: 'NO_SUCH_CLIP', | ||||
| 				id: 'd6e76cc0-a1b5-4c7c-a287-73fa9c716dcf', | ||||
| 			}, | ||||
| 	 | ||||
| 			noSuchNote: { | ||||
| 				message: 'No such note.', | ||||
| 				code: 'NO_SUCH_NOTE', | ||||
| 				id: 'fc8c0b49-c7a3-4664-a0a6-b418d386bb8b', | ||||
| 			}, | ||||
| 	 | ||||
| 			alreadyClipped: { | ||||
| 				message: 'The note has already been clipped.', | ||||
| 				code: 'ALREADY_CLIPPED', | ||||
| 				id: '734806c4-542c-463a-9311-15c512803965', | ||||
| 			}, | ||||
| 	 | ||||
| 			tooManyClipNotes: { | ||||
| 				message: 'You cannot add notes to the clip any more.', | ||||
| 				code: 'TOO_MANY_CLIP_NOTES', | ||||
| 				id: 'f0dba960-ff73-4615-8df4-d6ac5d9dc118', | ||||
| 			}, | ||||
| 		}, | ||||
| 
 | ||||
| 		defines: [{ | ||||
| 			req: { | ||||
| 				type: 'object', | ||||
| 				properties: { | ||||
| 					clipId: { type: 'string', format: 'misskey:id' }, | ||||
| 					noteId: { type: 'string', format: 'misskey:id' }, | ||||
| 				}, | ||||
| 				required: ['clipId', 'noteId'], | ||||
| 			}, | ||||
| 			res: undefined, | ||||
| 		}] | ||||
| 	}, | ||||
| 	//#endregion
 | ||||
| } as const satisfies { [x: string]: IEndpointMeta; }; | ||||
| 
 | ||||
| /** | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue