Repository navigation
Expand file tree
/
Copy pathindex.ts
More file actions
51 lines (44 loc) · 1.83 KB
/
Copy pathindex.ts
File metadata and controls
51 lines (44 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import { App, getEnv } from "@elements/app";
import config from "#config";
import schedule from "#app/pages/schedule";
import account from "#app/pages/account";
import signin from "#app/pages/signin";
import studio from "#app/pages/studio";
import studioClass from "#app/pages/studio-class";
import studioMembers from "#app/pages/studio-members";
import studioCatalog from "#app/pages/studio-catalog";
import signup from "#app/pages/signup";
import checkoutTest from "#app/pages/checkout-test";
import checkoutReturn from "#app/routes/checkout-return";
import stripeWebhook from "#app/routes/stripe-webhook";
import notFound from "#app/pages/errors/not-found";
import unhandled from "#app/pages/errors/unhandled";
import { SendClassRemindersJob } from "#app/jobs/send-class-reminders";
import { stripeConfigured } from "#app/shared/stripe";
if (getEnv() === "production" && !stripeConfigured()) {
throw new Error("STRIPE_SECRET_KEY is required in production.");
}
const app = new App();
app.route("/", schedule);
app.route("/account", account);
app.route("/signin", signin);
app.route("/studio", studio);
app.route("/studio/classes/:id", studioClass);
app.route("/studio/members", studioMembers);
app.route("/studio/catalog", studioCatalog);
app.route("/signup", signup);
app.route("/checkout/test/:product", checkoutTest);
app.route("/checkout/return", checkoutReturn);
app.route({ method: "post", path: "/stripe/webhook", handler: stripeWebhook });
// Reminders go out two hours before class; the job marks each booking as it
// queues the email, so overlapping ticks never send twice.
app.cron("every 5m", "class reminders", () => new SendClassRemindersJob().schedule());
app.error((req, res, err) => {
switch (err.statusCode) {
case 404:
return notFound(req, res, err);
default:
return unhandled(req, res, err);
}
});
app.start(config);