From 60ed843bedc98a8e52dbbca0c9b37a4810dc51ae Mon Sep 17 00:00:00 2001
From: Hugo SUBTIL <ext.sopra.husubtil@grandlyon.com>
Date: Fri, 26 Feb 2021 14:14:16 +0100
Subject: [PATCH] feat: add Ghost admin client

---
 package-lock.json               | 56 ++++++++++++++++++++++++++-------
 package.json                    |  3 +-
 src/posts/posts.module.ts       |  2 ++
 src/posts/posts.service.spec.ts | 18 +++++++++++
 src/posts/posts.service.ts      | 17 ++++++++++
 5 files changed, 83 insertions(+), 13 deletions(-)
 create mode 100644 src/posts/posts.service.spec.ts
 create mode 100644 src/posts/posts.service.ts

diff --git a/package-lock.json b/package-lock.json
index dc0afa3bb..f7c3c6c63 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1334,14 +1334,26 @@
       }
     },
     "@nestjs/common": {
-      "version": "7.5.1",
-      "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-7.5.1.tgz",
-      "integrity": "sha512-UKTWa/MFTryRm4L9b+lsKFg+m/B4zDCsx/pQAMZVCYMW4FRg6QH4BIaq5fMz5G2hL5IFlFVoOC/eXJwhGDOrYA==",
+      "version": "7.6.13",
+      "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-7.6.13.tgz",
+      "integrity": "sha512-xijw6so4yA8Ywi8mnrA7Kz97ZC36u20Eyb5/XvmokdLcgTcTyHVdE39r44JYnjHPf8SKZoJ965zdu/fKl4s4GQ==",
       "requires": {
-        "axios": "0.21.0",
+        "axios": "0.21.1",
         "iterare": "1.2.1",
-        "tslib": "2.0.3",
-        "uuid": "8.3.1"
+        "tslib": "2.1.0",
+        "uuid": "8.3.2"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
+          "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A=="
+        },
+        "uuid": {
+          "version": "8.3.2",
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+          "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+        }
       }
     },
     "@nestjs/core": {
@@ -1627,6 +1639,26 @@
         "defer-to-connect": "^1.0.1"
       }
     },
+    "@tryghost/admin-api": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmjs.org/@tryghost/admin-api/-/admin-api-1.3.8.tgz",
+      "integrity": "sha512-xRyyc3b29xcfyGhUx3nfvsJhXBz7+2NMWbAzSijKphQooCfG7L45XsfF9oRXwEToXUfHbnpBqvzKtsCIp6i8NA==",
+      "requires": {
+        "axios": "0.21.1",
+        "form-data": "^3.0.0",
+        "jsonwebtoken": "^8.4.0"
+      },
+      "dependencies": {
+        "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"
+          }
+        }
+      }
+    },
     "@types/anymatch": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz",
@@ -2754,9 +2786,9 @@
       "dev": true
     },
     "axios": {
-      "version": "0.21.0",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.0.tgz",
-      "integrity": "sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==",
+      "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"
       }
@@ -7108,9 +7140,9 @@
       "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
     },
     "ini": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
-      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+      "version": "1.3.8",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
     },
     "inquirer": {
       "version": "7.3.3",
diff --git a/package.json b/package.json
index 9a2df72b3..996c2345b 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,7 @@
     "test:e2e": "jest --config ./test/jest-e2e.json"
   },
   "dependencies": {
-    "@nestjs/common": "^7.5.1",
+    "@nestjs/common": "^7.6.13",
     "@nestjs/core": "^7.5.1",
     "@nestjs/jwt": "^7.2.0",
     "@nestjs/mongoose": "^7.1.0",
@@ -30,6 +30,7 @@
     "@nestjs/platform-express": "^7.5.1",
     "@nestjs/schedule": "^0.4.1",
     "@nestjs/swagger": "^4.7.5",
+    "@tryghost/admin-api": "^1.3.8",
     "@types/bcrypt": "^3.0.0",
     "bcrypt": "^5.0.0",
     "class-transformer": "^0.3.1",
diff --git a/src/posts/posts.module.ts b/src/posts/posts.module.ts
index de11cb04f..90768fd6f 100644
--- a/src/posts/posts.module.ts
+++ b/src/posts/posts.module.ts
@@ -1,8 +1,10 @@
 import { HttpModule, Module } from '@nestjs/common';
 import { PostsController } from './posts.controller';
+import { PostsService } from './posts.service';
 
 @Module({
   imports: [HttpModule],
   controllers: [PostsController],
+  providers: [PostsService],
 })
 export class PostsModule {}
diff --git a/src/posts/posts.service.spec.ts b/src/posts/posts.service.spec.ts
new file mode 100644
index 000000000..e15215844
--- /dev/null
+++ b/src/posts/posts.service.spec.ts
@@ -0,0 +1,18 @@
+import { Test, TestingModule } from '@nestjs/testing';
+import { PostsService } from './posts.service';
+
+describe('PostsService', () => {
+  let service: PostsService;
+
+  beforeEach(async () => {
+    const module: TestingModule = await Test.createTestingModule({
+      providers: [PostsService],
+    }).compile();
+
+    service = module.get<PostsService>(PostsService);
+  });
+
+  it('should be defined', () => {
+    expect(service).toBeDefined();
+  });
+});
diff --git a/src/posts/posts.service.ts b/src/posts/posts.service.ts
new file mode 100644
index 000000000..0d4490c02
--- /dev/null
+++ b/src/posts/posts.service.ts
@@ -0,0 +1,17 @@
+import { HttpService, Injectable } from '@nestjs/common';
+import * as GhostAdminAPI from '@tryghost/admin-api';
+
+@Injectable()
+export class PostsService {
+  private api: any;
+
+  constructor(private readonly httpService: HttpService) {
+    // Configure Ghost client
+    this.api = new GhostAdminAPI({
+      url: process.env.GHOST_HOST_AND_PORT,
+      // Admin API key goes here
+      key: process.env.GHOST_HOST_AND_PORT,
+      version: 'v3',
+    });
+  }
+}
-- 
GitLab