diff --git a/api/template-email/config/routes.json b/api/template-email/config/routes.json new file mode 100644 index 0000000..a881f63 --- /dev/null +++ b/api/template-email/config/routes.json @@ -0,0 +1,52 @@ +{ + "routes": [ + { + "method": "GET", + "path": "/template-emails", + "handler": "template-email.find", + "config": { + "policies": [] + } + }, + { + "method": "GET", + "path": "/template-emails/count", + "handler": "template-email.count", + "config": { + "policies": [] + } + }, + { + "method": "GET", + "path": "/template-emails/:id", + "handler": "template-email.findOne", + "config": { + "policies": [] + } + }, + { + "method": "POST", + "path": "/template-emails", + "handler": "template-email.create", + "config": { + "policies": [] + } + }, + { + "method": "PUT", + "path": "/template-emails/:id", + "handler": "template-email.update", + "config": { + "policies": [] + } + }, + { + "method": "DELETE", + "path": "/template-emails/:id", + "handler": "template-email.delete", + "config": { + "policies": [] + } + } + ] +} diff --git a/api/template-email/controllers/template-email.js b/api/template-email/controllers/template-email.js new file mode 100644 index 0000000..cfb2d81 --- /dev/null +++ b/api/template-email/controllers/template-email.js @@ -0,0 +1,60 @@ +"use strict"; +const { parseMultipartData, sanitizeEntity } = require("strapi-utils"); + +/** + * Read the documentation (https://strapi.io/documentation/v3.x/concepts/controllers.html#core-controllers) + * to customize this controller + */ + +module.exports = { + async create(ctx) { + const decrypted = await strapi.plugins[ + "users-permissions" + ].services.jwt.getToken(ctx); + let entity; + if (ctx.is("multipart")) { + const { data, files } = parseMultipartData(ctx); + DATA["last_updated_api_by"] = decrypted.id; + entity = await strapi.services["template-email"].create(data, { + files, + }); + } else { + let data = ctx.request.body; + DATA["last_updated_api_by"] = decrypted.id; + entity = await strapi.services["template-email"].create(data); + } + var entry = sanitizeEntity(entity, { + model: strapi.models["template-email"], + }); + return entry; + }, + async update(ctx) { + const { id } = ctx.params; + const decrypted = await strapi.plugins[ + "users-permissions" + ].services.jwt.getToken(ctx); + let entity; + if (ctx.is("multipart")) { + const { data, files } = parseMultipartData(ctx); + data["last_updated_api_by"] = decrypted.id; + entity = await strapi.services["template-email"].update( + { id }, + data, + { + files, + } + ); + } else { + let data = ctx.request.body; + data["last_updated_api_by"] = decrypted.id; + entity = await strapi.services["template-email"].update( + { id }, + data + ); + } + var entry = sanitizeEntity(entity, { + model: strapi.models["template-email"], + }); + return entry; + }, +}; \ No newline at end of file diff --git a/api/template-email/models/template-email.js b/api/template-email/models/template-email.js new file mode 100644 index 0000000..dd847ef --- /dev/null +++ b/api/template-email/models/template-email.js @@ -0,0 +1,8 @@ +'use strict'; + +/** + * Read the documentation (https://strapi.io/documentation/developer-docs/latest/concepts/models.html#lifecycle-hooks) + * to customize this model + */ + +module.exports = {}; diff --git a/api/template-email/models/template-email.settings.json b/api/template-email/models/template-email.settings.json new file mode 100644 index 0000000..bc18554 --- /dev/null +++ b/api/template-email/models/template-email.settings.json @@ -0,0 +1,26 @@ +{ + "kind": "collectionType", + "collectionName": "template_emails", + "info": { + "name": "TemplateEmail" + }, + "options": { + "increments": true, + "timestamps": true, + "draftAndPublish": true + }, + "attributes": { + "template_name": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "text": { + "type": "text" + }, + "html": { + "type": "text" + } + } +} diff --git a/api/template-email/services/template-email.js b/api/template-email/services/template-email.js new file mode 100644 index 0000000..6bc4168 --- /dev/null +++ b/api/template-email/services/template-email.js @@ -0,0 +1,8 @@ +'use strict'; + +/** + * Read the documentation (https://strapi.io/documentation/developer-docs/latest/concepts/services.html#core-services) + * to customize this service + */ + +module.exports = {}; diff --git a/config/plugin.js b/config/plugin.js new file mode 100644 index 0000000..e288ffc --- /dev/null +++ b/config/plugin.js @@ -0,0 +1,28 @@ +module.exports = ({ env }) => ({ + email: { + provider: "nodemailer", + providerOptions: { + host: env("SMTP_HOST"), + port: env("SMTP_PORT"), + secure: false, + auth: { + user: env("SMTP_USER"), + pass: env("SMTP_PASSWORD"), + }, + }, + settings: { + defaultFrom: "noreply@thamrin.co.id", + defaultReplyTo: "noreply@thamrin.co.id", + }, + }, + graphql : { + endpoint: "/graphql", + shadowCRUD: true, + playgroundAlways: false, + depthLimit: 1000, + apolloServer: { + tracing: false, + }, + }, + }); + \ No newline at end of file diff --git a/env-example.txt b/env-example.txt index 3566e91..46b4862 100644 --- a/env-example.txt +++ b/env-example.txt @@ -16,4 +16,16 @@ DATABASE_HOST=172.16.1.8 DATABASE_PORT=3306 DATABASE_NAME=thamrin_ecomm_tbg DATABASE_USERNAME=root -DATABASE_PASSWORD=Master81 \ No newline at end of file +DATABASE_PASSWORD=Master81 + +// localhost +DATABASE_HOST=localhost +DATABASE_PORT=3306 +DATABASE_NAME=tbg-ecomm-nextjs +DATABASE_USERNAME=root +DATABASE_PASSWORD= + +SMTP_HOST=mail.service.ac.id +SMTP_PORT=587 +SMTP_USER=user_smtp +SMTP_PASSWORD=password_smtp \ No newline at end of file diff --git a/package.json b/package.json index 6f7a892..29b2201 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "strapi-plugin-graphql": "3.4.6", "strapi-plugin-upload": "3.4.6", "strapi-plugin-users-permissions": "3.4.6", + "strapi-provider-email-nodemailer": "^3.6.3", "strapi-utils": "3.4.6" }, "author": { diff --git a/yarn.lock b/yarn.lock index b51e504..d2470ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6651,6 +6651,11 @@ lodash@4.17.20, lodash@^4.1.1, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +lodash@4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -7392,6 +7397,11 @@ nodemailer-shared@1.1.0: dependencies: nodemailer-fetch "1.6.0" +nodemailer@6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.6.0.tgz#ed47bb572b48d9d0dca3913fdc156203f438f427" + integrity sha512-ikSMDU1nZqpo2WUPE0wTTw/NGGImTkwpJKDIFPZT+YvvR9Sj+ze5wzu95JHkBMglQLoG2ITxU21WukCC/XsFkg== + noop-logger@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" @@ -10188,6 +10198,14 @@ strapi-plugin-users-permissions@3.4.6: strapi-utils "3.4.6" uuid "^3.1.0" +strapi-provider-email-nodemailer@^3.6.3: + version "3.6.3" + resolved "https://registry.yarnpkg.com/strapi-provider-email-nodemailer/-/strapi-provider-email-nodemailer-3.6.3.tgz#41bf98a7d8d8e11ad7ceb45d9fcfb0461d2749ea" + integrity sha512-teBnVIu/lN3iRJvuj85YAO1lsT0U/kH4SXT0yjvyTLw2qZ7DS3viRq+i+P+FT5uLyMEZpR0yVRXUtvRITC2ohQ== + dependencies: + lodash "4.17.21" + nodemailer "6.6.0" + strapi-provider-email-sendmail@3.4.6: version "3.4.6" resolved "https://registry.yarnpkg.com/strapi-provider-email-sendmail/-/strapi-provider-email-sendmail-3.4.6.tgz#6934a0386f53213767b4a320d322ff85fc721922"