Skip to main content
sonamuFilterλŠ” Entity의 ν•„λ“œλ₯Ό νƒ€μž… μ•ˆμ „ν•˜κ²Œ ν•„ν„°λ§ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. ν•„ν„° κ°€λŠ₯ν•œ ν•„λ“œμ™€ ν—ˆμš©λ˜λŠ” μ—°μ‚°μžκ°€ Entity μ •μ˜μ—μ„œ μžλ™μœΌλ‘œ μΆ”λ‘ λ˜μ–΄ 잘λͺ»λœ 필터링 μ‹œλ„λ₯Ό νƒ€μž… 레벨과 λŸ°νƒ€μž„ λͺ¨λ‘μ—μ„œ λ°©μ§€ν•©λ‹ˆλ‹€.
sonamuFilterλŠ” Entity의 propsλ₯Ό 기반으둜 μžλ™ μƒμ„±λ©λ‹ˆλ‹€. 가상 ν•„λ“œ(virtual fields)λŠ” 필터링 λŒ€μƒμ—μ„œ μ œμ™Έλ˜λ©°, FKλ₯Ό μƒμ„±ν•˜λŠ” 관계(BelongsToOne, hasJoinColumn이 μžˆλŠ” OneToOne)λŠ” {관계λͺ…}_id ν˜•νƒœλ‘œ 필터링할 수 μžˆμŠ΅λ‹ˆλ‹€.

κΈ°λ³Έ μ‚¬μš©λ²•

ν•„ν„° νƒ€μž…

FilterQuery

각 Entity에 λŒ€ν•΄ FilterQuery<T> νƒ€μž…μ΄ μžλ™ μƒμ„±λ©λ‹ˆλ‹€:

FilterCondition

ν•„λ“œ νƒ€μž…μ— 따라 μ‚¬μš© κ°€λŠ₯ν•œ μ—°μ‚°μžκ°€ κ²°μ •λ©λ‹ˆλ‹€:

νƒ€μž…λ³„ 지원 μ—°μ‚°μž

μ‚¬μš© μ˜ˆμ‹œ

숫자 필터링

λ¬Έμžμ—΄ 필터링

λ‚ μ§œ 필터링

Enum 필터링

NULL 체크

볡합 쑰건 (AND)

FK (Foreign Key) 필터링

FKλ₯Ό μƒμ„±ν•˜λŠ” 관계(BelongsToOne, hasJoinColumn이 μžˆλŠ” OneToOne)λŠ” {관계λͺ…}_id ν˜•νƒœλ‘œ 필터링할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚΄λΆ€μ μœΌλ‘œ integer νƒ€μž…μ˜ 가상 prop으둜 λ³€ν™˜λ˜μ–΄ λͺ¨λ“  숫자 μ—°μ‚°μžλ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.
FK 필터링은 관계λͺ…이 μ•„λ‹Œ {관계λͺ…}_id ν˜•μ‹μ„ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ employee 관계가 μžˆλ‹€λ©΄ employeeκ°€ μ•„λ‹Œ employee_id둜 ν•„ν„°λ§ν•©λ‹ˆλ‹€.

URL 쿼리 슀트링

ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ URL 쿼리 슀트링으둜 ν•„ν„°λ₯Ό 전달할 수 μžˆμŠ΅λ‹ˆλ‹€:
Fastifyκ°€ νŒŒμ‹±ν•œ λ¬Έμžμ—΄μ€ μžλ™μœΌλ‘œ μ μ ˆν•œ νƒ€μž…μœΌλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€:

μœ νš¨μ„± 검증

sonamuFilterλŠ” λ‹€μŒμ„ κ²€μ¦ν•©λ‹ˆλ‹€:

1. ν•„ν„° κ°€λŠ₯ν•œ ν•„λ“œ

Entity의 props에 μ •μ˜λœ ν•„λ“œλ§Œ 필터링할 수 μžˆμŠ΅λ‹ˆλ‹€. 가상 ν•„λ“œλŠ” 필터링 λŒ€μƒμ—μ„œ μ œμ™Έλ©λ‹ˆλ‹€. 단, FKλ₯Ό μƒμ„±ν•˜λŠ” 관계(BelongsToOne, hasJoinColumn이 μžˆλŠ” OneToOne)λŠ” {관계λͺ…}_id ν˜•νƒœλ‘œ 필터링할 수 μžˆμŠ΅λ‹ˆλ‹€.

2. μ§€μ›ν•˜λŠ” μ—°μ‚°μž

ν•„λ“œ νƒ€μž…μ— λ§žλŠ” μ—°μ‚°μžλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. Enum κ°’

Enum νƒ€μž…μ˜ ν•„λ“œλŠ” μ •μ˜λœ κ°’λ§Œ ν—ˆμš©ν•©λ‹ˆλ‹€.

κΈ°μ‘΄ ν•„ν„°μ™€μ˜ 관계

sonamuFilterλŠ” κΈ°μ‘΄ ListParams의 μ»€μŠ€ν…€ 필터와 ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:
κΈ°μ‘΄ 필터와 sonamuFilterκ°€ 같은 ν•„λ“œλ₯Ό ν•„ν„°λ§ν•˜λ©΄ 두 쑰건이 λͺ¨λ‘ AND둜 μ μš©λ©λ‹ˆλ‹€. μ˜λ„μΉ˜ μ•Šμ€ κ²°κ³Όλ₯Ό λ°©μ§€ν•˜λ €λ©΄ 같은 ν•„λ“œμ— λŒ€ν•œ 쀑볡 필터링을 ν”Όν•˜μ„Έμš”.

λ‚΄λΆ€ λ™μž‘

1. ν•„ν„° μ •κ·œν™” (normalizeFilterQuery)

URL 쿼리 슀트링으둜 μ „λ‹¬λœ λ¬Έμžμ—΄ 값을 μ μ ˆν•œ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

2. μœ νš¨μ„± 검증 (validateSonamuFilters)

Entity의 ν•„ν„° 메타데이터λ₯Ό 기반으둜 ν•„ν„° 쿼리λ₯Ό κ²€μ¦ν•©λ‹ˆλ‹€.

3. 쿼리 적용 (applySonamuFilters)

κ²€μ¦λœ ν•„ν„° 쑰건을 Puri 쿼리 λΉŒλ”μ— μ μš©ν•©λ‹ˆλ‹€.

λ‹€μŒ 단계

findMany

리슀트 쑰회 및 νŽ˜μ΄μ§€λ„€μ΄μ…˜

Puri 쿼리 λΉŒλ”

κ³ κΈ‰ 쿼리 μž‘μ„±ν•˜κΈ°