From 7f411a004a89bdc7d96ab2337b51debcbc844276 Mon Sep 17 00:00:00 2001 From: osmannyildiz Date: Sat, 18 May 2024 14:00:25 +0300 Subject: [PATCH] add mongodb --- backend/api_entrypoint.ts | 13 ++ backend/index.ts | 6 - backend/package.json | 8 +- backend/pnpm-lock.yaml | 147 ++++++++++++++++++- backend/src/{app => api}/controllers/test.ts | 0 backend/src/{app => api}/index.ts | 8 +- backend/src/{app => api}/routes/test.ts | 0 backend/src/config.ts | 7 +- backend/src/db/index.ts | 11 ++ 9 files changed, 177 insertions(+), 23 deletions(-) create mode 100644 backend/api_entrypoint.ts delete mode 100644 backend/index.ts rename backend/src/{app => api}/controllers/test.ts (100%) rename backend/src/{app => api}/index.ts (55%) rename backend/src/{app => api}/routes/test.ts (100%) create mode 100644 backend/src/db/index.ts diff --git a/backend/api_entrypoint.ts b/backend/api_entrypoint.ts new file mode 100644 index 0000000..0fe29e9 --- /dev/null +++ b/backend/api_entrypoint.ts @@ -0,0 +1,13 @@ +import { api } from "./src/api"; +import { CONFIG } from "./src/config"; +import { connectToDb } from "./src/db"; + +async function bootstrap() { + await connectToDb(); + + api.listen(CONFIG.API_PORT, () => + console.log(`⚙️ Listening on :${CONFIG.API_PORT}`) + ); +} + +bootstrap(); diff --git a/backend/index.ts b/backend/index.ts deleted file mode 100644 index e7b0005..0000000 --- a/backend/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { app } from "./src/app"; -import { CONFIG } from "./src/config"; - -app.listen(CONFIG.API_PORT, () => - console.log(`Listening on :${CONFIG.API_PORT}`) -); diff --git a/backend/package.json b/backend/package.json index ae4c01a..984e5be 100644 --- a/backend/package.json +++ b/backend/package.json @@ -4,16 +4,16 @@ "description": "", "main": "index.ts", "scripts": { - "dev": "nodemon index.ts", - "start": "ts-node index.ts", - "build": "echo 'to be implemented'" + "api:dev": "nodemon api_entrypoint.ts", + "api:prod": "ts-node api_entrypoint.ts" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "cors": "^2.8.5", - "express": "^4.19.2" + "express": "^4.19.2", + "mongoose": "^8.4.0" }, "devDependencies": { "@types/cors": "^2.8.17", diff --git a/backend/pnpm-lock.yaml b/backend/pnpm-lock.yaml index 17e0417..cc36c34 100644 --- a/backend/pnpm-lock.yaml +++ b/backend/pnpm-lock.yaml @@ -11,6 +11,9 @@ dependencies: express: specifier: ^4.19.2 version: 4.19.2 + mongoose: + specifier: ^8.4.0 + version: 8.4.0 devDependencies: '@types/cors': @@ -57,6 +60,12 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@mongodb-js/saslprep@1.1.7: + resolution: {integrity: sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==} + dependencies: + sparse-bitfield: 3.0.3 + dev: false + /@tsconfig/node10@1.0.11: resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} dev: true @@ -147,6 +156,16 @@ packages: '@types/send': 0.17.4 dev: true + /@types/webidl-conversions@7.0.3: + resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} + dev: false + + /@types/whatwg-url@11.0.4: + resolution: {integrity: sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==} + dependencies: + '@types/webidl-conversions': 7.0.3 + dev: false + /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true @@ -229,6 +248,11 @@ packages: fill-range: 7.0.1 dev: true + /bson@6.7.0: + resolution: {integrity: sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==} + engines: {node: '>=16.20.1'} + dev: false + /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -319,7 +343,6 @@ packages: dependencies: ms: 2.1.2 supports-color: 5.5.0 - dev: true /define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} @@ -485,7 +508,6 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - dev: true /has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -565,6 +587,11 @@ packages: engines: {node: '>=0.12.0'} dev: true + /kareem@2.6.3: + resolution: {integrity: sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==} + engines: {node: '>=12.0.0'} + dev: false + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true @@ -574,6 +601,10 @@ packages: engines: {node: '>= 0.6'} dev: false + /memory-pager@1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + dev: false + /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: false @@ -607,13 +638,87 @@ packages: brace-expansion: 1.1.11 dev: true + /mongodb-connection-string-url@3.0.1: + resolution: {integrity: sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==} + dependencies: + '@types/whatwg-url': 11.0.4 + whatwg-url: 13.0.0 + dev: false + + /mongodb@6.6.2: + resolution: {integrity: sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==} + engines: {node: '>=16.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.1.0 + gcp-metadata: ^5.2.0 + kerberos: ^2.0.1 + mongodb-client-encryption: '>=6.0.0 <7' + snappy: ^7.2.2 + socks: ^2.7.1 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + dependencies: + '@mongodb-js/saslprep': 1.1.7 + bson: 6.7.0 + mongodb-connection-string-url: 3.0.1 + dev: false + + /mongoose@8.4.0: + resolution: {integrity: sha512-fgqRMwVEP1qgRYfh+tUe2YBBFnPO35FIg2lfFH+w9IhRGg1/ataWGIqvf/MjwM29cZ60D5vSnqtN2b8Qp0sOZA==} + engines: {node: '>=16.20.1'} + dependencies: + bson: 6.7.0 + kareem: 2.6.3 + mongodb: 6.6.2 + mpath: 0.9.0 + mquery: 5.0.0 + ms: 2.1.3 + sift: 17.1.3 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - gcp-metadata + - kerberos + - mongodb-client-encryption + - snappy + - socks + - supports-color + dev: false + + /mpath@0.9.0: + resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} + engines: {node: '>=4.0.0'} + dev: false + + /mquery@5.0.0: + resolution: {integrity: sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==} + engines: {node: '>=14.0.0'} + dependencies: + debug: 4.3.4(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + dev: false + /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: false /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -695,6 +800,11 @@ packages: resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} dev: true + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: false + /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} @@ -797,6 +907,10 @@ packages: object-inspect: 1.13.1 dev: false + /sift@17.1.3: + resolution: {integrity: sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==} + dev: false + /simple-update-notifier@2.0.0: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} @@ -804,6 +918,12 @@ packages: semver: 7.6.2 dev: true + /sparse-bitfield@3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + dependencies: + memory-pager: 1.5.0 + dev: false + /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -814,7 +934,6 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 - dev: true /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -835,6 +954,13 @@ packages: nopt: 1.0.10 dev: true + /tr46@4.1.1: + resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} + engines: {node: '>=14'} + dependencies: + punycode: 2.3.1 + dev: false + /ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true @@ -907,6 +1033,19 @@ packages: engines: {node: '>= 0.8'} dev: false + /webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + dev: false + + /whatwg-url@13.0.0: + resolution: {integrity: sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==} + engines: {node: '>=16'} + dependencies: + tr46: 4.1.1 + webidl-conversions: 7.0.0 + dev: false + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} diff --git a/backend/src/app/controllers/test.ts b/backend/src/api/controllers/test.ts similarity index 100% rename from backend/src/app/controllers/test.ts rename to backend/src/api/controllers/test.ts diff --git a/backend/src/app/index.ts b/backend/src/api/index.ts similarity index 55% rename from backend/src/app/index.ts rename to backend/src/api/index.ts index d0f5322..16d6ec3 100644 --- a/backend/src/app/index.ts +++ b/backend/src/api/index.ts @@ -2,11 +2,11 @@ import cors from "cors"; import express from "express"; import { testRouter } from "./routes/test"; -export const app = express(); +export const api = express(); // Middleware -app.use(cors()); -app.use(express.json()); +api.use(cors()); +api.use(express.json()); // Routes -app.use("/test", testRouter); +api.use("/test", testRouter); diff --git a/backend/src/app/routes/test.ts b/backend/src/api/routes/test.ts similarity index 100% rename from backend/src/app/routes/test.ts rename to backend/src/api/routes/test.ts diff --git a/backend/src/config.ts b/backend/src/config.ts index 2b6de48..b762b65 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -2,9 +2,6 @@ import { SECRETS } from "./secrets"; export const CONFIG = { API_PORT: 7231, - DB_HOST: SECRETS.DB_HOST, - DB_PORT: SECRETS.DB_PORT, - DB_USERNAME: SECRETS.DB_USERNAME, - DB_PASSWORD: SECRETS.DB_PASSWORD, - DB_NAME: "osipad", + MONGODB_URI: SECRETS.MONGODB_URI, + MONGODB_DB_NAME: "osipad", }; diff --git a/backend/src/db/index.ts b/backend/src/db/index.ts new file mode 100644 index 0000000..369d6d4 --- /dev/null +++ b/backend/src/db/index.ts @@ -0,0 +1,11 @@ +import mongoose from "mongoose"; +import { CONFIG } from "../config"; + +export async function connectToDb() { + try { + await mongoose.connect(CONFIG.MONGODB_URI); + console.log("✅ Connected to MongoDB."); + } catch (error) { + console.error("❌ Couldn't connect to MongoDB.", error); + } +}