Skip to content
This repository has been archived by the owner on Nov 27, 2022. It is now read-only.

Commit

Permalink
model purchase
Browse files Browse the repository at this point in the history
  • Loading branch information
ion05 committed Jul 30, 2022
1 parent 91aa72e commit 4946e2c
Show file tree
Hide file tree
Showing 16 changed files with 179 additions and 16 deletions.
8 changes: 5 additions & 3 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,14 @@ app.use(expressLayouts);
app.use(express.json());
app.set("views", path.join(__dirname, "views"));

const indexRouter = require("./routes/indexRoute");
const authRouter = require("./routes/authRoute");
const dashboardRouter = require("./routes/dashboardRoute");
const indexRouter = require("./routes/indexRoute"),
authRouter = require("./routes/authRoute"),
dashboardRouter = require("./routes/dashboardRoute"),
marketRouter = require("./routes/marketRoute");
app.use(indexRouter);
app.use(authRouter);
app.use("/dashboard", dashboardRouter);
app.use("/market", marketRouter);

const PORT = process.env.PORT || 3000;
const link = `mongodb+srv://techsyndicate2:${process.env.MONGO_PASS}@cluster0.dc5krnu.mongodb.net/?retryWrites=true&w=majority`;
Expand Down
1 change: 0 additions & 1 deletion services/auth.js → middleware/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ module.exports = {
}
},
forwardUser: async (req, res, next) => {
console.log("user forwading");
const token = req.cookies.token;
if (!token) {
return next();
Expand Down
18 changes: 18 additions & 0 deletions public/js/dashboard.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
var notyf = new Notyf();
var modelBtn = document.getElementById("modelBtn");

modelBtn.addEventListener("click", (e) => {
e.preventDefault();
let name = document.getElementById("name").value;
let descriptipn = document.getElementById("description").value;
fetch("/dashboard/model/new", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
name: name,
description: description,
}),
}).catch((err) => console.log(err));
});
29 changes: 29 additions & 0 deletions public/js/market.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
var notyf = new Notyf();
var buyBtn = document.querySelector("#buyBtn");

