From 4f4bd93baf87ec45d0039c5856d029dba4fb87c4 Mon Sep 17 00:00:00 2001
From: Akif9748 <akif9748@gmail.com>
Date: Mon, 21 Mar 2022 23:53:22 +0300
Subject: [PATCH] Routes are fixed

---
 README.md                     |  2 -
 api/index.js                  | 81 -------------------------------
 apitest.py                    |  4 +-
 index.js                      | 18 +++----
 middlewares/login.js          | 10 ++++
 reset.js                      |  1 +
 routes/admin.js               | 39 +++++++++++++++
 routes/api/index.js           | 91 +++++++++++++++++++++++++++++++++++
 routes/get/admin.js           | 11 -----
 routes/get/createThread.js    | 10 ----
 routes/get/login.js           |  1 -
 routes/get/message.js         | 13 -----
 routes/get/register.js        |  1 -
 routes/get/threads.js         | 25 ----------
 routes/get/userEdit.js        |  9 ----
 routes/get/users.js           | 33 -------------
 routes/{get => }/index.js     | 20 ++++++--
 routes/{post => }/login.js    | 25 +++++++---
 routes/message.js             | 71 +++++++++++++++++++++++++++
 routes/post/admin.js          | 22 ---------
 routes/post/createThread.js   | 14 ------
 routes/post/messageDelete.js  | 19 --------
 routes/post/react.js          | 23 ---------
 routes/post/threads.js        | 20 --------
 routes/post/userDelete.js     | 18 -------
 routes/{post => }/register.js | 32 +++++++-----
 routes/threads.js             | 65 +++++++++++++++++++++++++
 routes/users.js               | 55 +++++++++++++++++++++
 views/admin.ejs               |  2 +-
 views/index.ejs               |  2 +-
 views/openThread.ejs          |  2 +-
 views/thread.ejs              | 17 ++++---
 views/threads.ejs             |  2 +-
 views/user.ejs                |  4 +-
 views/userEdit.ejs            |  2 +-
 views/users.ejs               |  2 +-
 36 files changed, 414 insertions(+), 352 deletions(-)
 delete mode 100644 api/index.js
 create mode 100644 middlewares/login.js
 create mode 100644 routes/admin.js
 create mode 100644 routes/api/index.js
 delete mode 100644 routes/get/admin.js
 delete mode 100644 routes/get/createThread.js
 delete mode 100644 routes/get/login.js
 delete mode 100644 routes/get/message.js
 delete mode 100644 routes/get/register.js
 delete mode 100644 routes/get/threads.js
 delete mode 100644 routes/get/userEdit.js
 delete mode 100644 routes/get/users.js
 rename routes/{get => }/index.js (71%)
 rename routes/{post => }/login.js (63%)
 create mode 100644 routes/message.js
 delete mode 100644 routes/post/admin.js
 delete mode 100644 routes/post/createThread.js
 delete mode 100644 routes/post/messageDelete.js
 delete mode 100644 routes/post/react.js
 delete mode 100644 routes/post/threads.js
 delete mode 100644 routes/post/userDelete.js
 rename routes/{post => }/register.js (51%)
 create mode 100644 routes/threads.js
 create mode 100644 routes/users.js

diff --git a/README.md b/README.md
index 3dadd9d..015cabe 100644
--- a/README.md
+++ b/README.md
@@ -17,9 +17,7 @@ And, you can learn informations about API in `APIDOCS.md`.
 * [Camroku](https://github.com/Camroku) - Made stylesheets
 
 ## To Do (Backend, bug fixes) :
-- Better method for params in URL. Router, or etc.
 - Middleware. For logged in etc.
-- Page template. (Not onlt module.exports) config, file, etc. 
 - Better error codes, example 400 for bad request
 - Ratelimit
 - Database change. (To MongoDB) 
diff --git a/api/index.js b/api/index.js
deleted file mode 100644
index 7ede19d..0000000
--- a/api/index.js
+++ /dev/null
@@ -1,81 +0,0 @@
-const { User, Message, Thread } = require("../classes");
-const db = require("quick.db");
-
-
-class ApiResponse {
-    constructor(status, result) {
-        this.status = status;
-        this.result = result;
-    }
-}
-
-const { request, response } = require("express");
-
-/**
- * For intellisense
- * @param {request} req 
- * @param {response} res 
- */
-
-module.exports = (req, res) => {
-
-    const error = (status, error) =>
-        res.status(status).json(new ApiResponse(403, { error }))
-
-
-    /**
-     * AUTH TYPE:
-    
-     headers: 
-        {
-            username: "Username for client",
-            password: "Password of selected username for client"
-        }
-
-    */
-
-    const { username = null, password = null } = req.headers;
-
-    if (!username || !password)
-        return error(403, "Headers are missing")
-
-    const user = db.get("secret." + username);
-
-    if (!user)
-        return error(403, "We have not got any user has got this name")
-
-    if (user.key !== password)
-        return error(403, 'Incorrect Password!')
-
-
-
-    /**
-      * REQUEST TYPE:
-      * GET /api/action/id 
-      * 
-      * @example message action:
-      * GET /api/message/0
-      *  
-      */
-    const { action } = req.params;
-
-    switch (action) {
-        case "message":
-            const { id = null } = req.params;
-            if (!id) return error(403, "Missing id in query")
-            const message = new Message().getId(id);
-           
-            if (!message || message.deleted) return error(403, "We have not got any message declared as this id.");
-
-            res.status(200).json(new ApiResponse(200, message));
-
-            break;
-
-        default:
-            return error(403, "Missing/undefined param: action");
-    }
-
-
-
-}
-
diff --git a/apitest.py b/apitest.py
index f42c984..b94cb90 100644
--- a/apitest.py
+++ b/apitest.py
@@ -39,12 +39,12 @@ example_response = {
             "messages": [0],  # ids of messages
             "time": 1647178870047,
             "deleted": False,
-            "id": "0"
+            "id": 0
         },
         # Other informations about message
         "deleted": False,
         "edited": False,
         "react": {},
-        "id": "1"
+        "id": 1
     }
 }
