feat(server): redis, config kv integration

This commit is contained in:
RainbowBird
2026-03-28 02:25:44 +08:00
committed by RainbowBird
parent 391fdd542a
commit 889a1e0800
9 changed files with 90 additions and 18 deletions
+26 -7
View File
@@ -14,7 +14,7 @@ import { createLoggLogger, injeca, lifecycle } from 'injeca'
import { createAuth } from './libs/auth'
import { createDrizzle, migrateDatabase } from './libs/db'
import { parsedEnv } from './libs/env'
import { initOtel } from './libs/otel'
import { createRedis } from './libs/redis'
import { sessionMiddleware } from './middlewares/auth'
import { otelMiddleware } from './middlewares/otel'
import { createCharacterRoutes } from './routes/characters'
@@ -25,6 +25,7 @@ import { createStripeRoutes } from './routes/stripe'
import { createV1CompletionsRoutes } from './routes/v1completions'
import { createCharacterService } from './services/characters'
import { createChatService } from './services/chats'
import { createConfigKVService } from './services/config-kv'
import { createFluxService } from './services/flux'
import { createProviderService } from './services/providers'
import { ApiError, createInternalError } from './utils/error'
@@ -35,6 +36,7 @@ type CharacterService = ReturnType<typeof createCharacterService>
type ChatService = ReturnType<typeof createChatService>
type ProviderService = ReturnType<typeof createProviderService>
type FluxService = ReturnType<typeof createFluxService>
type ConfigKVService = ReturnType<typeof createConfigKVService>
type OtelMetrics = ReturnType<typeof initOtel>
@@ -44,10 +46,11 @@ interface AppDeps {
chatService: ChatService
providerService: ProviderService
fluxService: FluxService
configKV: ConfigKVService
env: Env
}
function buildApp({ auth, characterService, chatService, providerService, fluxService, env }: AppDeps) {
function buildApp({ auth, characterService, chatService, providerService, fluxService, configKV, env }: AppDeps) {
const logger = useLogger('app').useGlobalConfig()
const app = new Hono<HonoEnv>()
@@ -115,7 +118,7 @@ function buildApp({ auth, characterService, chatService, providerService, fluxSe
/**
* V1 routes for official provider.
*/
.route('/v1', createV1CompletionsRoutes(fluxService, env))
.route('/v1', createV1CompletionsRoutes(fluxService, configKV, env))
/**
* Flux routes.
@@ -125,7 +128,7 @@ function buildApp({ auth, characterService, chatService, providerService, fluxSe
/**
* Stripe routes.
*/
.route('/api/stripe', createStripeRoutes(fluxService, env))
.route('/api/stripe', createStripeRoutes(fluxService, configKV, env))
}
export type AppType = ReturnType<typeof buildApp>
@@ -181,19 +184,35 @@ async function createApp() {
build: ({ dependsOn }) => createChatService(dependsOn.db),
})
const redis = injeca.provide('services:redis', {
dependsOn: { env: parsedEnv },
build: async ({ dependsOn }) => {
const redisInstance = createRedis(dependsOn.env.REDIS_URL)
await redisInstance.connect()
logger.log('Connected to Redis')
return redisInstance
},
})
const configKV = injeca.provide('services:configKV', {
dependsOn: { redis },
build: ({ dependsOn }) => createConfigKVService(dependsOn.redis),
})
const fluxService = injeca.provide('services:flux', {
dependsOn: { db },
build: ({ dependsOn }) => createFluxService(dependsOn.db),
dependsOn: { db, configKV },
build: ({ dependsOn }) => createFluxService(dependsOn.db, dependsOn.configKV),
})
await injeca.start()
const resolved = await injeca.resolve({ auth, characterService, chatService, providerService, fluxService, env: parsedEnv })
const resolved = await injeca.resolve({ auth, characterService, chatService, providerService, fluxService, configKV, env: parsedEnv })
const app = buildApp({
auth: resolved.auth,
characterService: resolved.characterService,
chatService: resolved.chatService,
providerService: resolved.providerService,
fluxService: resolved.fluxService,
configKV: resolved.configKV,
env: resolved.env,
})