feat(server): redis, config kv integration
This commit is contained in:
+26
-7
@@ -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,
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user