Skip to content

Commit

Permalink
Merge pull request #11 from gaborszita/add-summary
Browse files Browse the repository at this point in the history
Add feature to delete summary and minor bug fix
  • Loading branch information
gaborszita authored Aug 7, 2022
2 parents 23fa161 + 4a44300 commit 270505f
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 15 deletions.
44 changes: 38 additions & 6 deletions src/controllers/books.ts
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,39 @@ export const postReviewSubmit = async(req: Request, res: Response) => {
}
};

// delete review submit
export const deleteReviewSubmit = async (req: Request, res: Response) => {
if (!req.isAuthenticated()) {
res.status(400).send('Not logged in');
return;
}

await check('isbn').isISBN().run(req);

const errors = validationResult(req);
if (!errors.isEmpty()) {
res.status(400).send('Invalid data');
return;
}

const user = req.user as IUser;
const isbn = req.body.isbn;

const book = await Book.findOne({ isbn: isbn });
if (!book) {
res.status(400).send('Invalid data');
return;
} else {
const review = await Review.findOneAndDelete({ user: user, book: book });
if (!review) {
res.status(400).send('Invalid data');
return;
}
await updateBookRating(book);
res.send('OK');
}
};

// post summary submit
export const postSummarySubmit = async (req: Request, res: Response) => {
if (!req.isAuthenticated()) {
Expand All @@ -229,7 +262,7 @@ export const postSummarySubmit = async (req: Request, res: Response) => {
res.status(400).send('Invalid data');
return;
}

const isbn = req.body.isbn;
const summary = req.body.summary;

Expand Down Expand Up @@ -275,8 +308,8 @@ export const postSummarySubmit = async (req: Request, res: Response) => {
}
};

// delete review submit
export const deleteReviewSubmit = async (req: Request, res: Response) => {
// delete summary submit
export const deleteSummarySubmit = async (req: Request, res: Response) => {
if (!req.isAuthenticated()) {
res.status(400).send('Not logged in');
return;
Expand All @@ -298,12 +331,11 @@ export const deleteReviewSubmit = async (req: Request, res: Response) => {
res.status(400).send('Invalid data');
return;
} else {
const review = await Review.findOneAndDelete({ user: user, book: book });
if (!review) {
const summary = await Summary.findOneAndDelete({ user: user, book: book });
if (!summary) {
res.status(400).send('Invalid data');
return;
}
await updateBookRating(book);
res.send('OK');
}
};
Expand Down
4 changes: 2 additions & 2 deletions src/public-source/sass/main.scss
Original file line number Diff line number Diff line change
Expand Up @@ -235,13 +235,13 @@ $tablet-width: 768px;
font-weight: bold;
}

.sbr-review-comment-user-delete {
.sbr-review-summary-comment-user-delete {
color: #ff0000;
text-decoration: underline;
font-size: .8rem;
}

.sbr-review-comment-user-deleting {
.sbr-review-summary-comment-user-deleting {
background: #ff333366;
}

Expand Down
46 changes: 43 additions & 3 deletions src/public/js/pages/book/book.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ function reviewFormSubmit(infobox) {
function deleteReview(ratingBox, errorInfoBox) {
const isbn = document.getElementById('isbn').value;

ratingBox.classList.add('sbr-review-comment-user-deleting');
ratingBox.classList.add('sbr-review-summary-comment-user-deleting');
const xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
Expand All @@ -59,7 +59,7 @@ function deleteReview(ratingBox, errorInfoBox) {
userReviewHrElement.remove();
}
} else if (this.readyState == 4) {
ratingBox.classList.remove('sbr-review-comment-user-deleting');
ratingBox.classList.remove('sbr-review-summary-comment-user-deleting');
Common.CommonUI.errorMessage(errorInfoBox, this.responseText);
}
};
Expand All @@ -76,6 +76,10 @@ function summaryFormSubmit(infobox) {
const isbn = document.getElementById('isbn').value;

let summary = document.getElementById('summary_text_area').value;
if (summary === '') {
Common.CommonUI.errorMessage(infobox, 'Summary cannot be empty!');
return;
}
Common.CommonUI.loadingIcon(infobox);

const xhttp = new XMLHttpRequest();
Expand All @@ -96,6 +100,34 @@ function summaryFormSubmit(infobox) {
xhttp.send(JSON.stringify(data));
}

function deleteSummary(summaryBox, errorInfoBox) {
const isbn = document.getElementById('isbn').value;

summaryBox.classList.add('sbr-review-summary-comment-user-deleting');
const xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
new Common.Collapse(summaryBox, {
hide: true
});
const userSummaryHrElement = document.getElementById('user_summary_hr');
if (userSummaryHrElement != null) {
userSummaryHrElement.remove();
}
} else if (this.readyState == 4) {
summaryBox.classList.remove('sbr-review-summary-comment-user-deleting');
Common.CommonUI.errorMessage(errorInfoBox, this.responseText);
}
};

xhttp.open('POST', config.siteUrl + '/books/delete-summary/submit/', true);
xhttp.setRequestHeader('Content-Type', 'application/json');
const data = {
isbn: isbn
};
xhttp.send(JSON.stringify(data));
}

document.getElementById('review_form_container').addEventListener(
'show.bs.collapse', function() {
if (!Common.Account.checkLogin()) {
Expand All @@ -122,4 +154,12 @@ document.getElementById('summary_form').addEventListener('submit',
function(event) {
event.preventDefault();
summaryFormSubmit(document.getElementById('summary_form_submit_info'))
});
});

if (document.getElementById('delete_summary') != null) {
document.getElementById('delete_summary').addEventListener('click',
function() {
deleteSummary(document.getElementById('user_summary'),
document.getElementById('summary_delete_error_info'));
});
}
5 changes: 4 additions & 1 deletion src/routes/books.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,7 @@ router.post('/books/post-summary/submit/', books.postSummarySubmit);
router.get('/books/isbn-validator/', books.isbnValidator);

// POST request for delete review submit
router.post('/books/delete-review/submit/', books.deleteReviewSubmit);
router.post('/books/delete-review/submit/', books.deleteReviewSubmit);

// POST request for delete summary submit
router.post('/books/delete-summary/submit/', books.deleteSummarySubmit);
8 changes: 5 additions & 3 deletions src/views/pages/book/book.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
<% if (userReview != null) { %>
<div id="user_review" class="collapse show">
<span class="sbr-review-summary-comment-name-user">Your review</span>
<a class="sbr-review-comment-user-delete" id="delete_review" href="javascript:void(0)">Delete review</a>
<a class="sbr-review-summary-comment-user-delete" id="delete_review" href="javascript:void(0)">Delete review</a>
<div class="sbr-rating-star">
<% for (let i=5; i>=1; i--) { %>
<input type="radio" id="user_review_rating_<%= i %>" disabled<% if (Math.round(userReview.rating)===i) { %> checked<% } %>>
Expand Down Expand Up @@ -103,11 +103,13 @@
<h5>No summaries for this book</h5>
<% } %>
<% if (userSummary != null) { %>
<div>
<div id="user_summary" class="collapse show">
<span class="sbr-review-summary-comment-name-user">Your summary</span>
<a class="sbr-review-summary-comment-user-delete" id="delete_summary" href="javascript:void(0)">Delete summary</a>
<p><%- userSummary.summary.replace(/(\r\n|\r|\n)/g, '<br>') %></p>
<div id="summary_delete_error_info"></div>
</div>
<% if (summaries.length>0) { %><hr><% } %>
<% if (summaries.length>0) { %><hr id="user_summary_hr"><% } %>
<% } %>
<% for (let k=0; k<summaries.length; k++) { %>
<div>
Expand Down

0 comments on commit 270505f

Please sign in to comment.