diff --git a/index.js b/index.js
index e96ced2..62a3e6d 100644
--- a/index.js
+++ b/index.js
@@ -8,7 +8,7 @@ const error = require("./errors/error.js")
 const app = express();
 
 app.use(session({ secret: 'secret', resave: true, saveUninitialized: true }));
-app.use(express.static(path.join(__dirname, "public")));
+app.use(express.static("public"));
 app.use(bodyParser.urlencoded({ extended: true }));
 app.use(express.json());
 
@@ -18,18 +18,16 @@ app.set("view engine", "ejs");
 //Temp:
 app.get("/", (req, res) => res.redirect("/index"));
 
-/**
- * API:
- */
-app.get("/api/:action/:id", require("./api"));
 
-for (const type of fs.readdirSync("./routes"))
-    for (const file of fs.readdirSync("./routes/" + type))
-        app[type](`/${file.replace(".js", "")}*`, require(`./routes/${type}/${file}`))
 
-app.get('*', (req, res) => error(res, 404, "We have not got this page."));
-app.post('*', (req, res) => error(res, 404, "We have not got this page."));
 
+
+
+for (const file of fs.readdirSync("./routes/"))
+        app.use(`/${file.replace(".js", "")}`, require(`./routes/${file}`))
+
+
+app.all("*", (req, res) => error(res, 404, "We have not got this page."))
 const port = process.env.PORT || 3000;
 
 app.listen(port, () => console.log("SERVER ON PORT:", port));
diff --git a/middlewares/login.js b/middlewares/login.js
new file mode 100644
index 0000000..f5f2168
--- /dev/null
+++ b/middlewares/login.js
@@ -0,0 +1,10 @@
+const { Router } = require("express");
+
+const app = Router();
+
+app.get("/", (req, res, next) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+    next();
+});
+
+module.exports = app;
\ No newline at end of file
diff --git a/reset.js b/reset.js
index 21406ba..7e42978 100644
--- a/reset.js
+++ b/reset.js
@@ -3,4 +3,5 @@ set("users", new Array());
 set("threads", new Array());
 set("secret", new Object());
 set("messages", new Array());
+set("timeouts", new Array());
 
