misuzu/assets/misuzu.js/comments/api.js
flashwave 7353553de7 Rewrote the comments system. (#1)
old one basically bitrotted to death, may it rinse in prosciutto

Reviewed-on: #1
Co-authored-by: flashwave <me@flash.moe>
Co-committed-by: flashwave <me@flash.moe>
2025-02-20 02:19:32 +00:00

144 lines
5.9 KiB
JavaScript

const MszCommentsApi = (() => {
return {
getCategory: async name => {
if(typeof name !== 'string' || name.trim() === '')
throw new Error('name is not a valid category name');
const { status, body } = await $xhr.get(
`/comments/categories/${name}`,
{ type: 'json' }
);
if(status !== 200)
throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' });
return body;
},
updateCategory: async (name, args) => {
if(typeof name !== 'string' || name.trim() === '')
throw new Error('name is not a valid category name');
if(typeof args !== 'object' || args === null)
throw new Error('args must be a non-null object');
const { status, body } = await $xhr.post(
`/comments/categories/${name}`,
{ csrf: true, type: 'json' },
args
);
if(status !== 200)
throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' });
return body;
},
getPost: async post => {
if(typeof post !== 'string' || post.trim() === '')
throw new Error('post is not a valid post id');
const { status, body } = await $xhr.get(
`/comments/posts/${post}`,
{ type: 'json' }
);
if(status !== 200)
throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' });
return body;
},
getPostReplies: async post => {
if(typeof post !== 'string' || post.trim() === '')
throw new Error('post is not a valid post id');
const { status, body } = await $xhr.get(
`/comments/posts/${post}/replies`,
{ type: 'json' }
);
if(status !== 200)
throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' });
return body;
},
createPost: async args => {
if(typeof args !== 'object' || args === null)
throw new Error('args must be a non-null object');
const { status, body } = await $xhr.post(
'/comments/posts',
{ csrf: true, type: 'json' },
args
);
if(status !== 201)
throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' });
return body;
},
updatePost: async (post, args) => {
if(typeof post !== 'string' || post.trim() === '')
throw new Error('post is not a valid post id');
if(typeof args !== 'object' || args === null)
throw new Error('args must be a non-null object');
const { status, body } = await $xhr.post(
`/comments/posts/${post}`,
{ csrf: true, type: 'json' },
args
);
if(status !== 200)
throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' });
return body;
},
deletePost: async post => {
if(typeof post !== 'string' || post.trim() === '')
throw new Error('post is not a valid post id');
const { status, body } = await $xhr.delete(`/comments/posts/${post}`, { csrf: true, type: 'json' });
if(status !== 204)
throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' });
},
restorePost: async post => {
if(typeof post !== 'string' || post.trim() === '')
throw new Error('post is not a valid post id');
const { status, body } = await $xhr.post(`/comments/posts/${post}/restore`, { csrf: true, type: 'json' });
if(status !== 200)
throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' });
},
nukePost: async post => {
if(typeof post !== 'string' || post.trim() === '')
throw new Error('post is not a valid post id');
const { status } = await $xhr.post(`/comments/posts/${post}/nuke`, { csrf: true, type: 'json' });
if(status !== 200)
throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' });
},
createVote: async (post, vote) => {
if(typeof post !== 'string' || post.trim() === '')
throw new Error('post is not a valid post id');
if(typeof vote === 'string')
vote = parseInt(vote);
if(typeof vote !== 'number' || isNaN(vote))
throw new Error('vote must be a number');
const { status, body } = await $xhr.post(
`/comments/posts/${post}/vote`,
{ csrf: true, type: 'json' },
{ vote }
);
if(status !== 201)
throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' });
return body;
},
deleteVote: async post => {
if(typeof post !== 'string' || post.trim() === '')
throw new Error('post is not a valid post id');
const { status, body } = await $xhr.delete(
`/comments/posts/${post}/vote`,
{ csrf: true, type: 'json' }
);
if(status !== 200)
throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' });
return body;
},
};
})();