user create wip
This commit is contained in:
46
api/package-lock.json
generated
46
api/package-lock.json
generated
@ -10,12 +10,15 @@
|
||||
"dependencies": {
|
||||
"cors": "^2.8.5",
|
||||
"express": "^4.18.1",
|
||||
"express-session": "^1.17.3"
|
||||
"express-session": "^1.17.3",
|
||||
"ip": "^1.1.8",
|
||||
"uuid": "^9.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/cors": "^2.8.12",
|
||||
"@types/express": "^4.17.14",
|
||||
"@types/express-session": "^1.17.5",
|
||||
"@types/ip": "^1.1.0",
|
||||
"@types/node": "^18.7.18",
|
||||
"ts-node": "^10.9.1",
|
||||
"ts-node-dev": "^2.0.0",
|
||||
@ -140,6 +143,15 @@
|
||||
"@types/express": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/ip": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/ip/-/ip-1.1.0.tgz",
|
||||
"integrity": "sha512-dwNe8gOoF70VdL6WJBwVHtQmAX4RMd62M+mAB9HQFjG1/qiCLM/meRy95Pd14FYBbEDwCq7jgJs89cHpLBu4HQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz",
|
||||
@ -726,6 +738,11 @@
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||
},
|
||||
"node_modules/ip": {
|
||||
"version": "1.1.8",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
|
||||
"integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg=="
|
||||
},
|
||||
"node_modules/ipaddr.js": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
||||
@ -1389,6 +1406,14 @@
|
||||
"node": ">= 0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/uuid": {
|
||||
"version": "9.0.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
|
||||
"integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
|
||||
"bin": {
|
||||
"uuid": "dist/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/v8-compile-cache-lib": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
|
||||
@ -1541,6 +1566,15 @@
|
||||
"@types/express": "*"
|
||||
}
|
||||
},
|
||||
"@types/ip": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/ip/-/ip-1.1.0.tgz",
|
||||
"integrity": "sha512-dwNe8gOoF70VdL6WJBwVHtQmAX4RMd62M+mAB9HQFjG1/qiCLM/meRy95Pd14FYBbEDwCq7jgJs89cHpLBu4HQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/mime": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz",
|
||||
@ -2004,6 +2038,11 @@
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||
},
|
||||
"ip": {
|
||||
"version": "1.1.8",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
|
||||
"integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg=="
|
||||
},
|
||||
"ipaddr.js": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
||||
@ -2457,6 +2496,11 @@
|
||||
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "9.0.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
|
||||
"integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg=="
|
||||
},
|
||||
"v8-compile-cache-lib": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
|
||||
|
@ -6,13 +6,14 @@
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"dev": "ts-node-dev --respawn --transpile-only ./src/index.ts",
|
||||
"start": "npm run build && node ./dist/index.js"
|
||||
"dev": "ts-node-dev --respawn --transpile-only ./src/app.ts",
|
||||
"start": "npm run build && node ./dist/app.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/cors": "^2.8.12",
|
||||
"@types/express": "^4.17.14",
|
||||
"@types/express-session": "^1.17.5",
|
||||
"@types/ip": "^1.1.0",
|
||||
"@types/node": "^18.7.18",
|
||||
"ts-node": "^10.9.1",
|
||||
"ts-node-dev": "^2.0.0",
|
||||
@ -21,6 +22,8 @@
|
||||
"dependencies": {
|
||||
"cors": "^2.8.5",
|
||||
"express": "^4.18.1",
|
||||
"express-session": "^1.17.3"
|
||||
"express-session": "^1.17.3",
|
||||
"ip": "^1.1.8",
|
||||
"uuid": "^9.0.0"
|
||||
}
|
||||
}
|
||||
|
16
api/src/app.ts
Normal file
16
api/src/app.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import Server, { Services } from './framework/express/server';
|
||||
import Mongo from './framework/mongo/mongo';
|
||||
import ip from "ip";
|
||||
|
||||
const PORT = 8000;
|
||||
const MONGOURI = "mongodb://localhost:27017";
|
||||
|
||||
const mongo = new Mongo(MONGOURI);
|
||||
|
||||
const services: Services = {
|
||||
db: mongo.getDb()
|
||||
}
|
||||
|
||||
const server = new Server(services);
|
||||
|
||||
server.start(PORT, () => console.log(`Running on http://${ip.address()}:${PORT}`));
|
9
api/src/framework/express/middleware.ts
Normal file
9
api/src/framework/express/middleware.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import { RequestHandler } from "express";
|
||||
import { randomUUID } from "crypto";
|
||||
|
||||
export function BeforeEach(): RequestHandler {
|
||||
return (req, res, next) => {
|
||||
req.headers["request-id"] = randomUUID();
|
||||
next();
|
||||
}
|
||||
}
|
11
api/src/framework/express/router.ts
Normal file
11
api/src/framework/express/router.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { Router } from "express";
|
||||
import { Services } from "./server";
|
||||
import * as user from "./user";
|
||||
|
||||
export function getRoutes(services: Services) {
|
||||
const router = Router();
|
||||
|
||||
router.use("/user", user.getRoutes(services));
|
||||
|
||||
return router;
|
||||
}
|
27
api/src/framework/express/server.ts
Normal file
27
api/src/framework/express/server.ts
Normal file
@ -0,0 +1,27 @@
|
||||
import express, { Express } from "express";
|
||||
import cors from 'cors';
|
||||
import * as router from './router';
|
||||
import { BeforeEach } from "./middleware";
|
||||
import { Db } from "mongodb";
|
||||
|
||||
export type Services = {
|
||||
db: Db;
|
||||
}
|
||||
|
||||
class Server {
|
||||
private app: Express;
|
||||
|
||||
constructor(services: Services) {
|
||||
this.app = express();
|
||||
this.app.use(express.json());
|
||||
this.app.use(cors());
|
||||
this.app.use(BeforeEach());
|
||||
this.app.use(router.getRoutes(services));
|
||||
}
|
||||
|
||||
start(port: number, func: () => void): void {
|
||||
this.app.listen(port, func);
|
||||
}
|
||||
}
|
||||
|
||||
export default Server;
|
30
api/src/framework/express/user.ts
Normal file
30
api/src/framework/express/user.ts
Normal file
@ -0,0 +1,30 @@
|
||||
import { RequestHandler, Router } from 'express';
|
||||
import { Create } from '../../functions/user';
|
||||
import { Services } from './server';
|
||||
|
||||
export function LoginHandler(services: Services): RequestHandler {
|
||||
return async (req, res) => {
|
||||
return res.send('Hey!\n');
|
||||
};
|
||||
}
|
||||
|
||||
export function CreateHandler(services: Services): RequestHandler {
|
||||
const createUser = Create(services);
|
||||
|
||||
return async (req, res) => {
|
||||
const user = await createUser(req.get("request-id"), req.body);
|
||||
|
||||
res.send(user);
|
||||
}
|
||||
}
|
||||
|
||||
export function getRoutes(services: Services) {
|
||||
const router = Router();
|
||||
|
||||
router.post('/login', LoginHandler(services));
|
||||
router.post('/create', CreateHandler(services));
|
||||
|
||||
return router;
|
||||
}
|
||||
|
||||
|
16
api/src/framework/mongo/mongo.ts
Normal file
16
api/src/framework/mongo/mongo.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import { MongoClient, Db } from "mongodb";
|
||||
|
||||
class Mongo {
|
||||
private client: MongoClient;
|
||||
private dbName: string;
|
||||
|
||||
constructor(uri: string) {
|
||||
this.client = new MongoClient(uri);
|
||||
}
|
||||
|
||||
getDb(): Db {
|
||||
return this.client.db(this.dbName);
|
||||
}
|
||||
}
|
||||
|
||||
export default Mongo;
|
14
api/src/framework/mongo/user.ts
Normal file
14
api/src/framework/mongo/user.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { CreateUserBody, User, UserInfo } from "@core";
|
||||
import { Services } from "../express/server";
|
||||
|
||||
export function Create(services: Services): (tracker: string, user: CreateUserBody) => Promise<UserInfo> {
|
||||
const { db } = services;
|
||||
const coll = db.collection("users");
|
||||
|
||||
return async (tracker, user) => {
|
||||
await coll.insertOne(user);
|
||||
return {
|
||||
name: "test"
|
||||
}
|
||||
}
|
||||
}
|
11
api/src/functions/user.ts
Normal file
11
api/src/functions/user.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { CreateUserBody, UserInfo } from "@core";
|
||||
import { Services } from "../framework/express/server";
|
||||
import * as mongo from "../framework/mongo/user";
|
||||
|
||||
export function Create(services: Services): (tracker: string, user: CreateUserBody) => Promise<UserInfo> {
|
||||
const createUser = mongo.Create(services);
|
||||
|
||||
return async (tracker, user) => {
|
||||
return createUser(tracker, user);
|
||||
}
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
import cors from 'cors';
|
||||
import express from 'express';
|
||||
|
||||
const app = express();
|
||||
app.use(express.json());
|
||||
app.use(cors());
|
||||
app.get('/', (req, res) => res.send('coucou ?\n'));
|
||||
|
||||
app.listen(8000, () => console.log('running...'));
|
Reference in New Issue
Block a user