diff --git a/routes/admin.js b/routes/admin.js
new file mode 100644
index 0000000..b2d5e61
--- /dev/null
+++ b/routes/admin.js
@@ -0,0 +1,39 @@
+const { User } = require("../classes");
+
+const { Router } = require("express")
+const error = require("../errors/error")
+
+const app = Router();
+
+app.get("/", (req, res) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+    const user = new User().getId(req.session.userid)
+
+    if (!user.admin) return error(res, 404, "You have not got permissions for view to this page.");
+
+    res.render("admin", { user, user2: false })
+}
+);
+
+app.post("/", (req, res) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+
+    const user = new User().getId(req.session.userid)
+
+    if (!user.admin) return error(res, 404, "You have not got permissions for view to this page.");
+    const user2 = new User().getId(req.body.userid)
+
+    if (!user2) 
+    return error(res, 404, "We have not got this user in all of the forum. Vesselam.");
+
+    else {
+        user2.admin = true;
+        user2.write()
+    }
+
+    res.render("admin", { user, user2 })
+
+
+});
+
+module.exports = app;
\ No newline at end of file
diff --git a/routes/api/index.js b/routes/api/index.js
new file mode 100644
index 0000000..586ecc1
--- /dev/null
+++ b/routes/api/index.js
@@ -0,0 +1,91 @@
+const { User, Message, Thread } = require("../../classes");
+const db = require("quick.db");
+
+
+const { Router } = require("express")
+
+const app = Router();
+
+
+class ApiResponse {
+    constructor(status, result) {
+        this.status = status;
+        this.result = result;
+    }
+}
+
+const { request, response } = require("express");
+
+/**
+ * For intellisense
+ * @param {request} req 
+ * @param {response} res 
+ */
+
+
+app.get("/:action/:id", (req, res) => {
+
+    const error = (status, error) =>
+        res.status(status).json(new ApiResponse(status, { error }))
+
+
+    /**
+     * AUTH TYPE:
+    
+     headers: 
+        {
+            username: "Username for client",
+            password: "Password of selected username for client"
+        }
+
+    */
+
+    const { username = null, password = null } = req.headers;
+
+    if (!username || !password)
+        return error(401, "Headers are missing")
+
+    const user = db.get("secret." + username);
+
+    if (!user)
+        return error(401, "We have not got any user has got this name")
+
+    if (user.key !== password)
+        return error(401, 'Incorrect Password!')
+
+
+
+    /**
+      * REQUEST TYPE:
+      * GET /api/action/id 
+      * 
+      * @example message action:
+      * GET /api/message/0
+      *  
+      */
+    const { action } = req.params;
+
+    if (action === "message") {
+
+        const { id = null } = req.params;
+        if (!id) return error(400, "Missing id in query")
+        const message = new Message().getId(id);
+
+        if (!message || message.deleted) return error(404, "We have not got any message declared as this id.");
+
+        res.status(200).json(new ApiResponse(200, message));
+    } else if (action === "user") {
+        const { id = null } = req.params;
+        if (!id) return error(400, "Missing id in query")
+        const member = new User().getId(id);
+        if (!member || member.deleted) return error(404, "We have not got any user declared as this id.");
+
+        res.status(200).json(new ApiResponse(200, member));
+    }
+    else
+        return error(400, "Missing/undefined param in action section: " + action);
+});
+
+
+
+module.exports = app;
\ No newline at end of file
diff --git a/routes/get/admin.js b/routes/get/admin.js
deleted file mode 100644
index af93712..0000000
--- a/routes/get/admin.js
+++ /dev/null
@@ -1,11 +0,0 @@
-const { User } = require("../../classes/index");
-const error = require("../../errors/error.js");
-
-module.exports = (req, res) => {
-    if (!req.session.loggedin) return res.redirect('/login');
-    const user = new User().getId(req.session.userid)
-
-    if (!user.admin) return error(res, 404, "You have not got permissions for view to this page.");
-
-    res.render("admin", { user, user2: false })
-} 
diff --git a/routes/get/createThread.js b/routes/get/createThread.js
deleted file mode 100644
index c2ebc85..0000000
--- a/routes/get/createThread.js
+++ /dev/null
@@ -1,10 +0,0 @@
-const { User } = require("../../classes/index");
-
-
-module.exports = (req, res) => {    
-    
-    if (!req.session.loggedin) return res.redirect('/login');
-    const user = new User().getId(req.session.userid)
-    res.render("openThread", { user })
-
-}
\ No newline at end of file
diff --git a/routes/get/login.js b/routes/get/login.js
deleted file mode 100644
index 0a1ddec..0000000
--- a/routes/get/login.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = (req,res)=> res.render("login");
\ No newline at end of file
diff --git a/routes/get/message.js b/routes/get/message.js
deleted file mode 100644
index 36c2ca2..0000000
--- a/routes/get/message.js
+++ /dev/null
@@ -1,13 +0,0 @@
-const {  Message } = require("../../classes/index");
-const error = require("../../errors/error.js");
-
-module.exports = (req, res) => {
-    if (!req.session.loggedin) return res.redirect('/login');
-    const id = req.url.slice(9);
-    const message = new Message().getId(id)
-                
-    if (!message || message.deleted) return error(res, 404, "We have not got any message declared as this id.");
-
-    res.redirect("/threads/" + message.thread.id);
-
-}
\ No newline at end of file
diff --git a/routes/get/register.js b/routes/get/register.js
deleted file mode 100644
index 4d1b2ba..0000000
--- a/routes/get/register.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = (req,res)=> res.render("register");
\ No newline at end of file
diff --git a/routes/get/threads.js b/routes/get/threads.js
deleted file mode 100644
index 9750451..0000000
--- a/routes/get/threads.js
+++ /dev/null
@@ -1,25 +0,0 @@
-const { Thread, Message, User } = require("../../classes/index");
-const db = require("quick.db");
-
-const error = require("../../errors/error.js");
-
-module.exports = (req, res) => {
-    if (!req.session.loggedin) return res.redirect('/login');
-
-    const id = req.url.slice(9);
-    const user = new User().getId(req.session.userid);
-
-    if (!id) {
-        const threads = db.get("threads").slice(0, 10)
-        const links = threads.map(thread => "/threads/" + threads.indexOf(thread))
-   
-        return res.render("threads", { threads, links, user})
-    }
-    const thread = new Thread().getId(id);
-
-    if (thread) {
-        const messages = thread.messages.filter(id => !new Message().getId(id).deleted).map(id => new Message().getId(id));
-        res.render("thread", { thread, messages, user  })
-    } else
-        error(res, 404, "We have not got this thread.");
-}
\ No newline at end of file
diff --git a/routes/get/userEdit.js b/routes/get/userEdit.js
deleted file mode 100644
index 300238a..0000000
--- a/routes/get/userEdit.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const { User } = require("../../classes/index");
-module.exports = (req, res) => {    
-    
-    if (!req.session.loggedin) return res.redirect('/login');
-
-    const user = new User().getId(req.session.userid);
-    res.render("userEdit", { user })
-
-}
\ No newline at end of file
diff --git a/routes/get/users.js b/routes/get/users.js
deleted file mode 100644
index e966456..0000000
--- a/routes/get/users.js
+++ /dev/null
@@ -1,33 +0,0 @@
-const { User } = require("../../classes/index");
-const db = require("quick.db");
-const error = require("../../errors/error.js")
-
-module.exports = (req, res) => {
-    if (!req.session.loggedin) return res.redirect('/login');
-    const user = new User().getId(req.session.userid)
-
-    const id = req.url.slice(7);
-
-    if (!id) {
-
-        const users = db.get("users").slice(0);
-
-        const links = users.filter(user=> !user.deleted).map(user => "/users/" + user.id)
-        return res.render("users", { users, links, user })
-
-    }
-
-    const member = new User().getId(id);
-
-
-    if (member && (user.admin || !member.deleted)) {
-        const message = db.get("messages").filter(message => message.author.id === Number(id)).length
-        const thread = db.get("threads").filter(thread => thread.author.id === Number(id)).length
-
-        const counts = { message, thread }
-        res.render("user", { user, member, counts })
-    }
-    else
-        error(res, 404, "We have not got this user.");
-
-}
\ No newline at end of file
diff --git a/routes/get/index.js b/routes/index.js
similarity index 71%
rename from routes/get/index.js
rename to routes/index.js
index 882b3ca..eac51b3 100644
--- a/routes/get/index.js
+++ b/routes/index.js
@@ -1,12 +1,26 @@
-const { User } = require("../../classes/index");
+const { User } = require("../classes");
 const { get } = require("quick.db")
