@digicms/cms
Version:
An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite
93 lines (79 loc) • 1.78 kB
JavaScript
/**
* Webhook store is the implementation of webhook storage over the core_store
*/
;
const webhookModel = {
uid: 'webhook',
collectionName: 'strapi_webhooks',
attributes: {
name: {
type: 'string',
},
url: {
type: 'text',
},
headers: {
type: 'json',
},
events: {
type: 'json',
},
enabled: {
type: 'boolean',
},
},
};
const toDBObject = (data) => {
return {
name: data.name,
url: data.url,
headers: data.headers,
events: data.events,
enabled: data.isEnabled,
};
};
const fromDBObject = (row) => {
return {
id: row.id,
name: row.name,
url: row.url,
headers: row.headers,
events: row.events,
isEnabled: row.enabled,
};
};
const createWebhookStore = ({ db }) => {
const webhookQueries = db.query('webhook');
return {
async findWebhooks() {
const results = await webhookQueries.findMany();
return results.map(fromDBObject);
},
async findWebhook(id) {
const result = await webhookQueries.findOne({ where: { id } });
return result ? fromDBObject(result) : null;
},
createWebhook(data) {
return webhookQueries
.create({
data: toDBObject({ ...data, isEnabled: true }),
})
.then(fromDBObject);
},
async updateWebhook(id, data) {
const webhook = await webhookQueries.update({
where: { id },
data: toDBObject(data),
});
return webhook ? fromDBObject(webhook) : null;
},
async deleteWebhook(id) {
const webhook = await webhookQueries.delete({ where: { id } });
return webhook ? fromDBObject(webhook) : null;
},
};
};
module.exports = {
webhookModel,
createWebhookStore,
};