瀏覽代碼

mercure implementation ongoing

Olivier Massot 3 年之前
父節點
當前提交
f029ec605e

+ 5 - 0
.env.local

@@ -17,3 +17,8 @@ CLIENT_ADMINLEG_BASE_URL=https://local.admin.opentalent.fr/#
 # Typo3 Base Url
 SSR_TYPO3_BASE_URL=https://local.sub.opentalent.fr/###subDomain###
 CLIENT_TYPO3_BASE_URL=https://local.sub.opentalent.fr/###subDomain###
+
+# Mercure push events
+MERCURE_URL=http://local.mercure.opentalent.fr/.well-known/mercure
+MERCURE_PUBLIC_URL=https://local.mercure.opentalent.fr/.well-known/mercure
+MERCURE_JWT_SECRET="8Kimwk38Kpv@JN04vE,iXM"

+ 39 - 0
components/Form/Export/LicenceCmfOrganizationER.vue

@@ -0,0 +1,39 @@
+<template>
+  <main>
+    <LayoutContainer>
+      <v-card class="mb-5">
+        <v-form
+          ref="form"
+          lazy-validation
+        >
+          <v-btn class="mr-4 ot_green ot_white--text" @click="">
+            {{ $t('generate') }}
+          </v-btn>
+        </v-form>
+      </v-card>
+    </LayoutContainer>
+  </main>
+</template>
+
+<script lang="ts">
+import { defineComponent } from '@nuxtjs/composition-api'
+import { Repository as VuexRepository } from '@vuex-orm/core/dist/src/repository/Repository'
+import { Query, Model } from '@vuex-orm/core'
+import { repositoryHelper } from '~/services/store/repository'
+import {LicenceCmfOrganizationER} from "~/models/Export/LicenceCmfOrganizationER";
+
+export default defineComponent({
+  setup() {
+    const repository: VuexRepository<Model> = repositoryHelper.getRepository(LicenceCmfOrganizationER)
+    const query: Query = repository.query()
+
+    return {
+      model: LicenceCmfOrganizationER,
+      query,
+    }
+  },
+  beforeDestroy: function () {
+    repositoryHelper.cleanRepository(LicenceCmfOrganizationER)
+  }
+})
+</script>

+ 1 - 1
layouts/error.vue