-module.exports = (req, res) => {
+
+const { Router } = require("express");
+const app = Router();
+
+app.get("/", (req, res) => {
+
     if (!req.session.loggedin) return res.redirect('/login');
 
     const mem = process.memoryUsage().heapUsed / Math.pow(2, 20);
+
     const users = get("users").length;
+
     const threads = get("threads").length;
+
     const messages = get("messages").length;
+
     const user = new User().getId(req.session.userid)
+
     res.render("index", { mem, user, users, threads, messages })
-}
\ No newline at end of file
+
+})
+
+
+module.exports = app;
\ No newline at end of file
diff --git a/routes/post/login.js b/routes/login.js
similarity index 63%
rename from routes/post/login.js
rename to routes/login.js
index 5a1fa04..dc4cce9 100644
--- a/routes/post/login.js
+++ b/routes/login.js
@@ -1,13 +1,19 @@
-const db = require("quick.db");
-const error = require("../../errors/error.js")
-const { User } = require("../../classes/index");
+const { User } = require("../classes");
+const db = require("quick.db")
 
-module.exports = (req, res) => {
+const { Router } = require("express")
+const error = require("../errors/error")
+
+const app = Router();
+
+app.get("/", (req, res) => res.render("login"));
+
+app.post("/", (req, res) => {
     req.session.loggedin = false;
     req.session.username = null;
     req.session.userid = null;
-    let username = req.body.username;
-    let password = req.body.password;
+    const { username = null, password = null } = req.body;
+
     if (username && password) {
         const user = db.get("secret." + username)
         if (user) {
@@ -24,8 +30,11 @@ module.exports = (req, res) => {
 
 
     } else
-        error(res, 403, "You forgot entering some values")
+        error(res, 400, "You forgot entering some values")
 
 
 
-}
\ No newline at end of file
+})
+
+
+module.exports = app;
\ No newline at end of file
diff --git a/routes/message.js b/routes/message.js
new file mode 100644
index 0000000..1e47cb4
--- /dev/null
+++ b/routes/message.js
@@ -0,0 +1,71 @@
+const { Thread, Message, User } = require("../classes");
+const error = require("../errors/error")
+
+const { Router } = require("express");
+
+const app = Router();
+
+app.get("/:id", (req, res) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+    const message = new Message().getId(req.params.id);
+
+    if (!message || message.deleted) return error(res, 404, "We have not got any message declared as this id.");
+
+    res.redirect("/threads/" + message.thread.id);
+
+});
+
+app.post("/", (req, res) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+
+
+    const thread = new Thread().getId(req.body.threadID);
+
+    if (thread) {
+        const message = new Message(req.body.content, new User().getId(req.session.userid), thread).takeId().write();
+        thread.push(message.id)
+        thread.write();
+        res.redirect('/threads/' + req.body.threadID);
+
+    }
+    else
+        error(res, 404, "We have not got this thread.");
+
+});
+
+
+app.post("/delete/:id", (req, res) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+
+    const message = new Message().getId(req.params.id)
+    if (!message || message.deleted) return error(res, 404, "We have not got any message declared as this id.");
+    const user = new User().getId(req.session.userid);
+    if (user.id != message.author.id && !user.admin)
+        return error(res, 403, "You have not got permission for this.");
+    message.deleted = true;
+    message.write();
+
+
+    res.status(200).redirect("/threads/" + message.thread.id);
+
+})
+app.post("/react/:id", (req, res) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+
+    const { id = null } = req.params;
+    const info = req.body;
+    const message = new Message().getId(id);
+    if (message) {
+        if (!(req.session.userid in message.react))
+            message.react[req.session.userid] = "like" in info;
+        else
+            delete message.react[req.session.userid];
+
+        message.write();
+        res.redirect("/threads/" + message.thread.id);
+    } else error(res, 404, "We have not got this Message for reacting.");
+
+
+});
+
+module.exports = app;
\ No newline at end of file
diff --git a/routes/post/admin.js b/routes/post/admin.js
deleted file mode 100644
index cdd394a..0000000
--- a/routes/post/admin.js
+++ /dev/null
@@ -1,22 +0,0 @@
-const { User } = require("../../classes/index");
-const error = require("../../errors/error.js");
-
-module.exports = (req, res) => {
-    if (!req.session.loggedin) return res.redirect('/login');
-
-    const user = new User().getId(req.session.userid)
-
-    if (!user.admin) return error(res, 404, "You have not got permissions for view to this page.");
-    const user2 = new User().getId(req.body.userid)
-
-    if (!user2) return error(res, 404, "We have not got this user in all of forum. Vesselam.");
-
-    else {
-        user2.admin = true;
-        user2.write()
-    }
-
-    res.render("admin", { user, user2 })
-
-
-} 
diff --git a/routes/post/createThread.js b/routes/post/createThread.js
deleted file mode 100644
index 4485cfa..0000000
--- a/routes/post/createThread.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const { User, Thread, Message } = require("../../classes/index");
-
-
-module.exports = (req, res) => {
-    if (!req.session.loggedin) return res.redirect('/login');
-    const user = new User().getId(req.session.userid);
-    const info = req.body;
-    const thread = new Thread(info.title, user).takeId().write();
-    thread.push(new Message(info.content, user, thread).takeId().write().id)
-    thread.write();
-
-    res.redirect('/threads/' + thread.id);
-
-}
\ No newline at end of file
diff --git a/routes/post/messageDelete.js b/routes/post/messageDelete.js
deleted file mode 100644
index 41ee5fc..0000000
--- a/routes/post/messageDelete.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const { User, Message } = require("../../classes/index");
-const error = require("../../errors/error.js");
-
-module.exports = (req, res) => {
-    if (!req.session.loggedin) return res.redirect('/login');
-    const id = req.url.slice(9 + 6)
-    const message = new Message().getId(id)
-
-    if (!message || message.deleted) return error(res, 404, "We have not got any message declared as this id.");
-    const user = new User().getId(req.session.userid);
-    if (user.id != message.author.id && !user.admin)
-        return error(res, 403, "You have not got permission for this.");
-    message.deleted = true;
-    message.write();
-
-
-    res.redirect("/threads/" + message.thread.id);
-
-}
\ No newline at end of file
diff --git a/routes/post/react.js b/routes/post/react.js
deleted file mode 100644
index 9a852ff..0000000
--- a/routes/post/react.js
+++ /dev/null
@@ -1,23 +0,0 @@
-const error = require("../../errors/error.js")
-const { Message, User } = require("../../classes/index");
-
-module.exports = (req, res) => {
-    if (!req.session.loggedin) return res.redirect('/login');
-    const id = req.url.slice(7);
-    if (!id) error(res, 404, "Id of request is missing");
-
-    const info = req.body;
-    const user = new User().getId(req.session.userid);
-    const message = new Message().getId(id);
-    if (message) {
-        if (!(user.id in message.react))
-            message.react[user.id] = "like" in info;
-        else
-            delete message.react[user.id];
-
-        message.write();
-        res.redirect("/threads/" + message.thread.id);
-    } else error(res, 404, "We have not got this Message for reacting.");
-
-
-}
\ No newline at end of file
diff --git a/routes/post/threads.js b/routes/post/threads.js
deleted file mode 100644
index 8e4d09d..0000000
--- a/routes/post/threads.js
+++ /dev/null
@@ -1,20 +0,0 @@
-const { Thread, Message, User } = require("../../classes/index");
-const error = require("../../errors/error.js")
-
-module.exports = (req, res) => {
-    if (!req.session.loggedin) return res.redirect('/login');
-
-    const id = req.url.slice(9);
-    const thread = new Thread().getId(id);
-
-    if (thread) {
-        const message = new Message(req.body.content, new User().getId(req.session.userid), thread).takeId().write();
-        thread.push(message.id)
-        thread.write();
-        res.redirect('/threads/' + id);
-
-    }
-    else
-        error(res, 404, "We have not got this thread.");
-
-}
\ No newline at end of file
diff --git a/routes/post/userDelete.js b/routes/post/userDelete.js
deleted file mode 100644
index 7d0e0cf..0000000
--- a/routes/post/userDelete.js
+++ /dev/null
@@ -1,18 +0,0 @@
-const { User, Message } = require("../../classes/index");
-const error = require("../../errors/error.js");
-
-module.exports = (req, res) => {
-    if (!req.session.loggedin) return res.redirect('/login');
-    const user = new User().getId(req.session.userid);
-    if (!user.admin)
-        return error(res, 403, "You have not got permission for this.");
-
-    const id = req.url.slice(9 + 3)
-    const member = new User().getId(id);
-    if (!member || member.deleted) return error(res, 404, "We have not got any user declared as this id.");
- 
-    member.deleted = true;
-    member.write();
-    
-    res.redirect("/admin");
-}
\ No newline at end of file
diff --git a/routes/post/register.js b/routes/register.js
similarity index 51%
rename from routes/post/register.js
rename to routes/register.js
index c5d0ac2..2a23017 100644
--- a/routes/post/register.js
+++ b/routes/register.js
@@ -1,23 +1,28 @@
-const db = require("quick.db");
-const error = require("../../errors/error.js")
-const { User } = require("../../classes/index");
+const { User } = require("../classes");
+const db = require("quick.db")
 
