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
|
||||
- change category name
|
||||
- click to user message count to view message W/search
|
||||
- add deleted => this.state=="DELETED"
|
||||
|
||||
## Major Version History
|
||||
- V4: Caching
|
||||
- V3: New Theme
|
||||
|
|
|
@ -12,7 +12,7 @@ const schema = new mongoose.Schema({
|
|||
|
||||
title: { type: String, maxlength: limits.title },
|
||||
oldTitles: [String],
|
||||
|
||||
|
||||
time: { type: Date, default: Date.now },
|
||||
edited: { type: Boolean, default: false },
|
||||
state: { type: String, default: defaultThreadState, enum: threadEnum },
|
||||
|
@ -22,6 +22,14 @@ const schema = new mongoose.Schema({
|
|||
|
||||
|
||||
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 () {
|
||||
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);
|
||||
|
||||
model.get = async id => {
|
||||
const thread = await model.findOne({ id })
|
||||
return await thread.get_author();
|
||||
};
|
||||
model.get = id => model.findOne({ id }).then(thread => thread.get_author());
|
||||
|
||||
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 (!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 });
|
||||
thread.state = state;
|
||||
}
|
||||
|
@ -99,8 +99,8 @@ app.delete("/:id/", async (req, res) => {
|
|||
if (user.id != thread.authorID && !user.admin)
|
||||
return res.error(403, "You have not got permission for this.");
|
||||
|
||||
if (thread.state == "DELETED") return res.error(404, "This thread is already deleted.");
|
||||
thread.state = "DELETED";
|
||||
if (thread.deleted) return res.error(404, "This thread is already deleted.");
|
||||
thread.deleted= true;
|
||||
await thread.save();
|
||||
|
||||
await MessageModel.updateMany({ threadID: thread.id }, { deleted: true });
|
||||
|
|
|
@ -28,13 +28,13 @@
|
|||
</div>
|
||||
|
||||
<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="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>
|
||||
<a onclick="undelete_thread('<%= thread.id %>')" class="btn-primary">UNDELETE</a>
|
||||
<% }; %>
|
||||
<a onclick="undelete_thread('<%= thread.id %>')" class="btn-primary">UNDELETE</a>
|
||||
<% }; %>
|
||||
</div>
|
||||
|
||||
<div id="messages">
|
||||
|
|
|
@ -17,11 +17,11 @@
|
|||
<a href="<%= thread.getLink() %>" class="">
|
||||
<div class="threads-box">
|
||||
<div class="thread-box-title">
|
||||
<% if (thread.state == "DELETED") { %> <span>[DELETED]</span><% } %>
|
||||
<% if (thread.deleted) { %> <span>[DELETED]</span><% } %>
|
||||
<%= thread.title %>
|
||||
</div>
|
||||
<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>
|
||||
<% } %>
|
||||
<%= thread.author.name %> <div class="avatar"><img src="<%=thread.author.avatar %>"> </div>
|
||||
|
|
Loading…
Reference in a new issue