Use Fastify Mercurius and GraphQL contracts
Some checks are pending
Build Docker Image / build (push) Waiting to run
Some checks are pending
Build Docker Image / build (push) Waiting to run
This commit is contained in:
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "graphql-contracts"]
|
||||||
|
path = graphql-contracts
|
||||||
|
url = git@gitea.dsrptlab.com:optovia/exchange-graphql-contracts.git
|
||||||
1
graphql-contracts
Submodule
1
graphql-contracts
Submodule
Submodule graphql-contracts added at d2dea0a67e
2420
package-lock.json
generated
2420
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -9,19 +9,16 @@
|
|||||||
"start": "prisma migrate deploy && node dist/index.js"
|
"start": "prisma migrate deploy && node dist/index.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@apollo/server": "^5.5.1",
|
"@fastify/cors": "^11.2.0",
|
||||||
"@as-integrations/express5": "^1.1.2",
|
|
||||||
"@prisma/adapter-pg": "^7.8.0",
|
"@prisma/adapter-pg": "^7.8.0",
|
||||||
"@prisma/client": "^7.8.0",
|
"@prisma/client": "^7.8.0",
|
||||||
"@sentry/node": "^10.55.0",
|
"@sentry/node": "^10.55.0",
|
||||||
"cors": "^2.8.6",
|
"fastify": "^5.8.5",
|
||||||
"express": "^5.2.1",
|
|
||||||
"graphql": "^16.14.0",
|
"graphql": "^16.14.0",
|
||||||
|
"mercurius": "^16.9.0",
|
||||||
"pg": "^8.21.0"
|
"pg": "^8.21.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/cors": "^2.8.19",
|
|
||||||
"@types/express": "^5.0.6",
|
|
||||||
"@types/node": "^25.9.1",
|
"@types/node": "^25.9.1",
|
||||||
"@types/pg": "^8.20.0",
|
"@types/pg": "^8.20.0",
|
||||||
"prisma": "^7.8.0",
|
"prisma": "^7.8.0",
|
||||||
|
|||||||
54
src/index.ts
54
src/index.ts
@@ -1,36 +1,38 @@
|
|||||||
import express from 'express'
|
import Fastify from "fastify";
|
||||||
import cors from 'cors'
|
import cors from "@fastify/cors";
|
||||||
import { ApolloServer } from '@apollo/server'
|
import mercurius from "mercurius";
|
||||||
import { expressMiddleware } from '@as-integrations/express5'
|
import * as Sentry from "@sentry/node";
|
||||||
import * as Sentry from '@sentry/node'
|
import { resolvers, typeDefs } from "./schema.js";
|
||||||
import { resolvers, typeDefs } from './schema.js'
|
|
||||||
|
|
||||||
const PORT = Number.parseInt(process.env.PORT || '8000', 10)
|
const PORT = Number.parseInt(process.env.PORT || "8000", 10);
|
||||||
const SENTRY_DSN = process.env.SENTRY_DSN || ''
|
const SENTRY_DSN = process.env.SENTRY_DSN || "";
|
||||||
const corsOrigins = (process.env.CORS_ORIGINS || 'https://optovia.ru,https://app.optovia.ru')
|
const corsOrigins = (
|
||||||
.split(',')
|
process.env.CORS_ORIGINS || "https://optovia.ru,https://app.optovia.ru"
|
||||||
.map(origin => origin.trim())
|
)
|
||||||
.filter(origin => origin.length > 0)
|
.split(",")
|
||||||
|
.map((origin) => origin.trim())
|
||||||
|
.filter((origin) => origin.length > 0);
|
||||||
|
|
||||||
if (SENTRY_DSN) {
|
if (SENTRY_DSN) {
|
||||||
Sentry.init({
|
Sentry.init({
|
||||||
dsn: SENTRY_DSN,
|
dsn: SENTRY_DSN,
|
||||||
tracesSampleRate: 0.01,
|
tracesSampleRate: 0.01,
|
||||||
release: process.env.RELEASE_VERSION || '1.0.0',
|
release: process.env.RELEASE_VERSION || "1.0.0",
|
||||||
environment: process.env.ENVIRONMENT || 'production',
|
environment: process.env.ENVIRONMENT || "production",
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const app = express()
|
const app = Fastify();
|
||||||
app.use(cors({ origin: corsOrigins, credentials: true }))
|
await app.register(cors, { origin: corsOrigins, credentials: true });
|
||||||
|
await app.register(mercurius, {
|
||||||
|
schema: typeDefs,
|
||||||
|
resolvers,
|
||||||
|
path: "/graphql",
|
||||||
|
graphiql: true,
|
||||||
|
});
|
||||||
|
|
||||||
const server = new ApolloServer({ typeDefs, resolvers, introspection: true })
|
app.get("/health", async () => ({ status: "ok", service: "exchange" }));
|
||||||
await server.start()
|
|
||||||
|
|
||||||
app.use('/graphql', express.json(), expressMiddleware(server))
|
await app.listen({ port: PORT, host: "0.0.0.0" });
|
||||||
app.get('/health', (_, res) => { res.json({ status: 'ok', service: 'exchange' }) })
|
console.log(`Exchange server ready on port ${PORT}`);
|
||||||
|
console.log(" /graphql - suppliers, products, quotes");
|
||||||
app.listen(PORT, '0.0.0.0', () => {
|
|
||||||
console.log(`Exchange server ready on port ${PORT}`)
|
|
||||||
console.log(' /graphql - suppliers, products, quotes')
|
|
||||||
})
|
|
||||||
|
|||||||
Reference in New Issue
Block a user