-module.exports = (req, res) => {
+const { Router } = require("express")
+const error = require("../errors/error")
+
+const app = Router();
+
+app.get("/", (req, res) => res.render("register"));
+
+app.post("/", (req, res) => {
     req.session.loggedin = false;
     req.session.username = null;
     req.session.userid = null;
-    let username = req.body.username;
-    let password = req.body.password;
+    const { username = null, password = null } = req.body;
+
 
     if (username && password) {
         const user = db.get("secret." + username)
 
-        if (user) {
+        if (user)
             error(res, 404, `We have got an user named ${username}!`)
 
-        } else {
-            let avatar = req.body.avatar || "/images/guest.png"
-            const user2 = new User(req.body.username, avatar).takeId()
+        else {
+            const user2 = new User(req.body.username, req.body.avatar).takeId()
             db.set("secret." + username, { id: user2.id, key: password })
             req.session.loggedin = true;
             req.session.username = username;
@@ -27,7 +32,10 @@ module.exports = (req, res) => {
         }
 
     } else
-        error(res, 404, "You forgot entering some values")
+        error(res, 400, "You forgot entering some values")
 
 
-}
\ No newline at end of file
+})
+
+
+module.exports = app;
\ No newline at end of file
diff --git a/routes/threads.js b/routes/threads.js
new file mode 100644
index 0000000..a91047a
--- /dev/null
+++ b/routes/threads.js
@@ -0,0 +1,65 @@
+const { Thread, Message, User } = require("../classes");
+const error = require("../errors/error")
+const db = require("quick.db")
+
+const { Router } = require("express");
+
+const app = Router();
+
+app.get("/open*", (req, res) => {
+
+    if (!req.session.loggedin) return res.redirect('/login');
+    const user = new User().getId(req.session.userid)
+    res.render("openThread", { user })
+
+});
+
+app.get("/", (req, res) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+
+    const user = new User().getId(req.session.userid);
+
+    const threads = db.get("threads").slice(0, 10)
+    const links = threads.map(thread => "/threads/" + threads.indexOf(thread))
+
+    return res.render("threads", { threads, links, user })
+
+});
+
+
+app.get("/:id", (req, res) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+
+    const { id } = req.params;
+
+    const thread = new Thread().getId(id);
+
+    if (thread) {
+        const user = new User().getId(req.session.userid);
+        const messages = thread.messages.filter(id => !new Message().getId(id).deleted).map(id => new Message().getId(id));
+        res.render("thread", { thread, messages, user })
+    } else
+        error(res, 404, "We have not got this thread.");
+});
+
+app.post("/", (req, res) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+
+    const user = new User().getId(req.session.userid);
+
+    const { title = null, content = null } = req.body;
+
+    if (!title || !content) return error(res, 400, "Title and content is missing");
+
+    const thread = new Thread(title, user).takeId().write();
+    
+    thread
+        .push(new Message(content, user, thread).takeId().write().id)
+        .write();
+
+    res.redirect('/threads/' + thread.id);
+
+})
+
+
+module.exports = app;
\ No newline at end of file
diff --git a/routes/users.js b/routes/users.js
new file mode 100644
index 0000000..43f86a6
--- /dev/null
+++ b/routes/users.js
@@ -0,0 +1,55 @@
+const { User } = require("../classes");
+const db = require("quick.db")
+
+const { Router } = require("express")
+const error = require("../errors/error")
+
+const app = Router();
+
+app.get("/", (req, res) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+    const user = new User().getId(req.session.userid)
+
+
+    const users = db.get("users").slice(0);
+
+    const links = users.filter(user => !user.deleted).map(user => "/users/" + user.id);
+    return res.render("users", { users, links, user })
+
+
+
+});
+app.get("/:id", (req, res) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+    const user = new User().getId(req.session.userid)
+    const { id = null } = req.params;
+    const member = new User().getId(req.params.id);
+
+
+    if (member && (user.admin || !member.deleted)) {
+        const message = db.get("messages").filter(message => message.author.id === Number(id)).length
+        const thread = db.get("threads").filter(thread => thread.author.id === Number(id)).length
+
+        const counts = { message, thread }
+        res.render("user", { user, member, counts })
+    }
+    else error(res, 404, "We have not got this user.");
+
+});
+app.post("/delete/:id", (req, res) => {
+    if (!req.session.loggedin) return res.redirect('/login');
+    const user = new User().getId(req.session.userid);
+    if (!user.admin)
+        return error(res, 403, "You have not got permission for this.");
+
+    const id = req.url.slice(9 + 3)
+    const member = new User().getId(id);
+    if (!member || member.deleted) return error(res, 404, "We have not got any user declared as this id.");
+ 
+    member.deleted = true;
+    member.write();
+    
+    res.redirect("/admin");
+});
+
+module.exports = app;
\ No newline at end of file
diff --git a/views/admin.ejs b/views/admin.ejs
index 673578e..955a9cd 100644
--- a/views/admin.ejs
+++ b/views/admin.ejs
@@ -19,7 +19,7 @@
     <br> <button class="buyuk" onclick="window.location.href = '/threads'">THREADS</button>
     <button class="buyuk" onclick="window.location.href = '/search'">SEARCH</button>
     <button class="buyuk" onclick="window.location.href = '/users'">USERS</button>