buyBtn.addEventListener("click", (e) => {
e.preventDefault();
let modelType = document.querySelector("#modelType").value;
let modelName = document.querySelector("#modelName").value;
fetch("/market/buy", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
modelType: modelType,
modelName: modelName,
}),
})
.then((res) => res.json())
.then((data) => {
if (data.status === 400) {
notyf.error(data.message);
} else {
setTimeout(() => {
notyf.success(data.message);
}, 3000);
window.location.href = "/dashboard";
}
});
});
2 changes: 1 addition & 1 deletion public/js/register.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ regBtn.addEventListener("click", (e) => {
const username = document.querySelector("#username").value;
const password = document.querySelector("#password").value;
const password2 = document.querySelector("#password").value;
console.log(email);

fetch("/auth/register", {
method: "POST",
headers: {
Expand Down
2 changes: 1 addition & 1 deletion routes/authRoute.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const router = require("express").Router();
const user = require("../schemas/userSchema");
const jwt = require("jsonwebtoken");
const bcrypt = require("bcrypt");
const { forwardUser } = require("../services/auth");
const { forwardUser } = require("../middleware/auth");

router.get("/register", forwardUser, async (req, res) => {
res.render("register");
Expand Down
19 changes: 18 additions & 1 deletion routes/dashboardRoute.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,28 @@
const express = require("express");
const router = express.Router();
const template = require("../schemas/templateSchema");
const { checkUser } = require("../services/auth");
const { checkUser } = require("../middleware/auth");

router.get("/", checkUser, async (req, res) => {
const templates = await template.find();
res.render("dashboard/index", { templates });
});

// Model Section
router.post("/model/new", async (req, res) => {
const { name, description } = req.body;
const newTemplate = new template({
name,
description,
});
newTemplate.save();
res.cookie("modelId", newTemplate._id, {
httpOnly: true,
expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),
});
return res.redirect("/dashboard/model/pref/1");
});
router.get("/dashboard/model/pref/1", checkUser, async (req, res) => {
res.render("model/pref/1");
});
module.exports = router;
1 change: 0 additions & 1 deletion routes/indexRoute.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
const express = require("express");
const router = express.Router();
router.get("/", (req, res) => {
console.log("hello");
res.send("hello");
});

Expand Down
50 changes: 50 additions & 0 deletions routes/marketRoute.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
const router = require("express").Router();
const { checkUser } = require("../middleware/auth");
const template = require("../schemas/templateSchema");
const user = require("../schemas/userSchema");

router.get("/", checkUser, (req, res) => {
console.log(req.user);
res.render("market/index");
});

router.post("/buy", checkUser, async (req, res) => {
try {
const { modelType, modelName } = req.body;
let modelLink = "";
if (modelType === "house") {
// DUMMY LINK TO BE REPLACED WITH ACTUAL MODEL KA GDRIVE LINK
modelLink = "https://google.com";
}
const userId = req.user["_id"];
const savedUser = await user.findById(userId);
const credits = savedUser.credits;
if (credits < 30) {
return res.status(400).json({
msg: "Not enough credits",
});
} else {
const newUser = await user.findByIdAndUpdate(userId, {
$inc: { credits: -30 },
});
}

const newTemplate = new template({
model: modelLink,
name: modelName,
userId,
credits: 30,
});
await newTemplate.save();

return res.status(200).send({
msg: "Model purchased",
});
} catch (e) {
console.log(e);
return res.status(400).status({
msg: "Some Error Occurred",
});
}
});
module.exports = router;
13 changes: 10 additions & 3 deletions schemas/templateSchema.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,25 @@ const reqString = { type: String, required: true };
const templateSchema = new Schema(
{
name: reqString,
model: reqString,
description: reqString,
model: {
type: String,
required: false,
},
description: {
type: String,
required: false,
},
preferences: {
type: Array,
required: false,
default: [],
},
credits: {
type: Number,
required: true,
required: false,
default: 30,
},
userId: reqString,
},
{ timestamps: true }
);
Expand Down
8 changes: 8 additions & 0 deletions schemas/userSchema.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@ const userSchema = new Schema(
email: reqString,
username: reqString,
password: reqString,
credits: {
type: Number,
required: true,
},
preferences: {
type: Array,
required: true,
},
},
{ timestamps: true }
);
Expand Down
12 changes: 11 additions & 1 deletion views/dashboard/index.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,14 @@
<%= templates[i].description %>
</div> <br>
<% } %>
</h1>

<h2>Create New Model</h2>
<form id="modelForm">
<input name="name" id="name" placeholder="Model Name" /> <br> <br>
<input name="description" id="description" placeholder="Model Description" /> <br> <br>
<button type="submit" id="modelBtn">Make a Model</button>
</form>
</h1>
<h2><a href='/market'>Market Place</a></h2>
<script src="https://cdn.jsdelivr.net/npm/notyf@3/notyf.min.js"></script>
<script src="/js/dashboard.js"></script>
4 changes: 2 additions & 2 deletions views/index.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MINET22MAKE</title>
<title>BYLD</title>
</head>

<body>
<h2>MINET22MAKE</h2>
<h2>BYLD</h2>
</body>

</html>
4 changes: 2 additions & 2 deletions views/layout.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/notyf@3/notyf.min.css">
<title>MINET22MAKE</title>
<title>BYLD</title>
</head>

<body>
<h1>MINET22MAKE</h1>
<h1>BYLD</h1>
<%- body %>
</body>
<script src="https://cdn.jsdelivr.net/npm/notyf@3/notyf.min.js"></script>
Expand Down
17 changes: 17 additions & 0 deletions views/market/index.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<h1>Market Place</h1>

<h2>Available Models</h2>

<p>
1. House <br>
<!-- MODEL PREVIEW HERE WITH IMAGE -->
<!-- DESIGN SIMILAR TO AMAZON/FLIPKART ETC -->
Base Price: 30 Credits <br>
<form action="buyForm">
<input name="modelType" id="modelType" hidden>
<input name="modelName" id="modelName" type="text" required placeholder="Model Name"> <br><br>
<button id="buyBtn">Buy Base Model Template</button>
</forma>
</p>
<script src="https://cdn.jsdelivr.net/npm/notyf@3/notyf.min.js"></script>
<script src="/js/market.js"></script>
7 changes: 7 additions & 0 deletions views/model/pref/1.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<h1>Q1: Which do you like more ?</h1>

<!-- form with 2 radio buttons -->
<form id="q1">
<input type="radio" name="q1" value="a"> A: <input type="text" name="a" id="a"> <br>
<input type="radio" name="q1" value="b"> B: <input type="text" name="b" id="b"> <br>
</form>

0 comments on commit 4946e2c

Please sign in to comment.