import { Cron, Effect, Schedule } from "effect"
import { resetDatabase } from "../reset-database"
const cron = Cron.make({
seconds: [0],
minutes: [0, 10, 20, 30, 40, 50],
hours: [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],
days: [],
months: [],
weekdays: [1, 2, 3, 4, 5],
})
export const ScheduledReset = Effect.repeat(resetDatabase, Schedule.cron(cron))
/////
import { createServer } from "node:http"
import { HttpLayerRouter } from "@effect/platform"
import { NodeContext, NodeHttpServer, NodeRuntime } from "@effect/platform-node"
import { Effect, Layer } from "effect"
import { ScheduledReset } from "@central-reports/domain/features/scheduled-reset/index"
import { MssqlPoolLive } from "@central-reports/database/config/pool"
import { DatabaseLive } from "@central-reports/database/index"
import { RunMigrations } from "@central-reports/database/migrations/index"
import { KnackFake, KnackLive } from "@central-reports/knack"
import { ApiRouterLive } from "@/api"
import { StaticFilesRouterLive } from "./static"
const AllRouters = Layer.mergeAll(ApiRouterLive, StaticFilesRouterLive)
const ServerLive = HttpLayerRouter.serve(AllRouters).pipe(Layer.launch)
const setup = RunMigrations.pipe(Effect.provide(NodeContext.layer))
const app = Effect.gen(function* () {
if (process.env.AUTO_REFRESH !== "false") yield* Effect.fork(ScheduledReset)
yield* ServerLive
}).pipe(
Effect.provide(process.env["FAKE_DATA"] === "true" ? KnackFake : KnackLive),
Effect.provide(DatabaseLive),
Effect.provide(MssqlPoolLive),
Effect.provide(NodeHttpServer.layer(createServer, { port: 3001 })),
Effect.tapError(Effect.logError),
)
NodeRuntime.runMain(setup.pipe(Effect.andThen(app)))
import { Cron, Effect, Schedule } from "effect"
import { resetDatabase } from "../reset-database"
const cron = Cron.make({
seconds: [0],
minutes: [0, 10, 20, 30, 40, 50],
hours: [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],
days: [],
months: [],
weekdays: [1, 2, 3, 4, 5],
})
export const ScheduledReset = Effect.repeat(resetDatabase, Schedule.cron(cron))
/////
import { createServer } from "node:http"
import { HttpLayerRouter } from "@effect/platform"
import { NodeContext, NodeHttpServer, NodeRuntime } from "@effect/platform-node"
import { Effect, Layer } from "effect"
import { ScheduledReset } from "@central-reports/domain/features/scheduled-reset/index"
import { MssqlPoolLive } from "@central-reports/database/config/pool"
import { DatabaseLive } from "@central-reports/database/index"
import { RunMigrations } from "@central-reports/database/migrations/index"
import { KnackFake, KnackLive } from "@central-reports/knack"
import { ApiRouterLive } from "@/api"
import { StaticFilesRouterLive } from "./static"
const AllRouters = Layer.mergeAll(ApiRouterLive, StaticFilesRouterLive)
const ServerLive = HttpLayerRouter.serve(AllRouters).pipe(Layer.launch)
const setup = RunMigrations.pipe(Effect.provide(NodeContext.layer))
const app = Effect.gen(function* () {
if (process.env.AUTO_REFRESH !== "false") yield* Effect.fork(ScheduledReset)
yield* ServerLive
}).pipe(
Effect.provide(process.env["FAKE_DATA"] === "true" ? KnackFake : KnackLive),
Effect.provide(DatabaseLive),
Effect.provide(MssqlPoolLive),
Effect.provide(NodeHttpServer.layer(createServer, { port: 3001 })),
Effect.tapError(Effect.logError),
)
NodeRuntime.runMain(setup.pipe(Effect.andThen(app)))