-    <button class="buyuk" onclick="window.location.href = '/createThread/'">OPEN THREAD</button>
+    <button class="buyuk" onclick="window.location.href = '/threads/open/'">OPEN THREAD</button>
     <h1 style="display:inline; float:right;"><a href=<%=user.getLink() %>> <%= user.name %></a>
         <img class="yuvarlak" src=<%=user.avatar %> alt=<%= user.name %>>
     </h1>
diff --git a/views/index.ejs b/views/index.ejs
index f533c25..83b3cf2 100644
--- a/views/index.ejs
+++ b/views/index.ejs
@@ -25,7 +25,7 @@
 
     <button class="buyuk" onclick="window.location.href = '/search'">SEARCH</button>
     <button class="buyuk" onclick="window.location.href = '/users'">USERS</button>
-    <button class="buyuk" onclick="window.location.href = '/createThread/'">OPEN THREAD</button>
+    <button class="buyuk" onclick="window.location.href = '/threads/open/'">OPEN THREAD</button>
     <h1 style="display:inline; float:right;"><a href=<%=user.getLink() %>> <%= user.name %></a>
         <img class="yuvarlak" src=<%=user.avatar %> alt=<%= user.name %>>
     </h1>
diff --git a/views/openThread.ejs b/views/openThread.ejs
index 7718257..fcd26f9 100644
--- a/views/openThread.ejs
+++ b/views/openThread.ejs
@@ -29,7 +29,7 @@
 
 
 
