working on openapi

This commit is contained in:
2023-03-01 20:25:30 +01:00
parent 5065a4b2fb
commit 98e1f7ef09
9 changed files with 114 additions and 58 deletions
-1
View File
@@ -3,7 +3,6 @@
"source.fixAll": true "source.fixAll": true
}, },
"editor.formatOnSave": true, "editor.formatOnSave": true,
"prettier.jsxSingleQuote": false,
"typescript.preferences.quoteStyle": "single", "typescript.preferences.quoteStyle": "single",
"javascript.preferences.quoteStyle": "single", "javascript.preferences.quoteStyle": "single",
"prettier.singleQuote": true, "prettier.singleQuote": true,
+26
View File
@@ -7,6 +7,7 @@
"dependencies": { "dependencies": {
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
"express": "^4.18.2", "express": "^4.18.2",
"express-validator": "^6.15.0",
"kysely": "^0.23.4", "kysely": "^0.23.4",
"pg": "^8.9.0", "pg": "^8.9.0",
"ts-node": "^10.9.1" "ts-node": "^10.9.1"
@@ -4610,6 +4611,18 @@
"node": ">= 0.10.0" "node": ">= 0.10.0"
} }
}, },
"node_modules/express-validator": {
"version": "6.15.0",
"resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.15.0.tgz",
"integrity": "sha512-r05VYoBL3i2pswuehoFSy+uM8NBuVaY7avp5qrYjQBDzagx2Z5A77FZqPT8/gNLF3HopWkIzaTFaC4JysWXLqg==",
"dependencies": {
"lodash": "^4.17.21",
"validator": "^13.9.0"
},
"engines": {
"node": ">= 8.0.0"
}
},
"node_modules/fast-deep-equal": { "node_modules/fast-deep-equal": {
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -6284,6 +6297,11 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"node_modules/lodash.debounce": { "node_modules/lodash.debounce": {
"version": "4.0.8", "version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@@ -7970,6 +7988,14 @@
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
"dev": true "dev": true
}, },
"node_modules/validator": {
"version": "13.9.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz",
"integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/vary": { "node_modules/vary": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+1
View File
@@ -2,6 +2,7 @@
"dependencies": { "dependencies": {
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
"express": "^4.18.2", "express": "^4.18.2",
"express-validator": "^6.15.0",
"kysely": "^0.23.4", "kysely": "^0.23.4",
"pg": "^8.9.0", "pg": "^8.9.0",
"ts-node": "^10.9.1" "ts-node": "^10.9.1"
+1 -1
View File
@@ -5,7 +5,7 @@ info:
title: OpenAPI title: OpenAPI
version: '1.0' version: '1.0'
servers: servers:
- url: 'https://api.server.test/v1' - url: 'http://localhost:3000/v1'
tags: tags:
- name: player - name: player
description: Everything about players description: Everything about players
+20 -15
View File
@@ -1,16 +1,21 @@
import { Router } from "express"; import { Router } from 'express'
const router = Router(); const router = Router()
//timeout middleware ? //timeout middleware ?
router.get("/*", (req, res, next) => { router.get('/*', (req, res, next) => {
next(); next()
}); })
router.get("/client/:clientId/", (req, res, next) => {
res.send("get information about client number " + req.params.clientId); router.get('/weapons/', (req, res, next) => {})
});
router.get("/server/:serverId/", (req, res, next) => { router.get('/maps/', (req, res, next) => {})
res.send("get information about server number " + req.params.serverId);
}); router.get('/players', (req, res, next) => {})
router.get("/weapon/:weaponId/", (req, res, next) => { router.get('/players/:playerId', (req, res, next) => {})
res.send("get information about weapon " + req.params.weaponId);
}); router.get('/servers/', (req, res, next) => {})
export default router; router.get('/servers/:serverId/', (req, res, next) => {})
router.get('/servers/:serverId/players', (req, res, next) => {})
router.get('/servers/:serverId/players/:playerId', (req, res, next) => {})
router.get('/servers/:serverId/weapons', (req, res, next) => {})
export default router
+15 -4
View File
@@ -1,7 +1,7 @@
import { Kysely, PostgresDialect } from 'kysely' import { Kysely, PostgresDialect } from 'kysely'
import { Pool } from 'pg' import { Pool } from 'pg'
import migrateToLatest from './migrations' import migrateToLatest from './migrations'
import Database, { KillTable } from './model' import Database from './model'
const migration = migrateToLatest() const migration = migrateToLatest()
// You'd create one of these when you start your app. // You'd create one of these when you start your app.
@@ -17,6 +17,15 @@ const db = new Kysely<Database>({
}) })
}) })
interface KillRecord {
server: string
attacker: number
victim: number
weapon: number
map: number
distance: number
date: Date
}
export async function CreateKillRecord({ export async function CreateKillRecord({
server, server,
attacker, attacker,
@@ -25,10 +34,10 @@ export async function CreateKillRecord({
map, map,
distance, distance,
date date
}: KillTable) { }: KillRecord) {
await db await db
.insertInto('kill') .insertInto('kill')
.values({ server, attacker, victim, weapon, map, distance, date }) .values({ server, attacker, victim, weapon, map, distance })
.execute() .execute()
} }
/* /*
@@ -56,7 +65,9 @@ async function demo() {
} }
} }
*/ */
export default async function ready(): Promise<Kysely<Database>> { export async function dbReady(): Promise<Kysely<Database>> {
await migration await migration
return db return db
} }
export default db
+28 -28
View File
@@ -1,43 +1,43 @@
import { Generated } from "kysely"; import { ColumnType, Generated } from 'kysely'
export interface KillTable { export interface KillTable {
id: Generated<number>; id: Generated<number>
server: string; server: string
attacker: number; attacker: number
victim: number; victim: number
weapon: string; weapon: string
map: string; map: string
distance: number; distance: number
date: Date; date: ColumnType<Date, string | Date | undefined, never>
} }
interface EntityTable { interface EntityTable {
id: number; id: number
name: string; name: string
} }
interface WeaponTable { interface WeaponTable {
id: string; id: string
name: string; name: string
description: string; description: string
image: string; image: string
} }
interface MapTable { interface MapTable {
id: string; id: string
name: string; name: string
description: string; description: string
image: string; image: string
} }
interface ServerTable { interface ServerTable {
id: string; id: string
name: string; name: string
description: string; description: string
} }
interface Database { interface Database {
kill: KillTable; kill: KillTable
entity: EntityTable; entity: EntityTable
weapon: WeaponTable; weapon: WeaponTable
maps: MapTable; maps: MapTable
server: ServerTable; server: ServerTable
} }
export default Database; export default Database
+7 -6
View File
@@ -2,11 +2,10 @@ import * as dotenv from 'dotenv'
dotenv.config() dotenv.config()
import express from 'express' import express from 'express'
import client from './client' import client from './client'
import db from './db/db' import { dbReady } from './db/db'
import server from './server' import server from './server'
console.log('dotenv') console.log('dotenv')
console.log(db)
const app = express() const app = express()
const port = 3000 const port = 3000
@@ -15,9 +14,11 @@ app.get('/', (req, res) => {
res.send('Hello World!') res.send('Hello World!')
}) })
app.use('/register', server) app.use('/v1/', server)
app.use('/api', client) app.use('/v1/', client)
app.listen(port, () => { dbReady().then((e) => {
console.log(`Example app listening on port ${port}`) app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
}) })
+16 -3
View File
@@ -1,10 +1,23 @@
import { Router } from 'express' import { Router } from 'express'
import { CreateKillRecord } from './db/db'
import { body } from 'express-validator'
const router = Router() const router = Router()
//auth middleware //auth middleware
router.post('/*', (req, res, next) => { router.post('/*', (req, res, next) => {
next() next()
}) })
router.post('/*', (req, res, next) => { router.post(
next() '/severs/:serverId/kills',
}) body('server').isString(),
body('attacker').isInt(),
body('victim').isInt(),
body('weapon').isString(),
body('map').isString(),
body('distance').isInt(),
(req, res, next) => {
//CreateKillRecord({ server, attacker, victim, weapon, map, distance })
res.send(400)
}
)
export default router export default router