From 2bfebb7017237a8547bbf367cff43d9926b4c564 Mon Sep 17 00:00:00 2001 From: HenriT Date: Thu, 26 Aug 2021 16:13:39 +0300 Subject: [PATCH] Wordpress backend adapter implemented. --- package-lock.json | 15 ++++ package.json | 1 + src/config/app.config.example.js | 4 + ...rage.config.js => local-storage.config.js} | 4 - src/services/adapters/local.adapter.js | 8 +- src/services/adapters/wordpress.adapter.js | 84 +++++++++++++++++++ src/services/team.service.js | 19 +---- 7 files changed, 113 insertions(+), 22 deletions(-) create mode 100644 src/config/app.config.example.js rename src/config/{storage.config.js => local-storage.config.js} (76%) diff --git a/package-lock.json b/package-lock.json index 4c99ca5..2221b26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2199,6 +2199,21 @@ "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", "dev": true }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + }, + "dependencies": { + "follow-redirects": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.2.tgz", + "integrity": "sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA==" + } + } + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", diff --git a/package.json b/package.json index bb1f7eb..3ea0ad2 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "@panter/vue-i18next": "^0.15.2", "@vuex-orm/core": "^0.36.3", "@vuex-orm/plugin-change-flags": "https://github.com/mareksmakosz/plugin-change-flags.git", + "axios": "^0.21.1", "bootstrap": "^4.5.2", "bootstrap-vue": "^2.17.3", "core-js": "^2.6.5", diff --git a/src/config/app.config.example.js b/src/config/app.config.example.js new file mode 100644 index 0000000..b0eb639 --- /dev/null +++ b/src/config/app.config.example.js @@ -0,0 +1,4 @@ +export default { + storageType: 'local', + wordpress_url: 'http://tih.test/wp-json/wp/v2/', +}; diff --git a/src/config/storage.config.js b/src/config/local-storage.config.js similarity index 76% rename from src/config/storage.config.js rename to src/config/local-storage.config.js index dbe4d74..e225e7e 100644 --- a/src/config/storage.config.js +++ b/src/config/local-storage.config.js @@ -5,7 +5,3 @@ storage.config({ version: 1.0, storeName: 'default', }); - -export default { - type: 'local', -}; diff --git a/src/services/adapters/local.adapter.js b/src/services/adapters/local.adapter.js index ccdf6af..143c90e 100644 --- a/src/services/adapters/local.adapter.js +++ b/src/services/adapters/local.adapter.js @@ -23,7 +23,9 @@ class LocalAdapter { removeVuexORMFlags(data); items.push(data); - return storage.setItem(uri, items); + await storage.setItem(uri, items); + + return data; } async patch(uri, data) { @@ -36,7 +38,9 @@ class LocalAdapter { removeVuexORMFlags(data); items[index] = data; - return storage.setItem(parts[0], items); + await storage.setItem(parts[0], items); + + return data; } return null; diff --git a/src/services/adapters/wordpress.adapter.js b/src/services/adapters/wordpress.adapter.js index 9c5f90a..4811275 100644 --- a/src/services/adapters/wordpress.adapter.js +++ b/src/services/adapters/wordpress.adapter.js @@ -1,4 +1,88 @@ +import axios from 'axios'; +import { removeVuexORMFlags } from '@/utils/helpers'; +import config from '@/config/app.config'; + +const http = axios.create({ + baseURL: config.wordpress_url, +}); + class WordpressAdapter { + async get(uri) { + const parts = uri.split('/'); + + if (parts.length === 1) { + const res = await http.get(`si_${parts[0]}`, { + params: { + context: 'edit', + _fields: 'content.raw', + }, + }) + .then(r => r.data); + + if (parts[0] === 'team') { + return res.length > 0 ? JSON.parse(res[0].content.raw) : null; + } + return res.map(item => JSON.parse(item.content.raw)); + } + + if (parts.length === 2) { + const res = await http.get(`si_${parts[0]}/${parts[1]}`, { + params: { + context: 'edit', + _fields: 'content.raw', + }, + }) + .then(r => r.data); + return JSON.parse(res.content.raw); + } + + return null; + } + + async post(uri, data) { + removeVuexORMFlags(data); + await http.post(`si_${uri}`, { + content: JSON.stringify(data), + status: 'publish', + slug: data.id, + }); + return data; + } + + async patch(uri, data) { + removeVuexORMFlags(data); + const parts = uri.split('/'); + + if (parts.length === 2) { + await http.post(`si_${parts[0]}/${parts[1]}`, { + content: JSON.stringify(data), + }); + return data; + } + + return null; + } + + async put(uri, data) { + if (uri === 'team') { + const res = await this.get('team'); + if (res) { + return this.patch(`${uri}/${res.id}`, data); + } + return this.post(uri, data); + } + return null; + } + + async delete(uri) { + const parts = uri.split('/'); + + if (parts.length === 2) { + return http.delete(`si_${parts[0]}/${parts[1]}`); + } + + return null; + } } export default new WordpressAdapter(); diff --git a/src/services/team.service.js b/src/services/team.service.js index 6629ff3..9da65d8 100644 --- a/src/services/team.service.js +++ b/src/services/team.service.js @@ -1,25 +1,12 @@ import data from '@/services/data.service'; +import Team from '@/store/models/team'; class TeamService { async getTeam() { let team = await data.get('team'); if (!team) { - team = { - company_name: null, - company_address: null, - company_postal_code: null, - company_country: null, - company_county: null, - company_city: null, - website: null, - contact_email: null, - contact_phone: null, - invoice_late_fee: null, - invoice_due_days: null, - updated_at: null, - created_at: null, - logo_url: null, - }; + team = new Team(); + await this.updateTeam(team); } return team;