-    <form action="/createThread/" method="POST">
+    <form action="/threads/" method="POST">
         <h2>Title:</h2> 
         <input name="title"></input>
 
diff --git a/views/thread.ejs b/views/thread.ejs
index 4abca08..1591892 100644
--- a/views/thread.ejs
+++ b/views/thread.ejs
@@ -22,7 +22,7 @@
 
   <button class="buyuk" onclick="window.location.href = '/search'">SEARCH</button>
   <button class="buyuk" onclick="window.location.href = '/users'">USERS</button>
-  <button class="buyuk" onclick="window.location.href = '/createThread/'">OPEN THREAD</button>
+  <button class="buyuk" onclick="window.location.href = '/threads/open/'">OPEN THREAD</button>
   <h1 style="display:inline; float:right;"><a href=<%=user.getLink() %>> <%= user.name %></a>
     <img class="yuvarlak" src=<%=user.avatar %> alt=<%= user.name %>>
   </h1>
@@ -50,12 +50,14 @@
       <h2>
         <%= message.content %>
       </h2>
-      <form style="text-align:right;display:inline;" action="/messageDelete/<%= message.id %>" method="post">
-
+      <form style="text-align:right;display:inline;" action="/message/delete/<%= message.id %>" method="post">
         <button style="display:inline;" class="button" type="submit">DELETE</button>
       </form>
 
