Note

Untitled 2

Obsidian March 3, 2026

GET /api/files 시 에러 발생합니다

input: curl -X 'GET' \ 'http://localhost:8080/api/files/?entity_type=inspection&entity_id=0f311bd8-2d93-4a55-91a4-9f8f89efe5a9&page_size=20' \ -H 'accept: application/json' \ -H 'x-company-id: 14aff9b4-39d6-47a8-b869-0f454f68c9af' \ -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ink3RUdtMGFFNV9XcldwOGFBM0VtayJ9.eyJodHRwczovL2VubWlnaHQuY29tL2VtYWlsIjoiYW5naWUua2ltQGVubWlnaHQuY29tIiwiaHR0cHM6Ly9lbm1pZ2h0LmNvbS9uYW1lIjoiQW5naWUgS2ltIiwiaHR0cHM6Ly9lbm1pZ2h0LmNvbS90ZW5hbnRfaWQiOiI2ZmI3NTkzNS0yOTM4LTQxOTAtYmY3MS04NWQwODMzMDU1YTgiLCJodHRwczovL2VubWlnaHQuY29tL3RlbmFudF9pZHMiOlsiNzE4MGFiMTEtMjE5Ni00YWJiLWEyMjctMWQ3MWJiZGZlNmFiIiwiNmZiNzU5MzUtMjkzOC00MTkwLWJmNzEtODVkMDgzMzA1NWE4Il0sImh0dHBzOi8vZW5taWdodC5jb20vb3JnX2lkIjoib3JnX1Nma2RLVTQ2QWY2dkZjMloiLCJodHRwczovL2VubWlnaHQuY29tL29yZ19uYW1lIjoiZW5taWdodCIsImh0dHBzOi8vZW5taWdodC5jb20vb3JnX2Rpc3BsYXlfbmFtZSI6IkVubWlnaHQiLCJodHRwczovL2VubWlnaHQuY29tL3JvbGUiOiJhZG1pbiIsImh0dHBzOi8vZW5taWdodC5jb20vcGVuZGluZ19pbnZpdGF0aW9uIjpmYWxzZSwiaHR0cHM6Ly9lbm1pZ2h0LmNvbS9uZWVkc19pbnZpdGF0aW9uX2FjY2VwdGFuY2UiOmZhbHNlLCJodHRwczovL2VubWlnaHQuY29tL3JlcXVpcmVzX2ludml0YXRpb24iOmZhbHNlLCJodHRwczovL2VubWlnaHQuY29tL2lzX25ld19vcmciOmZhbHNlLCJodHRwczovL2VubWlnaHQuY29tL2ludGVybmFsX3VzZXJfaWQiOiIxMDkwMTY5MC1hNjExLTRhMGMtODI4ZC02MzEzMzA1NDM2MWMiLCJpc3MiOiJodHRwczovL2Rldi1hY3ptdmtsNXNlN3FieGduLnVzLmF1dGgwLmNvbS8iLCJzdWIiOiJnb29nbGUtb2F1dGgyfDExNTMwNzg5NTE5MzEwMTM3NDkyOCIsImF1ZCI6WyJodHRwczovL2VubWlnaHQuY29tL2FwaS8iLCJodHRwczovL2Rldi1hY3ptdmtsNXNlN3FieGduLnVzLmF1dGgwLmNvbS91c2VyaW5mbyJdLCJpYXQiOjE3NzMwNjM0NDMsImV4cCI6MTc3MzE0OTg0Mywic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBlbWFpbCIsIm9yZ19pZCI6Im9yZ19TZmtkS1U0NkFmNnZGYzJaIiwiYXpwIjoiUHQ3b0c2aVBlMnZLMFpOVUVnUDVmSXRjeHYwTjB0RkQifQ.QRbppGV7qbJON2c9RJBjIe6546DFK_hZ63f4QVUl1kdA4fCppoLYDBKz4FgVZqDOGWHzTiBiPyNC1vWst0CezxGT1NkPklobk-U7RoNcwYmNUgLEIAu09QBeXoPJMUmtul7kj8pPBKSRtFpXM8gt9cOeWaoTWG-9iCgPYrOHYpf5D53AB1_gTRRCgxbDr9NLnzpkTH-gW8QZBhpg6tou2tO-50Z1G3d4jm9kHKV7Kr_KK4rCEty5lWk8yABDcxAKWpRxozbbwa-DXAXJMTn4Oyhz-B4d9oi4dAD3NA0baRK98t8_5wZjYnkomb3bPAqTDBxSSftofXMpx_KLEYX30A'

output: 500 Error: Internal Server Error { "detail": "<AioRpcError of RPC that terminated with:\n\tstatus = StatusCode.INTERNAL\n\tdetails = "Internal server error"\n\tdebug_error_string = "UNKNOWN:Error received from peer {grpc_status:13, grpc_message:"Internal server error"}"\n>" }

inspection-api log File "/app/app/inspection/router.py", line 184, in get_inspection

return _to_response(inspection, field_values, grade_result)

File "/app/app/inspection/router.py", line 566, in _to_response

return InspectionResponse(

id=inspection.id,

...<18 lines>...

grade_result=grade_result,

)

File "/app/.venv/lib/python3.14/site-packages/pydantic/main.py", line 250, in init

validated_self = self.pydantic_validator.validate_python(data, self_instance=self)

pydantic_core._pydantic_core.ValidationError: 1 validation error for InspectionResponse

field_values

Input should be a valid dictionary [type=dict_type, input_value=['a3fcdb74-8a6a-42c0-b80d-50ccb7cb00cb'], input_type=list]

For further information visit https://errors.pydantic.dev/2.12/v/dict_type

ERROR:uvicorn.error:Exception in ASGI application

Traceback (most recent call last):

File "/app/.venv/lib/python3.14/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi

result = await app( # type: ignore[func-returns-value]

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

self.scope, self.receive, self.send

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

)

^

File "/app/.venv/lib/python3.14/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in call

return await self.app(scope, receive, send)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/app/.venv/lib/python3.14/site-packages/fastapi/applications.py", line 1134, in call

await super().call(scope, receive, send)

File "/app/.venv/lib/python3.14/site-packages/starlette/applications.py", line 107, in call

await self.middleware_stack(scope, receive, send)

File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 186, in call

raise exc

File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 164, in call

await self.app(scope, receive, _send)

File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/exceptions.py", line 63, in call

await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)

File "/app/.venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app

raise exc

File "/app/.venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app

File-service 2026-03-09T18:46:34.271Z ERROR 1 --- [file-service] [ult-executor-16] c.e.f.e.GlobalGrpcExceptionHandler : Unexpected error in gRPC service

java.lang.NullPointerException: Cannot invoke "com.enmight.auth.TokenValidator$Claims.tenantId()" because "claims" is null

at com.enmight.file.services.FileServiceImpl.requestUpload(FileServiceImpl.java:67) ~[!/:0.0.1-SNAPSHOT]

at com.enmight.file.v1.services.FileServiceGrpc$MethodHandlers.invoke(FileServiceGrpc.java:582) ~[!/:0.0.1-SNAPSHOT]

at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182) ~[grpc-stub-1.66.0.jar!/:1.66.0]

at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35) ~[grpc-api-1.66.0.jar!/:1.66.0]

at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23) ~[grpc-api-1.66.0.jar!/:1.66.0]

at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:40) ~[grpc-api-1.66.0.jar!/:1.66.0]

at io.micrometer.core.instrument.binder.grpc.ObservationGrpcServerCallListener.lambda$onHalfClose$1(ObservationGrpcServerCallListener.java:47) ~[micrometer-core-1.16.2.jar!/:1.16.2]

at io.micrometer.observation.Observation.scoped(Observation.java:705) ~[micrometer-observation-1.16.2.jar!/:1.16.2]

at io.micrometer.core.instrument.binder.grpc.ObservationGrpcServerCallListener.onHalfClose(ObservationGrpcServerCallListener.java:47) ~[micrometer-core-1.16.2.jar!/:1.16.2]

at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35) ~[grpc-api-1.66.0.jar!/:1.66.0]

at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23) ~[grpc-api-1.66.0.jar!/:1.66.0]

at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:40) ~[grpc-api-1.66.0.jar!/:1.66.0]

at org.springframework.grpc.server.exception.GrpcExceptionHandlerInterceptor$ExceptionHandlerListener.onHalfClose(GrpcExceptionHandlerInterceptor.java:146) ~[spring-grpc-core-1.0.2.jar!/:1.0.2]

at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:356) ~[grpc-core-1.66.0.jar!/:1.66.0]

at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:861) ~[grpc-core-1.66.0.jar!/:1.66.0]

at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[grpc-core-1.66.0.jar!/:1.66.0]

at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[grpc-core-1.66.0.jar!/:1.66.0]

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[na:na]

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[na:na]

at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]