From 98e1f7ef0927cc0ea5e826f3d53399f37d13a03c Mon Sep 17 00:00:00 2001 From: legonzaur Date: Wed, 1 Mar 2023 20:25:30 +0100 Subject: [PATCH] working on openapi --- .vscode/settings.json | 1 - package-lock.json | 26 ++++++++++++++++++++ package.json | 1 + reference/OpenAPI.yml | 2 +- src/client.ts | 35 +++++++++++++++------------ src/db/db.ts | 19 +++++++++++---- src/db/model.ts | 56 +++++++++++++++++++++---------------------- src/index.ts | 13 +++++----- src/server.ts | 19 ++++++++++++--- 9 files changed, 114 insertions(+), 58 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 1dd0a21..7ece8b5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,6 @@ "source.fixAll": true }, "editor.formatOnSave": true, - "prettier.jsxSingleQuote": false, "typescript.preferences.quoteStyle": "single", "javascript.preferences.quoteStyle": "single", "prettier.singleQuote": true, diff --git a/package-lock.json b/package-lock.json index bcf9bac..9cda6e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "dependencies": { "dotenv": "^16.0.3", "express": "^4.18.2", + "express-validator": "^6.15.0", "kysely": "^0.23.4", "pg": "^8.9.0", "ts-node": "^10.9.1" @@ -4610,6 +4611,18 @@ "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": { "version": "3.1.3", "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" } }, + "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": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -7970,6 +7988,14 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "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": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/package.json b/package.json index 50cd264..3392435 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "dependencies": { "dotenv": "^16.0.3", "express": "^4.18.2", + "express-validator": "^6.15.0", "kysely": "^0.23.4", "pg": "^8.9.0", "ts-node": "^10.9.1" diff --git a/reference/OpenAPI.yml b/reference/OpenAPI.yml index 97e209e..b0497f5 100644 --- a/reference/OpenAPI.yml +++ b/reference/OpenAPI.yml @@ -5,7 +5,7 @@ info: title: OpenAPI version: '1.0' servers: - - url: 'https://api.server.test/v1' + - url: 'http://localhost:3000/v1' tags: - name: player description: Everything about players diff --git a/src/client.ts b/src/client.ts index c3a911d..5c8a689 100644 --- a/src/client.ts +++ b/src/client.ts @@ -1,16 +1,21 @@ -import { Router } from "express"; -const router = Router(); +import { Router } from 'express' +const router = Router() //timeout middleware ? -router.get("/*", (req, res, next) => { - next(); -}); -router.get("/client/:clientId/", (req, res, next) => { - res.send("get information about client number " + req.params.clientId); -}); -router.get("/server/:serverId/", (req, res, next) => { - res.send("get information about server number " + req.params.serverId); -}); -router.get("/weapon/:weaponId/", (req, res, next) => { - res.send("get information about weapon " + req.params.weaponId); -}); -export default router; +router.get('/*', (req, res, next) => { + next() +}) + +router.get('/weapons/', (req, res, next) => {}) + +router.get('/maps/', (req, res, next) => {}) + +router.get('/players', (req, res, next) => {}) +router.get('/players/:playerId', (req, res, next) => {}) + +router.get('/servers/', (req, res, next) => {}) +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 diff --git a/src/db/db.ts b/src/db/db.ts index 976bbc7..f1b194e 100644 --- a/src/db/db.ts +++ b/src/db/db.ts @@ -1,7 +1,7 @@ import { Kysely, PostgresDialect } from 'kysely' import { Pool } from 'pg' import migrateToLatest from './migrations' -import Database, { KillTable } from './model' +import Database from './model' const migration = migrateToLatest() // You'd create one of these when you start your app. @@ -17,6 +17,15 @@ const db = new Kysely({ }) }) +interface KillRecord { + server: string + attacker: number + victim: number + weapon: number + map: number + distance: number + date: Date +} export async function CreateKillRecord({ server, attacker, @@ -25,10 +34,10 @@ export async function CreateKillRecord({ map, distance, date -}: KillTable) { +}: KillRecord) { await db .insertInto('kill') - .values({ server, attacker, victim, weapon, map, distance, date }) + .values({ server, attacker, victim, weapon, map, distance }) .execute() } /* @@ -56,7 +65,9 @@ async function demo() { } } */ -export default async function ready(): Promise> { +export async function dbReady(): Promise> { await migration return db } + +export default db diff --git a/src/db/model.ts b/src/db/model.ts index eb037e1..0857e31 100644 --- a/src/db/model.ts +++ b/src/db/model.ts @@ -1,43 +1,43 @@ -import { Generated } from "kysely"; +import { ColumnType, Generated } from 'kysely' export interface KillTable { - id: Generated; - server: string; - attacker: number; - victim: number; - weapon: string; - map: string; - distance: number; - date: Date; + id: Generated + server: string + attacker: number + victim: number + weapon: string + map: string + distance: number + date: ColumnType } interface EntityTable { - id: number; - name: string; + id: number + name: string } interface WeaponTable { - id: string; - name: string; - description: string; - image: string; + id: string + name: string + description: string + image: string } interface MapTable { - id: string; - name: string; - description: string; - image: string; + id: string + name: string + description: string + image: string } interface ServerTable { - id: string; - name: string; - description: string; + id: string + name: string + description: string } interface Database { - kill: KillTable; - entity: EntityTable; - weapon: WeaponTable; - maps: MapTable; - server: ServerTable; + kill: KillTable + entity: EntityTable + weapon: WeaponTable + maps: MapTable + server: ServerTable } -export default Database; +export default Database diff --git a/src/index.ts b/src/index.ts index eaa1442..4f91515 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,11 +2,10 @@ import * as dotenv from 'dotenv' dotenv.config() import express from 'express' import client from './client' -import db from './db/db' +import { dbReady } from './db/db' import server from './server' console.log('dotenv') -console.log(db) const app = express() const port = 3000 @@ -15,9 +14,11 @@ app.get('/', (req, res) => { res.send('Hello World!') }) -app.use('/register', server) -app.use('/api', client) +app.use('/v1/', server) +app.use('/v1/', client) -app.listen(port, () => { - console.log(`Example app listening on port ${port}`) +dbReady().then((e) => { + app.listen(port, () => { + console.log(`Example app listening on port ${port}`) + }) }) diff --git a/src/server.ts b/src/server.ts index e6d506e..7204dc8 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,10 +1,23 @@ import { Router } from 'express' +import { CreateKillRecord } from './db/db' +import { body } from 'express-validator' const router = Router() + //auth middleware router.post('/*', (req, res, next) => { next() }) -router.post('/*', (req, res, next) => { - next() -}) +router.post( + '/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