-      <form style="text-align:right;" action="/react/<%= message.id %>" method="POST">
+
+      <form style="display:inline;" action="/message/<%= message.id %>" method="delete">
+      </form>
+      <form style="text-align:right;" action="/message/react/<%= message.id %>" method="POST">
 
         <h3 style="display:inline;">
           <%= Object.values(message.react).filter(Boolean).length - Object.values(message.react).filter(x=>!x).length %>
@@ -73,19 +75,20 @@
     <br>
     <% }); %>
 
-
       <hr>
 
 
-      <form action="/threads/<%= thread.id %>" method="POST">
+      <form action="/message" method="POST">
         <textarea rows="4" cols="50" name="content"></textarea>
+        <input name="threadID" type="hidden" value="<%= thread.id %>"></input>
+
         <br>
 
         <button class="button" type="submit">Send!</button>
       </form>
 
 
-    <!-- This website is powered by AKF-Forum -->
+      <!-- This website is powered by AKF-Forum -->
 </body>
 
 </html>
\ No newline at end of file
diff --git a/views/threads.ejs b/views/threads.ejs
index 1e30234..4c48e99 100644
--- a/views/threads.ejs
+++ b/views/threads.ejs
@@ -20,7 +20,7 @@
     <button class="buyuk" onclick="window.location.href = '/users'">USERS</button>
     <button class="buyuk" onclick="window.location.href = '/search'">SEARCH</button>
 
-    <button class="buyuk" onclick="window.location.href = '/createThread/'">OPEN THREAD</button>
+    <button class="buyuk" onclick="window.location.href = '/threads/open/'">OPEN THREAD</button>
     <h1 style="display:inline; float:right;"><a href=<%=user.getLink() %>> <%= user.name %></a>
         <img class="yuvarlak" src=<%=user.avatar %> alt=<%= user.name %>>
     </h1>
diff --git a/views/user.ejs b/views/user.ejs
index 5890781..c432cdf 100644
--- a/views/user.ejs
+++ b/views/user.ejs
@@ -22,7 +22,7 @@
   <button class="buyuk" onclick="window.location.href = '/threads'">THREADS</button>
   <button class="buyuk" onclick="window.location.href = '/search'">SEARCH</button>
   <button class="buyuk" onclick="window.location.href = '/users'">USERS</button>
-  <button class="buyuk" onclick="window.location.href = '/createThread/'">OPEN THREAD</button>
+  <button class="buyuk" onclick="window.location.href = '/threads/open/'">OPEN THREAD</button>
   <h1 style="display:inline; float:right;"><a href=<%=user.getLink() %>> <%= user.name %></a>
     <img class="yuvarlak" src=<%=user.avatar %> alt=<%= user.name %>>
   </h1>
@@ -70,7 +70,7 @@
 
     </form>
 
-    <form action="/userDelete/<%= member.id %>" method="POST">
+    <form action="/users/delete/<%= member.id %>" method="POST">
       <button class="buyuk" type="submit">Delete user!</button>
     </form>
     <% }; %>
diff --git a/views/userEdit.ejs b/views/userEdit.ejs
index 7a6f395..5d87357 100644
--- a/views/userEdit.ejs
+++ b/views/userEdit.ejs
@@ -19,7 +19,7 @@
 
     <button class="buyuk" onclick="window.location.href = '/search'">SEARCH</button>
     <button class="buyuk" onclick="window.location.href = '/users'">USERS</button>
-    <button class="buyuk" onclick="window.location.href = '/createThread/'">OPEN THREAD</button>
+    <button class="buyuk" onclick="window.location.href = '/threads/open/'">OPEN THREAD</button>
     <h1 style="display:inline; float:right;"><a href=<%=user.getLink() %>> <%= user.name %></a>
         <img class="yuvarlak" src=<%=user.avatar %> alt=<%= user.name %>>
     </h1>
diff --git a/views/users.ejs b/views/users.ejs
index b3d7813..20c6448 100644
--- a/views/users.ejs
+++ b/views/users.ejs
@@ -19,7 +19,7 @@
     <br>
     <button class="buyuk" onclick="window.location.href = '/threads'">THREADS</button>
     <button class="buyuk" onclick="window.location.href = '/search'">SEARCH</button>
-    <button class="buyuk" onclick="window.location.href = '/createThread/'">OPEN THREAD</button>
+    <button class="buyuk" onclick="window.location.href = '/threads/open/'">OPEN THREAD</button>
     <h1 style="display:inline; float:right;"><a href=<%=user.getLink() %>> <%= user.name %></a>
         <img class="yuvarlak" src=<%=user.avatar %> alt=<%= user.name %>>
     </h1>