@@ -19,7 +19,7 @@ export default defineComponent({
   setup (props) {
     const {$config} = useContext()
     const baseLegacyUrl:string = $config.baseURL_adminLegacy
-    if(process.client && props.error.statusCode === 404)
+    if(process.client && props.error.statusCode === 404 && process.env.NODE_ENV === 'production')
       window.location.href= `${baseLegacyUrl}/dashboard`
 
     return {

+ 17 - 0
models/Export/LicenceCmfOrganizationER.ts

@@ -0,0 +1,17 @@
+import {Bool, Model, Num, Str, Uid} from "@vuex-orm/core";
+
+export class LicenceCmfOrganizationER extends Model {
+  static entity = 'licence_cmf_'
+
+  @Uid()
+  id!: number | string | null
+
+  @Str(null, {nullable: true})
+  format!: string | null
+
+  @Num(0, {nullable: false})
+  requesterId!: number | string | null
+
+  @Bool(false, {nullable: false})
+  async!: boolean
+}

+ 29 - 4
pages/cmf_licence/organization.vue

@@ -8,19 +8,44 @@
       {{ $t('cmf_licence_details_url')}}
     </a>
 
-    <v-btn class="ma-12">{{ $t('generate') }}</v-btn>
+    <v-form
+      ref="form"
+      lazy-validation
+    >
+
+      <v-btn class="ma-12" @click="submit">{{ $t('generate') }}</v-btn>
+
+    </v-form>
   </div>
 </template>
 
-<script>
-import { defineComponent } from "@nuxtjs/composition-api";
+<script lang="ts">
+import {defineComponent, useContext} from "@nuxtjs/composition-api";
+import {HTTP_METHOD, QUERY_TYPE} from "~/types/enums";
+import DataPersister from "~/services/data/dataPersister";
+import {DataPersisterArgs} from "~/types/interfaces";
 
 export default defineComponent({
   name: 'OrganizationCmfLicence',
   setup() {
+    const submit = async () => {
+      const response = await DataPersister.request(
+        '/api/export/cmf-licence/organization',
+        HTTP_METHOD.POST,
+        { type: QUERY_TYPE.DEFAULT, data: { format: 'pdf', async: true } } as DataPersisterArgs
+      )
+      console.debug(response)
 
+      const eventSource = new EventSource("https://local.mercure.opentalent.fr/.well-known/mercure/ui/files/602066");
+      eventSource.onmessage = event => {
+        // Will be called every time an update is published by the server
+        console.log(JSON.parse(event.data));
+      }
+    }
 
-    return {}
+    return {
+      submit
+    }
   }
 })
 </script>

+ 11 - 5
services/connection/connection.ts

@@ -1,5 +1,5 @@
 import {NuxtAxiosInstance} from '@nuxtjs/axios'
-import {AxiosRequestConfig} from 'axios'
+import {AxiosRequestConfig, AxiosResponse} from 'axios'
 import {AnyJson, DataPersisterArgs, DataProviderArgs, UrlArgs} from '~/types/interfaces'
 import {HTTP_METHOD, QUERY_TYPE} from '~/types/enums'
 import TypesTesting from "~/services/utils/typesTesting";
@@ -45,8 +45,14 @@ class Connection {
         if (!args.data) {
           throw new Error('*args* has no data')
         }
-        return method === HTTP_METHOD.PUT ? Connection.put(url, args.id, args.data, args.showProgress, args.params) :
-                                            Connection.post(url, args.data, args.showProgress, args.params)
+
+        switch (method) {
+          case HTTP_METHOD.PUT:
+            return Connection.put(url, args.id, args.data, args.showProgress, args.params)
+          case HTTP_METHOD.POST:
+            return Connection.post(url, args.data, args.showProgress, args.params)
+        }
+        break;
 
       case HTTP_METHOD.DELETE:
         return Connection.deleteItem(url, args.id, args.showProgress, args.params)
@@ -102,7 +108,7 @@ class Connection {
    * @param {AnyJson} params
    * @return {Promise<any>}
    */
-  public static post (url: string, data: AnyJson, progress: boolean = true, params: AnyJson = {}): Promise<any> {
+  public static post(url: string, data: AnyJson, progress: boolean = true, params: AnyJson = {}): Promise<any> {
     const config: AxiosRequestConfig = {
       url: `${url}`,
       method: HTTP_METHOD.POST,
@@ -156,7 +162,7 @@ class Connection {
    * @param {AxiosRequestConfig} config
    * @return {Promise<any>}
    */
-  public static async request (config: AxiosRequestConfig): Promise<any> {
+  public static async request (config: AxiosRequestConfig): Promise<AxiosResponse> {
     return await Connection.connector.$request(config)
   }
 }

+ 1 - 1
services/data/baseDataManager.ts

@@ -62,7 +62,7 @@ abstract class BaseDataManager extends Hookable implements DataManager {
    * @param {HTTP_METHOD} method
    * @param {UrlArgs} args
    */
-  protected static request (url: string, method: HTTP_METHOD, args: UrlArgs): Promise<any> {
+  public static request (url: string, method: HTTP_METHOD, args: UrlArgs): Promise<any> {
     return Connection.invoke(method, url, args)
   }
 }

+ 0 - 1
services/data/dataPersister.ts

@@ -33,7 +33,6 @@ class DataPersister extends BaseDataManager {
       queryArguments.id ? HTTP_METHOD.PUT : HTTP_METHOD.POST,
       queryArguments
     )
-
     // Deserialize, post-process and return the response
     return await this.provideResponse(response, queryArguments)
   }