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": "",
|
||||
"main": "index.js",
|
||||
"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": [],
|
||||
"author": "",
|
||||
@@ -13,6 +15,7 @@
|
||||
"bcrypt": "^5.1.0",
|
||||
"connect-pg-simple": "^8.0.0",
|
||||
"cors": "^2.8.5",
|
||||
"dotenv": "^16.0.3",
|
||||
"express": "^4.18.2",
|
||||
"express-session": "^1.17.3",
|
||||
"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