39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
import type { Router } from 'express'
|
|
import type { ServiceContainer } from '../../infra/container.js'
|
|
import { createApiModule } from '../../infra/createModule.js'
|
|
import { TIME_TRACKING_MODULE } from '../../../shared/modules/time-tracking/index.js'
|
|
import {
|
|
TimeTrackerService,
|
|
initializeTimeTrackerService,
|
|
type TimeTrackerServiceConfig
|
|
} from './timeService.js'
|
|
import { createTimeTrackingRoutes } from './routes.js'
|
|
|
|
export * from './timeService.js'
|
|
export * from './heartbeatService.js'
|
|
export * from './sessionPersistence.js'
|
|
export * from './routes.js'
|
|
|
|
export interface TimeTrackingModuleConfig {
|
|
config?: TimeTrackerServiceConfig
|
|
}
|
|
|
|
export const createTimeTrackingModule = (moduleConfig: TimeTrackingModuleConfig = {}) => {
|
|
let serviceInstance: TimeTrackerService | undefined
|
|
|
|
return createApiModule(TIME_TRACKING_MODULE, {
|
|
routes: (container: ServiceContainer): Router => {
|
|
const timeTrackerService = container.getSync<TimeTrackerService>('timeTrackerService')
|
|
return createTimeTrackingRoutes({ timeTrackerService })
|
|
},
|
|
lifecycle: {
|
|
onLoad: async (container: ServiceContainer): Promise<void> => {
|
|
serviceInstance = await initializeTimeTrackerService(moduleConfig.config)
|
|
container.register('timeTrackerService', () => serviceInstance!)
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
export default createTimeTrackingModule
|