refactor: improve code quality (#8751)
* remove unnecessary if `Array.prototype.some` already returns a boolean so an if to return true or false is completely unnecessary in this case. * perf: use count instead of find When using `count` instead of `findOneBy`, the data is not unnecessarily loaded. * remove duplicate null check The variable is checked for null in the lines above and the function returns if so. Therefore, it can not be null at this point. * simplify `getJsonSchema` Because the assigned value is `null` and the used keys are only shallow, use of `nestedProperty.set` seems inappropriate. Because the value is not read, the initial for loop can be replaced by a `for..in` loop. Since all keys will be assigned `null`, the condition of the ternary expression in the nested function will always be true. Therefore the recursion case will never happen. With this the nested function can be eliminated. * remove duplicate condition The code above already checks `dragging` and returns if it is truthy. Checking it again later is therefore unnecessary. To make this more obvious the `return` is removed in favour of using an if...else construct. * remove impossible "unknown" time The `ago` variable will always be a number and all non-negative numbers are already covered by other cases, the negative case is handled with `future` so there is no case when `unkown` could be achieved.
This commit is contained in:
		
							parent
							
								
									f1d2398eac
								
							
						
					
					
						commit
						804fa33535
					
				
					 7 changed files with 77 additions and 79 deletions
				
			
		|  | @ -1111,7 +1111,6 @@ _sfx: | |||
|   channel: "チャンネル通知" | ||||
| 
 | ||||
| _ago: | ||||
|   unknown: "謎" | ||||
|   future: "未来" | ||||
|   justNow: "たった今" | ||||
|   secondsAgo: "{n}秒前" | ||||
|  |  | |||
|  | @ -144,13 +144,7 @@ export const NoteRepository = db.getRepository(Note).extend({ | |||
| 				return true; | ||||
| 			} else { | ||||
| 				// 指定されているかどうか
 | ||||
| 				const specified = note.visibleUserIds.some((id: any) => meId === id); | ||||
| 
 | ||||
| 				if (specified) { | ||||
| 					return true; | ||||
| 				} else { | ||||
| 					return false; | ||||
| 				} | ||||
| 				return note.visibleUserIds.some((id: any) => meId === id); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
|  | @ -169,9 +163,12 @@ export const NoteRepository = db.getRepository(Note).extend({ | |||
| 			} else { | ||||
| 				// フォロワーかどうか
 | ||||
| 				const [following, user] = await Promise.all([ | ||||
| 					Followings.findOneBy({ | ||||
| 					Followings.count({ | ||||
| 						where: { | ||||
| 							followeeId: note.userId, | ||||
| 							followerId: meId, | ||||
| 						}, | ||||
| 						take: 1, | ||||
| 					}), | ||||
| 					Users.findOneByOrFail({ id: meId }), | ||||
| 				]); | ||||
|  | @ -183,7 +180,7 @@ export const NoteRepository = db.getRepository(Note).extend({ | |||
| 				in which case we can never know the following. Instead we have | ||||
| 				to assume that the users are following each other. | ||||
| 				*/ | ||||
| 				return following != null || (note.userHost != null && user.host != null); | ||||
| 				return following > 0 || (note.userHost != null && user.host != null); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
|  | @ -61,47 +61,58 @@ export const UserRepository = db.getRepository(User).extend({ | |||
| 	//#endregion
 | ||||
| 
 | ||||
| 	async getRelation(me: User['id'], target: User['id']) { | ||||
| 		const [following1, following2, followReq1, followReq2, toBlocking, fromBlocked, mute] = await Promise.all([ | ||||
| 			Followings.findOneBy({ | ||||
| 		return awaitAll({ | ||||
| 			id: target, | ||||
| 			isFollowing: Followings.count({ | ||||
| 				where: { | ||||
| 					followerId: me, | ||||
| 					followeeId: target, | ||||
| 			}), | ||||
| 			Followings.findOneBy({ | ||||
| 				}, | ||||
| 				take: 1, | ||||
| 			}).then(n => n > 0), | ||||
| 			isFollowed: Followings.count({ | ||||
| 				where: { | ||||
| 					followerId: target, | ||||
| 					followeeId: me, | ||||
| 			}), | ||||
| 			FollowRequests.findOneBy({ | ||||
| 				}, | ||||
| 				take: 1, | ||||
| 			}).then(n => n > 0), | ||||
| 			hasPendingFollowRequestFromYou: FollowRequests.count({ | ||||
| 				where: { | ||||
| 					followerId: me, | ||||
| 					followeeId: target, | ||||
| 			}), | ||||
| 			FollowRequests.findOneBy({ | ||||
| 				}, | ||||
| 				take: 1, | ||||
| 			}).then(n => n > 0), | ||||
| 			hasPendingFollowRequestToYou: FollowRequests.count({ | ||||
| 				where: { | ||||
| 					followerId: target, | ||||
| 					followeeId: me, | ||||
| 			}), | ||||
| 			Blockings.findOneBy({ | ||||
| 				}, | ||||
| 				take: 1, | ||||
| 			}).then(n => n > 0), | ||||
| 			isBlocking: Blockings.count({ | ||||
| 				where: { | ||||
| 					blockerId: me, | ||||
| 					blockeeId: target, | ||||
| 			}), | ||||
| 			Blockings.findOneBy({ | ||||
| 				}, | ||||
| 				take: 1, | ||||
| 			}).then(n => n > 0), | ||||
| 			isBlocked: Blockings.count({ | ||||
| 				where: { | ||||
| 					blockerId: target, | ||||
| 					blockeeId: me, | ||||
| 			}), | ||||
| 			Mutings.findOneBy({ | ||||
| 				}, | ||||
| 				take: 1, | ||||
| 			}).then(n => n > 0), | ||||
| 			isMuted: Mutings.count({ | ||||
| 				where: { | ||||
| 					muterId: me, | ||||
| 					muteeId: target, | ||||
| 			}), | ||||
| 		]); | ||||
| 
 | ||||
| 		return { | ||||
| 			id: target, | ||||
| 			isFollowing: following1 != null, | ||||
| 			hasPendingFollowRequestFromYou: followReq1 != null, | ||||
| 			hasPendingFollowRequestToYou: followReq2 != null, | ||||
| 			isFollowed: following2 != null, | ||||
| 			isBlocking: toBlocking != null, | ||||
| 			isBlocked: fromBlocked != null, | ||||
| 			isMuted: mute != null, | ||||
| 		}; | ||||
| 				}, | ||||
| 				take: 1, | ||||
| 			}).then(n => n > 0), | ||||
| 		}); | ||||
| 	}, | ||||
| 
 | ||||
| 	async getHasUnreadMessagingMessage(userId: User['id']): Promise<boolean> { | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ import { User } from '@/models/entities/user.js'; | |||
| export const renderActivity = (x: any): IActivity | null => { | ||||
| 	if (x == null) return null; | ||||
| 
 | ||||
| 	if (x !== null && typeof x === 'object' && x.id == null) { | ||||
| 	if (typeof x === 'object' && x.id == null) { | ||||
| 		x.id = `${config.url}/${uuid()}`; | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -91,27 +91,20 @@ type ToJsonSchema<S> = { | |||
| }; | ||||
| 
 | ||||
| export function getJsonSchema<S extends Schema>(schema: S): ToJsonSchema<Unflatten<ChartResult<S>>> { | ||||
| 	const object = {}; | ||||
| 	for (const [k, v] of Object.entries(schema)) { | ||||
| 		nestedProperty.set(object, k, null); | ||||
| 	} | ||||
| 
 | ||||
| 	function f(obj: Record<string, null | Record<string, unknown>>) { | ||||
| 	const jsonSchema = { | ||||
| 		type: 'object', | ||||
| 		properties: {} as Record<string, unknown>, | ||||
| 		required: [], | ||||
| 	}; | ||||
| 		for (const [k, v] of Object.entries(obj)) { | ||||
| 			jsonSchema.properties[k] = v === null ? { | ||||
| 
 | ||||
| 	for (const k in schema) { | ||||
| 		jsonSchema.properties[k] = { | ||||
| 			type: 'array', | ||||
| 			items: { type: 'number' }, | ||||
| 			} : f(v as Record<string, null | Record<string, unknown>>); | ||||
| 		} | ||||
| 		return jsonSchema; | ||||
| 		}; | ||||
| 	} | ||||
| 
 | ||||
| 	return f(object) as ToJsonSchema<Unflatten<ChartResult<S>>>; | ||||
| 	return jsonSchema as ToJsonSchema<Unflatten<ChartResult<S>>>; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  |  | |||
|  | @ -32,8 +32,7 @@ const relative = $computed(() => { | |||
| 		ago >= 60       ? i18n.t('_ago.minutesAgo', { n: (~~(ago / 60)).toString() }) : | ||||
| 		ago >= 10       ? i18n.t('_ago.secondsAgo', { n: (~~(ago % 60)).toString() }) : | ||||
| 		ago >= -1       ? i18n.ts._ago.justNow : | ||||
| 		ago <  -1       ? i18n.ts._ago.future : | ||||
| 		i18n.ts._ago.unknown); | ||||
| 		i18n.ts._ago.future); | ||||
| }); | ||||
| 
 | ||||
| function tick() { | ||||
|  |  | |||
|  | @ -213,14 +213,13 @@ function onDragover(ev) { | |||
| 	if (dragging) { | ||||
| 		// 自分自身にはドロップさせない | ||||
| 		ev.dataTransfer.dropEffect = 'none'; | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	} else { | ||||
| 		const isDeckColumn = ev.dataTransfer.types[0] === _DATA_TRANSFER_DECK_COLUMN_; | ||||
| 
 | ||||
| 		ev.dataTransfer.dropEffect = isDeckColumn ? 'move' : 'none'; | ||||
| 
 | ||||
| 	if (!dragging && isDeckColumn) draghover = true; | ||||
| 		if (isDeckColumn) draghover = true; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function onDragleave() { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue