chore(teacher-bff): merge teacher-bff full implementation into main

This commit is contained in:
SpecialX
2026-07-10 19:18:16 +08:00
37 changed files with 2588 additions and 467 deletions

194
pnpm-lock.yaml generated
View File

@@ -843,6 +843,18 @@ importers:
services/teacher-bff:
dependencies:
'@graphql-tools/schema':
specifier: ^10.0.6
version: 10.0.36(graphql@16.14.2)
'@graphql-tools/utils':
specifier: ^10.5.6
version: 10.11.0(graphql@16.14.2)
'@grpc/grpc-js':
specifier: ^1.12.0
version: 1.14.4
'@grpc/proto-loader':
specifier: ^0.7.13
version: 0.7.15
'@nestjs/common':
specifier: ^10.4.0
version: 10.4.22(reflect-metadata@0.2.2)(rxjs@7.8.2)
@@ -864,6 +876,15 @@ importers:
'@opentelemetry/sdk-node':
specifier: ^0.53.0
version: 0.53.0(@opentelemetry/api@1.9.1)
graphql:
specifier: ^16.9.0
version: 16.14.2
graphql-yoga:
specifier: ^5.7.0
version: 5.21.2(graphql@16.14.2)
ioredis:
specifier: ^5.4.1
version: 5.11.1
pino:
specifier: ^9.4.0
version: 9.14.0
@@ -1157,14 +1178,17 @@ packages:
resolution: {integrity: sha512-hjkrWvmVpCQiy2Km7LpVUmky8MbinNc2DzbpBaXSjgQYIXRK9LJ5BOfqldSBjp9E+U1I539LYAaSxxikQdXLLQ==}
engines: {node: '>=18'}
'@emnapi/core@1.11.1':
resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==}
'@envelop/core@5.5.1':
resolution: {integrity: sha512-3DQg8sFskDo386TkL5j12jyRAdip/8yzK3x7YGbZBgobZ4aKXrvDU0GppU0SnmrpQnNaiTUsxBs9LKkwQ/eyvw==}
engines: {node: '>=18.0.0'}
'@emnapi/runtime@1.11.1':
resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==}
'@envelop/instrumentation@1.0.0':
resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==}
engines: {node: '>=18.0.0'}
'@emnapi/wasi-threads@1.2.2':
resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
'@envelop/types@5.2.1':
resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==}
engines: {node: '>=18.0.0'}
'@esbuild-kit/core-utils@3.3.2':
resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
@@ -1776,10 +1800,6 @@ packages:
resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@fastify/busboy@2.1.1':
resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
engines: {node: '>=14'}
'@fastify/busboy@3.2.0':
resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==}
@@ -1822,13 +1842,6 @@ packages:
resolution: {integrity: sha512-Nv0BoDGLMg9QBKy9cIswQ3/6aKaKjlTh87x3GiBg2Z4RrjyrM48DvOOK0pJh1C1At+b0mUIM67cwZcFTDLN4sA==}
engines: {node: '>=18.0.0'}
'@graphql-yoga/plugin-response-cache@3.23.2':
resolution: {integrity: sha512-juMAA4I5gkKYRFr6uaAbNhi6smc9Y3He2CrtNIaZ2uFlpIbmwTVjeDFGTu4xq4RUUUswh/E8LU4JqJEyYnul2Q==}
engines: {node: '>=18.0.0'}
peerDependencies:
graphql: ^15.2.0 || ^16.0.0
graphql-yoga: ^5.21.2
'@graphql-yoga/subscription@5.0.5':
resolution: {integrity: sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==}
engines: {node: '>=18.0.0'}
@@ -3288,34 +3301,8 @@ packages:
'@protobufjs/utf8@1.1.2':
resolution: {integrity: sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==}
'@redis/bloom@1.2.0':
resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==}
peerDependencies:
'@redis/client': ^1.0.0
'@redis/client@1.6.1':
resolution: {integrity: sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==}
engines: {node: '>=14'}
'@redis/graph@1.1.1':
resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==}
peerDependencies:
'@redis/client': ^1.0.0
'@redis/json@1.0.7':
resolution: {integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==}
peerDependencies:
'@redis/client': ^1.0.0
'@redis/search@1.2.0':
resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==}
peerDependencies:
'@redis/client': ^1.0.0
'@redis/time-series@1.1.0':
resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==}
peerDependencies:
'@redis/client': ^1.0.0
'@repeaterjs/repeater@3.1.0':
resolution: {integrity: sha512-TaoVksZRSx2KWYYpyLQtMQXXeS98VsgZImzW65xmiVgbYhXLk+aEsmzPLirqVuE4/XuUapH2iMtxUzaBNDzdSQ==}
'@rollup/rollup-android-arm-eabi@4.62.2':
resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==}
@@ -4589,9 +4576,9 @@ packages:
typescript:
optional: true
cron-parser@4.9.0:
resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
engines: {node: '>=12.0.0'}
cross-inspect@1.0.1:
resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==}
engines: {node: '>=16.0.0'}
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
@@ -5413,10 +5400,15 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
grpc-reflection-js@0.3.0:
resolution: {integrity: sha512-3lhTlQluPxVgbowCXA3tAZC3RJW+GSOUkguLNYl1QffYRiutUB3RDfPkQFTcrCFJgNiIIxx+iJkr8s3uSp3zWA==}
graphql-yoga@5.21.2:
resolution: {integrity: sha512-IIRF/3xtjj2D6caAWL9177hQ8tV3mWB3hve1GRnz7njPhQ3iY1jFtSp98fNGv0yV9kaPh9kKQ8JWdJZnedVmDw==}
engines: {node: '>=18.0.0'}
peerDependencies:
'@grpc/grpc-js': ^1.0.0
graphql: ^15.2.0 || ^16.0.0
graphql@16.14.2:
resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@@ -7547,16 +7539,8 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
urql@4.2.2:
resolution: {integrity: sha512-3GgqNa6iF7bC4hY/ImJKN4REQILcSU9VKcKL8gfELZM8mM5BnLH1BsCc8kBdnVGD1LIFOs4W3O2idNHhON1r0w==}
peerDependencies:
'@urql/core': ^5.0.0
react: '>= 16.8.0'
use-sync-external-store@1.6.0:
resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
urlpattern-polyfill@10.1.0:
resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==}
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -8173,21 +8157,22 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@emnapi/core@1.11.1':
'@envelop/core@5.5.1':
dependencies:
'@emnapi/wasi-threads': 1.2.2
'@envelop/instrumentation': 1.0.0
'@envelop/types': 5.2.1
'@whatwg-node/promise-helpers': 1.3.2
tslib: 2.8.1
optional: true
'@emnapi/runtime@1.11.1':
'@envelop/instrumentation@1.0.0':
dependencies:
'@whatwg-node/promise-helpers': 1.3.2
tslib: 2.8.1
optional: true
'@emnapi/wasi-threads@1.2.2':
'@envelop/types@5.2.1':
dependencies:
'@whatwg-node/promise-helpers': 1.3.2
tslib: 2.8.1
optional: true
'@esbuild-kit/core-utils@3.3.2':
dependencies:
@@ -8532,8 +8517,6 @@ snapshots:
'@eslint/core': 0.17.0
levn: 0.4.1
'@fastify/busboy@2.1.1': {}
'@fastify/busboy@3.2.0': {}
'@graphql-tools/executor@1.5.5(graphql@16.14.2)':
@@ -8583,14 +8566,6 @@ snapshots:
dependencies:
tslib: 2.8.1
'@graphql-yoga/plugin-response-cache@3.23.2(graphql-yoga@5.21.2(graphql@16.14.2))(graphql@16.14.2)':
dependencies:
'@envelop/core': 5.5.1
'@envelop/response-cache': 9.1.1(@envelop/core@5.5.1)(graphql@16.14.2)
'@whatwg-node/promise-helpers': 1.3.2
graphql: 16.14.2
graphql-yoga: 5.21.2(graphql@16.14.2)
'@graphql-yoga/subscription@5.0.5':
dependencies:
'@graphql-yoga/typed-event-target': 3.0.2
@@ -10622,31 +10597,7 @@ snapshots:
'@protobufjs/utf8@1.1.2': {}
'@redis/bloom@1.2.0(@redis/client@1.6.1)':
dependencies:
'@redis/client': 1.6.1
'@redis/client@1.6.1':
dependencies:
cluster-key-slot: 1.1.2
generic-pool: 3.9.0
yallist: 4.0.0
'@redis/graph@1.1.1(@redis/client@1.6.1)':
dependencies:
'@redis/client': 1.6.1
'@redis/json@1.0.7(@redis/client@1.6.1)':
dependencies:
'@redis/client': 1.6.1
'@redis/search@1.2.0(@redis/client@1.6.1)':
dependencies:
'@redis/client': 1.6.1
'@redis/time-series@1.1.0(@redis/client@1.6.1)':
dependencies:
'@redis/client': 1.6.1
'@repeaterjs/repeater@3.1.0': {}
'@rollup/rollup-android-arm-eabi@4.62.2':
optional: true
@@ -11985,9 +11936,9 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
cron-parser@4.9.0:
cross-inspect@1.0.1:
dependencies:
luxon: 3.7.2
tslib: 2.8.1
cross-spawn@7.0.6:
dependencies:
@@ -12981,14 +12932,23 @@ snapshots:
graceful-fs@4.2.11: {}
grpc-reflection-js@0.3.0(@grpc/grpc-js@1.14.4):
graphql-yoga@5.21.2(graphql@16.14.2):
dependencies:
'@grpc/grpc-js': 1.14.4
'@types/google-protobuf': 3.15.12
'@types/lodash.set': 4.3.9
google-protobuf: 3.21.4
lodash.set: 4.3.2
protobufjs: 7.6.5
'@envelop/core': 5.5.1
'@envelop/instrumentation': 1.0.0
'@graphql-tools/executor': 1.5.5(graphql@16.14.2)
'@graphql-tools/schema': 10.0.36(graphql@16.14.2)
'@graphql-tools/utils': 10.11.0(graphql@16.14.2)
'@graphql-yoga/logger': 2.0.1
'@graphql-yoga/subscription': 5.0.5
'@whatwg-node/fetch': 0.10.13
'@whatwg-node/promise-helpers': 1.3.2
'@whatwg-node/server': 0.11.0
graphql: 16.14.2
lru-cache: 10.4.3
tslib: 2.8.1
graphql@16.14.2: {}
has-flag@4.0.0: {}
@@ -15239,15 +15199,7 @@ snapshots:
dependencies:
punycode: 2.3.1
urql@4.2.2(@urql/core@5.2.0(graphql@16.14.2))(react@18.3.1):
dependencies:
'@urql/core': 5.2.0(graphql@16.14.2)
react: 18.3.1
wonka: 6.3.6
use-sync-external-store@1.6.0(react@18.3.1):
dependencies:
react: 18.3.1
urlpattern-polyfill@10.1.0: {}
util-deprecate@1.0.2: {}