server mounts
This commit is contained in:
14
server/db/index.js
Normal file
14
server/db/index.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
const { Pool } = require("pg");
|
||||||
|
require('dotenv').config();
|
||||||
|
|
||||||
|
const constring = process.env.constring;
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
if (!constring) {
|
||||||
|
throw new Error("Did not find connection string for database");
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Pool({ connectionString: constring })
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = main();
|
||||||
14
server/db/pgSessionStore.js
Normal file
14
server/db/pgSessionStore.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
const connectPgSimple = require('connect-pg-simple');
|
||||||
|
const pool = require('.');
|
||||||
|
|
||||||
|
function pgSessionStore(s) {
|
||||||
|
const pgSession = connectPgSimple(s)
|
||||||
|
|
||||||
|
return new pgSession({
|
||||||
|
pool: pool,
|
||||||
|
tableName: "pgsessions",
|
||||||
|
createTableIfMissing: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = pgSessionStore;
|
||||||
29
server/db/seed.js
Normal file
29
server/db/seed.js
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const pool = require('.');
|
||||||
|
|
||||||
|
require('dotenv').config();
|
||||||
|
|
||||||
|
const root = path.resolve(__dirname);
|
||||||
|
|
||||||
|
async function seed() {
|
||||||
|
console.clear();
|
||||||
|
|
||||||
|
const createUserTable = fs.readFileSync(root + "/sql/create/createUserTable.sql").toString();
|
||||||
|
const createItemTable = fs.readFileSync(root + "/sql/create/createItemTable.sql").toString();
|
||||||
|
const populateItemTable = fs.readFileSync(root + "/sql/populate/populateItemTable.sql").toString();
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (let statement of [createUserTable, createItemTable, populateItemTable]) {
|
||||||
|
await pool.query(statement);
|
||||||
|
}
|
||||||
|
} catch(error) {
|
||||||
|
console.log(error);
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Database seed successful.");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
seed();
|
||||||
5
server/db/sql/create/createItemTable.sql
Normal file
5
server/db/sql/create/createItemTable.sql
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS item (
|
||||||
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||||
|
name VARCHAR NOT NULL,
|
||||||
|
description VARCHAR
|
||||||
|
);
|
||||||
8
server/db/sql/create/createUserTable.sql
Normal file
8
server/db/sql/create/createUserTable.sql
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS appuser (
|
||||||
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||||
|
username VARCHAR NOT NULL,
|
||||||
|
email VARCHAR UNIQUE,
|
||||||
|
password VARCHAR NOT NULL,
|
||||||
|
created VARCHAR NOT NULL,
|
||||||
|
modified VARCHAR NOT NULL
|
||||||
|
);
|
||||||
6
server/db/sql/populate/populateItemTable.sql
Normal file
6
server/db/sql/populate/populateItemTable.sql
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
INSERT INTO item (name, description) VALUES
|
||||||
|
('computer', 'fancy rocks with electricity'),
|
||||||
|
('coffee', 'caffeinated beverage'),
|
||||||
|
('book', 'thing that holds information'),
|
||||||
|
('cell phone', 'telecommunications device')
|
||||||
|
;
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
const express = require("express");
|
||||||
|
const loaders = require("./loaders");
|
||||||
|
const dotenv = require('dotenv');
|
||||||
|
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
const PORT = process.env.PORT || 8080;
|
||||||
|
const app = express();
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
try {
|
||||||
|
await loaders(app);
|
||||||
|
app.listen(PORT, () => {
|
||||||
|
console.log("Listening on port " + PORT);
|
||||||
|
})
|
||||||
|
} catch(err) {
|
||||||
|
console.log(err);
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
const session = require('express-session');
|
||||||
|
const express = require('express');
|
||||||
|
const pgSessionStore = require('../db/pgSessionStore');
|
||||||
|
const cors = require('cors');
|
||||||
|
|
||||||
|
require('dotenv').config();
|
||||||
|
|
||||||
|
const secret = process.env.SECRET;
|
||||||
|
|
||||||
|
async function expressLoader(app) {
|
||||||
|
app.use(cors());
|
||||||
|
app.use(express.json());
|
||||||
|
app.use(express.urlencoded({ extended: true }));
|
||||||
|
|
||||||
|
if (!secret) {
|
||||||
|
throw new Error("Express secret is undefined");
|
||||||
|
}
|
||||||
|
|
||||||
|
app.use(session({
|
||||||
|
secret: secret,
|
||||||
|
cookie: {
|
||||||
|
maxAge: 8 * 60 * 60 * 1000,
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
resave: false,
|
||||||
|
saveUninitialized: false,
|
||||||
|
store: pgSessionStore(session)
|
||||||
|
}))
|
||||||
|
|
||||||
|
return app;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = expressLoader;
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
const routesLoader = require("../routes");
|
||||||
|
const expressLoader = require("./express");
|
||||||
|
const passportLoader = require("./passport");
|
||||||
|
|
||||||
|
async function loaders(app) {
|
||||||
|
const expressApp = await expressLoader(app);
|
||||||
|
const passportApp = await passportLoader(expressApp);
|
||||||
|
await routesLoader(expressApp, passportApp);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = loaders;
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
const passport = require('passport');
|
||||||
|
const { Strategy } = require('passport-local');
|
||||||
|
|
||||||
|
async function passportLoader(app) {
|
||||||
|
app.use(passport.initialize());
|
||||||
|
app.use(passport.session());
|
||||||
|
|
||||||
|
passport.serializeUser((user, done) => {
|
||||||
|
done(null, user);
|
||||||
|
})
|
||||||
|
|
||||||
|
passport.deserializeUser((user, done) => {
|
||||||
|
done(null, user);
|
||||||
|
})
|
||||||
|
|
||||||
|
passport.use(new Strategy(async (email, password, done) => {
|
||||||
|
try {
|
||||||
|
console.log(email, password);
|
||||||
|
} catch (error) {
|
||||||
|
return done(error);
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = passportLoader;
|
||||||
18
server/models/Item.js
Normal file
18
server/models/Item.js
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
class Item {
|
||||||
|
name;
|
||||||
|
description;
|
||||||
|
created;
|
||||||
|
modified;
|
||||||
|
|
||||||
|
constructor(name, description) {
|
||||||
|
this.name = name;
|
||||||
|
this.description = description;
|
||||||
|
|
||||||
|
this.created = new Date(Date.now()).toDateString();
|
||||||
|
this.modified = new Date(Date.now()).toDateString();
|
||||||
|
}
|
||||||
|
|
||||||
|
async getAll() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
15
server/models/User.js
Normal file
15
server/models/User.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
module.exports = class User {
|
||||||
|
username;
|
||||||
|
email;
|
||||||
|
password;
|
||||||
|
created;
|
||||||
|
modified;
|
||||||
|
|
||||||
|
constructor(username, email, password) {
|
||||||
|
this.username = username;
|
||||||
|
this.email = email;
|
||||||
|
this.password = password;
|
||||||
|
this.created = new Date(Date.now()).toDateString();
|
||||||
|
this.modified = new Date(Date.now()).toDateString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,9 @@
|
|||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"dev": "nodemon .",
|
||||||
|
"seed": "node db/seed.js"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
@@ -13,6 +15,7 @@
|
|||||||
"bcrypt": "^5.1.0",
|
"bcrypt": "^5.1.0",
|
||||||
"connect-pg-simple": "^8.0.0",
|
"connect-pg-simple": "^8.0.0",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
|
"dotenv": "^16.0.3",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
"express-session": "^1.17.3",
|
"express-session": "^1.17.3",
|
||||||
"passport": "^0.6.0",
|
"passport": "^0.6.0",
|
||||||
|
|||||||
5
server/routes/auth.js
Normal file
5
server/routes/auth.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
function authRoute(app, passport) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = authRoute;
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
async function routesLoader(app, passport) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = routesLoader;
|
||||||
9
server/routes/item.js
Normal file
9
server/routes/item.js
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
const router = require('express').Router();
|
||||||
|
|
||||||
|
function itemRoute(app, passport) {
|
||||||
|
app.use('/app/items', router);
|
||||||
|
|
||||||
|
router.get('/', (req, res) => {
|
||||||
|
res.status(200).send('items');
|
||||||
|
})
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user