Fixing more API endpoints
parent
b3b1a3ae00
commit
d57fd17718
|
@ -140,6 +140,20 @@ $(document).ready(function (){
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('.btn-delete-product').on('click', function(){
|
||||||
|
$.ajax({
|
||||||
|
method: 'POST',
|
||||||
|
url: '/admin/product/delete',
|
||||||
|
data: { productId: $(this).attr('data-id') }
|
||||||
|
})
|
||||||
|
.done(function(msg){
|
||||||
|
showNotification(msg.message, 'success', true);
|
||||||
|
})
|
||||||
|
.fail(function(msg){
|
||||||
|
showNotification(msg.responseJSON.message, 'danger');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// Call to API to check if a permalink is available
|
// Call to API to check if a permalink is available
|
||||||
$(document).on('click', '#validate_permalink', function(e){
|
$(document).on('click', '#validate_permalink', function(e){
|
||||||
if($('#productPermalink').val() !== ''){
|
if($('#productPermalink').val() !== ''){
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -15,7 +15,8 @@ router.get('/admin/products', restrict, async (req, res, next) => {
|
||||||
const topResults = await db.products.find({}).sort({ productAddedDate: -1 }).limit(10).toArray();
|
const topResults = await db.products.find({}).sort({ productAddedDate: -1 }).limit(10).toArray();
|
||||||
res.render('products', {
|
res.render('products', {
|
||||||
title: 'Cart',
|
title: 'Cart',
|
||||||
top_results: topResults,
|
results: topResults,
|
||||||
|
resultType: 'top',
|
||||||
session: req.session,
|
session: req.session,
|
||||||
admin: true,
|
admin: true,
|
||||||
config: req.app.config,
|
config: req.app.config,
|
||||||
|
@ -46,6 +47,7 @@ router.get('/admin/products/filter/:search', restrict, async (req, res, next) =>
|
||||||
res.render('products', {
|
res.render('products', {
|
||||||
title: 'Results',
|
title: 'Results',
|
||||||
results: results,
|
results: results,
|
||||||
|
resultType: 'filtered',
|
||||||
admin: true,
|
admin: true,
|
||||||
config: req.app.config,
|
config: req.app.config,
|
||||||
session: req.session,
|
session: req.session,
|
||||||
|
@ -148,7 +150,7 @@ router.post('/admin/product/insert', restrict, checkAccess, async (req, res) =>
|
||||||
|
|
||||||
// If API request, return json
|
// If API request, return json
|
||||||
if(req.apiAuthenticated){
|
if(req.apiAuthenticated){
|
||||||
res.status(400).json({ error: 'Permalink already exists. Pick a new one.' });
|
res.status(400).json({ message: 'Permalink already exists. Pick a new one.' });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,7 +197,7 @@ router.post('/admin/product/insert', restrict, checkAccess, async (req, res) =>
|
||||||
|
|
||||||
// If API request, return json
|
// If API request, return json
|
||||||
if(req.apiAuthenticated){
|
if(req.apiAuthenticated){
|
||||||
res.status(400).json({ error: 'Error inserting document' });
|
res.status(400).json({ message: 'Error inserting document' });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,7 +285,7 @@ router.post('/admin/product/update', restrict, checkAccess, async (req, res) =>
|
||||||
|
|
||||||
// If API request, return json
|
// If API request, return json
|
||||||
if(req.apiAuthenticated){
|
if(req.apiAuthenticated){
|
||||||
res.status(400).json({ messge: 'Failed to update product' });
|
res.status(400).json({ message: 'Failed to update product' });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -294,7 +296,7 @@ router.post('/admin/product/update', restrict, checkAccess, async (req, res) =>
|
||||||
if(count > 0 && req.body.productPermalink !== ''){
|
if(count > 0 && req.body.productPermalink !== ''){
|
||||||
// If API request, return json
|
// If API request, return json
|
||||||
if(req.apiAuthenticated){
|
if(req.apiAuthenticated){
|
||||||
res.status(400).json({ messge: 'Permalink already exists. Pick a new one' });
|
res.status(400).json({ message: 'Permalink already exists. Pick a new one.' });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -399,7 +401,7 @@ router.post('/admin/product/update', restrict, checkAccess, async (req, res) =>
|
||||||
}catch(ex){
|
}catch(ex){
|
||||||
// If API request, return json
|
// If API request, return json
|
||||||
if(req.apiAuthenticated){
|
if(req.apiAuthenticated){
|
||||||
res.status(400).json({ messge: 'Failed to save. Please try again' });
|
res.status(400).json({ message: 'Failed to save. Please try again' });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -411,25 +413,23 @@ router.post('/admin/product/update', restrict, checkAccess, async (req, res) =>
|
||||||
});
|
});
|
||||||
|
|
||||||
// delete product
|
// delete product
|
||||||
router.get('/admin/product/delete/:id', restrict, checkAccess, async (req, res) => {
|
router.post('/admin/product/delete', restrict, checkAccess, async (req, res) => {
|
||||||
const db = req.app.db;
|
const db = req.app.db;
|
||||||
|
|
||||||
// remove the product
|
// remove the product
|
||||||
await db.products.deleteOne({ _id: common.getId(req.params.id) }, {});
|
await db.products.deleteOne({ _id: common.getId(req.body.productId) }, {});
|
||||||
|
|
||||||
// delete any images and folder
|
// delete any images and folder
|
||||||
rimraf('public/uploads/' + req.params.id, (err) => {
|
rimraf('public/uploads/' + req.body.productId, (err) => {
|
||||||
if(err){
|
if(err){
|
||||||
console.info(err.stack);
|
console.info(err.stack);
|
||||||
|
res.status(400).json({ message: 'Failed to delete product' });
|
||||||
}
|
}
|
||||||
|
|
||||||
// re-index products
|
// re-index products
|
||||||
indexProducts(req.app)
|
indexProducts(req.app)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
// redirect home
|
res.status(200).json({ message: 'Product successfully deleted' });
|
||||||
req.session.message = 'Product successfully deleted';
|
|
||||||
req.session.messageType = 'success';
|
|
||||||
res.redirect('/admin/products');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -440,10 +440,10 @@ router.post('/admin/product/published_state', restrict, checkAccess, async (req,
|
||||||
|
|
||||||
try{
|
try{
|
||||||
await db.products.updateOne({ _id: common.getId(req.body.id) }, { $set: { productPublished: common.convertBool(req.body.state) } }, { multi: false });
|
await db.products.updateOne({ _id: common.getId(req.body.id) }, { $set: { productPublished: common.convertBool(req.body.state) } }, { multi: false });
|
||||||
res.status(200).json('Published state updated');
|
res.status(200).json({ message: 'Published state updated' });
|
||||||
}catch(ex){
|
}catch(ex){
|
||||||
console.error(colors.red('Failed to update the published state: ' + ex));
|
console.error(colors.red('Failed to update the published state: ' + ex));
|
||||||
res.status(400).json('Published state not updated');
|
res.status(400).json({ message: 'Published state not updated' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -13,37 +13,23 @@
|
||||||
</div>
|
</div>
|
||||||
<p class="text-warning top-pad-10">{{ @root.__ "Products can be filtered by: product title or product description keywords" }}</p>
|
<p class="text-warning top-pad-10">{{ @root.__ "Products can be filtered by: product title or product description keywords" }}</p>
|
||||||
</div>
|
</div>
|
||||||
{{#if results}}
|
<div class="col-lg-12">
|
||||||
<div class="col-lg-12">
|
<ul class="list-group">
|
||||||
<ul class="list-group">
|
<li class="list-group-item">
|
||||||
|
<span class="pull-right"><strong>{{ @root.__ "Published" }}</strong></span>
|
||||||
|
{{#ifCond resultType '==' 'filtered'}}
|
||||||
|
<strong>{{ @root.__ "Products" }} - <span class="text-danger">{{ @root.__ "Filtered term" }}: {{searchTerm}} </span></strong>
|
||||||
|
{{else}}
|
||||||
|
<strong>{{ @root.__ "Recent products" }}</strong>
|
||||||
|
{{/ifCond}}
|
||||||
|
</li>
|
||||||
|
{{#each results}}
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<span class="pull-right"><strong>{{ @root.__ "Published" }}</strong></span>
|
<button class="pull-right btn text-danger btn-delete-product" data-id="{{this._id}}"> <i class="fa fa-trash-o"></i></button>
|
||||||
<strong>{{ @root.__ "Products" }} - <span class="text-danger">{{ @root.__ "Filtered term" }}: {{searchTerm}} </span></strong>
|
<h4 class="pull-right"><input id="{{this._id}}" class="published_state" type="checkbox" {{checkedState this.productPublished}}></h4>
|
||||||
|
<h5><a href="/admin/product/edit/{{this._id}}">{{this.productTitle}}</a></h5>
|
||||||
</li>
|
</li>
|
||||||
{{#each results}}
|
{{/each}}
|
||||||
<li class="list-group-item">
|
</ul>
|
||||||
<h4 class="pull-right text-danger" style="padding-left: 10px;"><a class="text-danger" href="/admin/product/delete/{{this._id}}" onclick="return confirm('Are you sure you want to delete this product?');"> <i class="fa fa-trash-o"></i></a></h4>
|
</div>
|
||||||
<h4 class="pull-right"><input id="{{this._id}}" class="published_state" type="checkbox" {{checkedState this.productPublished}}></h4>
|
|
||||||
<h5><a href="/admin/product/edit/{{this._id}}">{{this.productTitle}}</a></h5>
|
|
||||||
</li>
|
|
||||||
{{/each}}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
{{else}}
|
|
||||||
<div class="col-lg-12">
|
|
||||||
<ul class="list-group">
|
|
||||||
<li class="list-group-item">
|
|
||||||
<span class="pull-right"><strong>{{ @root.__ "Published" }}</strong></span>
|
|
||||||
<strong>{{ @root.__ "Recent products" }}</strong>
|
|
||||||
</li>
|
|
||||||
{{#each top_results}}
|
|
||||||
<li class="list-group-item">
|
|
||||||
<h4 class="pull-right" style="padding-left: 10px;"><a class="text-danger" href="/admin/product/delete/{{this._id}}" onclick="return confirm('Are you sure you want to delete this product?');"> <i class="fa fa-trash-o"></i></a></h4>
|
|
||||||
<h4 class="pull-right"><input id="{{this._id}}" class="published_state" type="checkbox" {{checkedState this.productPublished}}></h4>
|
|
||||||
<h5><a href="/admin/product/edit/{{this._id}}">{{this.productTitle}}</a></h5>
|
|
||||||
</li>
|
|
||||||
{{/each}}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
</div>
|
Loading…
Reference in New Issue