mirror of
https://github.com/Akif9748/akf-forum.git
synced 2024-11-22 20:10:40 +03:00
Added virtuals for delete
This commit is contained in:
parent
e824b844f6
commit
1de709c632
5 changed files with 20 additions and 15 deletions
|
@ -63,7 +63,7 @@ Akf-forum has got an API for AJAX (fetch), other clients etc. And, you can learn
|
||||||
- MODALS'S CSS & JS
|
- MODALS'S CSS & JS
|
||||||
- change category name
|
- change category name
|
||||||
- click to user message count to view message W/search
|
- click to user message count to view message W/search
|
||||||
- add deleted => this.state=="DELETED"
|
|
||||||
## Major Version History
|
## Major Version History
|
||||||
- V4: Caching
|
- V4: Caching
|
||||||
- V3: New Theme
|
- V3: New Theme
|
||||||
|
|
|
@ -12,7 +12,7 @@ const schema = new mongoose.Schema({
|
||||||
|
|
||||||
title: { type: String, maxlength: limits.title },
|
title: { type: String, maxlength: limits.title },
|
||||||
oldTitles: [String],
|
oldTitles: [String],
|
||||||
|
|
||||||
time: { type: Date, default: Date.now },
|
time: { type: Date, default: Date.now },
|
||||||
edited: { type: Boolean, default: false },
|
edited: { type: Boolean, default: false },
|
||||||
state: { type: String, default: defaultThreadState, enum: threadEnum },
|
state: { type: String, default: defaultThreadState, enum: threadEnum },
|
||||||
|
@ -22,6 +22,14 @@ const schema = new mongoose.Schema({
|
||||||
|
|
||||||
|
|
||||||
schema.methods.get_author = cache.getAuthor;
|
schema.methods.get_author = cache.getAuthor;
|
||||||
|
|
||||||
|
schema.virtual("deleted").get(function () {
|
||||||
|
return this.state === "DELETED";
|
||||||
|
}).set(function (value) {
|
||||||
|
this.set({ state: value ? "DELETED" : "OPEN" });
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
schema.methods.get_category = async function () {
|
schema.methods.get_category = async function () {
|
||||||
return await require("./Category").findOne({ id: this.categoryID }) || { id: this.categoryID, name: "Unknown" };
|
return await require("./Category").findOne({ id: this.categoryID }) || { id: this.categoryID, name: "Unknown" };
|
||||||
}
|
}
|
||||||
|
@ -47,9 +55,6 @@ schema.methods.getLink = function (id = this.id) {
|
||||||
|
|
||||||
const model = mongoose.model('thread', schema);
|
const model = mongoose.model('thread', schema);
|
||||||
|
|
||||||
model.get = async id => {
|
model.get = id => model.findOne({ id }).then(thread => thread.get_author());
|
||||||
const thread = await model.findOne({ id })
|
|
||||||
return await thread.get_author();
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = model;
|
module.exports = model;
|
|
@ -83,7 +83,7 @@ app.patch("/:id/", async (req, res) => {
|
||||||
|
|
||||||
if (thread.state === state) return res.error(400, "You can't change thread state to same state.");
|
if (thread.state === state) return res.error(400, "You can't change thread state to same state.");
|
||||||
if (!threadEnum.includes(state)) return res.error(400, "Invalid thread state.");
|
if (!threadEnum.includes(state)) return res.error(400, "Invalid thread state.");
|
||||||
if (thread.state === "DELETED")
|
if (thread.deleted)
|
||||||
await MessageModel.updateMany({ threadID: thread.id }, { deleted: false });
|
await MessageModel.updateMany({ threadID: thread.id }, { deleted: false });
|
||||||
thread.state = state;
|
thread.state = state;
|
||||||
}
|
}
|
||||||
|
@ -99,8 +99,8 @@ app.delete("/:id/", async (req, res) => {
|
||||||
if (user.id != thread.authorID && !user.admin)
|
if (user.id != thread.authorID && !user.admin)
|
||||||
return res.error(403, "You have not got permission for this.");
|
return res.error(403, "You have not got permission for this.");
|
||||||
|
|
||||||
if (thread.state == "DELETED") return res.error(404, "This thread is already deleted.");
|
if (thread.deleted) return res.error(404, "This thread is already deleted.");
|
||||||
thread.state = "DELETED";
|
thread.deleted= true;
|
||||||
await thread.save();
|
await thread.save();
|
||||||
|
|
||||||
await MessageModel.updateMany({ threadID: thread.id }, { deleted: true });
|
await MessageModel.updateMany({ threadID: thread.id }, { deleted: true });
|
||||||
|
|
|
@ -28,13 +28,13 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="text-align:center;padding:8px">
|
<div style="text-align:center;padding:8px">
|
||||||
<% if (user && (user.id === thread.authorID || user.admin ) && thread.state !== "DELETED"){ %>
|
<% if (user && (user.id === thread.authorID || user.admin ) && !thread.deleted){ %>
|
||||||
<a onclick="delete_thread('<%= thread.id %>')" class="btn-outline-primary">DELETE</a>
|
<a onclick="delete_thread('<%= thread.id %>')" class="btn-outline-primary">DELETE</a>
|
||||||
<a onclick="edit_thread('<%= thread.id %>')" class="btn-outline-primary">EDIT</a>
|
<a onclick="edit_thread('<%= thread.id %>')" class="btn-outline-primary">EDIT</a>
|
||||||
<% } else if (thread.state == "DELETED") { %>
|
<% } else if (thread.deleted) { %>
|
||||||
<h4 class="title" style="display:inline; font-size: 20px;">This thread has been deleted</h3>
|
<h4 class="title" style="display:inline; font-size: 20px;">This thread has been deleted</h3>
|
||||||
<a onclick="undelete_thread('<%= thread.id %>')" class="btn-primary">UNDELETE</a>
|
<a onclick="undelete_thread('<%= thread.id %>')" class="btn-primary">UNDELETE</a>
|
||||||
<% }; %>
|
<% }; %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="messages">
|
<div id="messages">
|
||||||
|
|
|
@ -17,11 +17,11 @@
|
||||||
<a href="<%= thread.getLink() %>" class="">
|
<a href="<%= thread.getLink() %>" class="">
|
||||||
<div class="threads-box">
|
<div class="threads-box">
|
||||||
<div class="thread-box-title">
|
<div class="thread-box-title">
|
||||||
<% if (thread.state == "DELETED") { %> <span>[DELETED]</span><% } %>
|
<% if (thread.deleted) { %> <span>[DELETED]</span><% } %>
|
||||||
<%= thread.title %>
|
<%= thread.title %>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-username">
|
<div class="box-username">
|
||||||
<% if (user?.admin && thread.state !== "DELETED"){ %>
|
<% if (user?.admin && !thread.deleted){ %>
|
||||||
<a class="btn-danger" onclick="fetch('/api/threads/<%= thread.id %>/',{method:'DELETE'})"><i class="bx bx-trash bx-sm"></i></a>
|
<a class="btn-danger" onclick="fetch('/api/threads/<%= thread.id %>/',{method:'DELETE'})"><i class="bx bx-trash bx-sm"></i></a>
|
||||||
<% } %>
|
<% } %>
|
||||||
<%= thread.author.name %> <div class="avatar"><img src="<%=thread.author.avatar %>"> </div>
|
<%= thread.author.name %> <div class="avatar"><img src="<%=thread.author.avatar %>"> </div>
|
||||||
|
|
Loading…
Reference in a new issue