MT#64194 Migrate customer phonebook to api v2

- Migrate customer phonebook to api v2
- Replace api v1 patch methods on subscriber phonebook with api v2 endpoints

Change-Id: I2230fadaa315a7f828e9936342c17d18fe4e048b
master
nidrissi-zouggari 4 weeks ago
parent 5a9fa7d09a
commit 518912b90d

@ -1,8 +1,8 @@
import { getList } from 'src/api/common'
import { get } from 'src/api/common'
export async function fetchPhonebookEntries (number) {
return getList({
resource: 'subscriberphonebookentries',
export async function fetchPhonebookEntries (subscriberId, number) {
return get({
path: `api/v2/subscribers/${subscriberId}/phonebook`,
params: { number }
})
}

@ -66,12 +66,12 @@ export async function setPreferenceCallBlocking (id, field, value) {
await addPreference(id, field, value)
}
export async function setPreferencePhonebook (id, field, value) {
export async function setPreferencePhonebook (subscriberId, phonebookId, field, value) {
if (value === undefined || value === null || value === '' || (Array.isArray(value) && !value.length)) {
await removePreferencePhonebook(id, field)
await removePreferencePhonebook(subscriberId, phonebookId, field)
} else {
try {
await replacePreferencePhonebook(id, field, value)
await replacePreferencePhonebook(subscriberId, phonebookId, field, value)
} catch (err) {
if (err) {
throw err
@ -79,12 +79,12 @@ export async function setPreferencePhonebook (id, field, value) {
}
}
}
export async function setPreferencePhonebookCustomer (id, field, value) {
export async function setPreferencePhonebookCustomer (customerId, phonebookId, field, value) {
if (value === undefined || value === null || value === '' || (Array.isArray(value) && !value.length)) {
await removePreferencePhonebookCustomer(id, field)
await removePreferencePhonebookCustomer(customerId, phonebookId, field)
} else {
try {
await replacePreferencePhonebookCustomer(id, field, value)
await replacePreferencePhonebookCustomer(customerId, phonebookId, field, value)
} catch (err) {
if (err) {
throw err
@ -124,15 +124,15 @@ export async function removePreference (id, field) {
fieldPath: field
})
}
export async function removePreferencePhonebook (id, field) {
export async function removePreferencePhonebook (subscriberId, phonebookId, field) {
return await patchRemove({
path: `api/subscriberphonebookentries/${id}`,
path: `api/v2/subscribers/${subscriberId}/phonebook/${phonebookId}`,
fieldPath: field
})
}
export async function removePreferencePhonebookCustomer (id, field) {
export async function removePreferencePhonebookCustomer (customerId, phonebookId, field) {
return await patchRemove({
path: `api/customerphonebookentries/${id}`,
path: `api/v2/customers/${customerId}/phonebook/${phonebookId}`,
fieldPath: field
})
}
@ -176,10 +176,10 @@ export function replacePreference (id, field, value) {
})
})
}
export function replacePreferencePhonebook (id, field, value) {
export function replacePreferencePhonebook (subscriberId, phonebookId, field, value) {
return new Promise((resolve, reject) => {
patchReplace({
path: `api/subscriberphonebookentries/${id}`,
path: `api/v2/subscribers/${subscriberId}/phonebook/${phonebookId}`,
fieldPath: field,
value
}).then(() => {
@ -189,10 +189,10 @@ export function replacePreferencePhonebook (id, field, value) {
})
})
}
export function replacePreferencePhonebookCustomer (id, field, value) {
export function replacePreferencePhonebookCustomer (customerId, phonebookId, field, value) {
return new Promise((resolve, reject) => {
patchReplace({
path: `api/customerphonebookentries/${id}`,
path: `api/v2/customers/${customerId}/phonebook/${phonebookId}`,
fieldPath: field,
value
}).then(() => {
@ -780,19 +780,8 @@ export async function getSubscriberPhonebook (options) {
return list
}
export async function getCustomerPhonebook (options) {
let all = false
if (options.rows === 0) {
delete options.rows
delete options.page
all = true
}
if (!options.order_by) {
delete options.order_by
delete options.order_by_direction
}
const list = await getList({
resource: 'customerphonebookentries',
all,
const list = await get({
path: `api/v2/customers/${options.customer_id}/phonebook`,
params: options
})
return list
@ -809,37 +798,44 @@ export async function createPhonebook (data) {
export async function createCustomerPhonebook (data) {
const payLoad = {
name: data.name,
number: data.number
number: data.number,
customer_id: Number(data.customer_id)
}
return await httpApi.post('api/customerphonebookentries/', payLoad)
return await httpApi.post(`api/v2/customers/${data.customer_id}/phonebook`, payLoad)
}
function createFormDataFromFile (payload) {
const formData = new FormData()
formData.append('file', payload.file)
return formData
}
export async function uploadCsv (context, formData) {
const payload = createFormDataFromFile(formData)
const config = {
headers: {
'Content-Type': 'text/csv'
'Content-Type': 'multipart/form-data'
}
}
const purgeExistingValue = formData?.purge_existing ? '1' : '0'
const purgeExistingValue = formData?.purge_existing ? 'true' : 'false'
await apiUploadCsv({
path: 'api/customerphonebookentries' + `/?purge_existing=${purgeExistingValue}&customer_id=${formData.customer_id}`,
data: formData.file,
path: `api/v2/customers/${formData?.customerId}/phonebook/?purge_existing=${purgeExistingValue}`,
data: payload,
config
})
}
export function setValueShared (id, value) {
return setPreferencePhonebook(id, 'shared', value)
export function setValueShared (subscriberId, phonebookId, value) {
return setPreferencePhonebook(subscriberId, phonebookId, 'shared', value)
}
export function setValueName (id, value) {
return setPreferencePhonebook(id, 'name', value)
export function setValueName (subscriberId, phonebookId, value) {
return setPreferencePhonebook(subscriberId, phonebookId, 'name', value)
}
export function setValueNameCustomer (id, value) {
return setPreferencePhonebookCustomer(id, 'name', value)
export function setValueNameCustomer (customerId, phonebookId, value) {
return setPreferencePhonebookCustomer(customerId, phonebookId, 'name', value)
}
export function setValueNumber (id, value) {
return setPreferencePhonebook(id, 'number', value)
export function setValueNumber (subscriberId, phonebookId, value) {
return setPreferencePhonebook(subscriberId, phonebookId, 'number', value)
}
export function setValueNumberCustomer (id, value) {
return setPreferencePhonebookCustomer(id, 'number', value)
export function setValueNumberCustomer (customerId, phonebookId, value) {
return setPreferencePhonebookCustomer(customerId, phonebookId, 'number', value)
}
export async function getRecordingStream (fileId) {
return await getAsBlob({

@ -169,7 +169,7 @@ export default {
...mapWaitingActions('user', {
loadCustomerPhonebook: 'loadCustomerPhonebook',
removeCustomerPhonebook: 'removeCustomerPhonebook',
ajaxDownloadPhonebookCSV: 'ajaxDownloadPhonebookCSV'
downloadPhonebookAsCSV: 'downloadPhonebookAsCSV'
}),
async refresh () {
await this.fetchPaginatedRegistrations({
@ -179,6 +179,7 @@ export default {
async fetchPaginatedRegistrations (props) {
const { page, rowsPerPage, sortBy, descending } = props.pagination
const count = await this.loadCustomerPhonebook({
customer_id: this.getCustomerId,
page,
rows: rowsPerPage,
order_by: sortBy,
@ -216,12 +217,15 @@ export default {
cancel: true,
persistent: true
}).onOk(async (data) => {
await this.removeCustomerPhonebook(row)
await this.removeCustomerPhonebook({
row,
customerId: this.getCustomerId
})
await this.refresh()
})
},
async downloadCSV () {
await this.ajaxDownloadPhonebookCSV(this.getCustomerId)
await this.downloadPhonebookAsCSV(this.getCustomerId)
}
}
}

@ -72,6 +72,7 @@ import { required } from '@vuelidate/validators'
import CscPageSticky from 'components/CscPageSticky'
import { showGlobalError } from 'src/helpers/ui'
import { mapWaitingActions } from 'vue-wait-vue3'
import { mapGetters } from 'vuex'
export default {
name: 'CscPageCustomerPhonebookAdd',
components: {
@ -97,6 +98,9 @@ export default {
}
},
computed: {
...mapGetters('user', [
'getCustomerId'
]),
nameErrorMessage () {
const errorsTab = this.v$.formData.name.$errors
if (errorsTab && errorsTab.length > 0 && errorsTab[0].$validator === 'required') {
@ -139,6 +143,7 @@ export default {
},
async confirm () {
try {
this.formData.customer_id = this.getCustomerId
await this.createPhonebookCustomer(this.formData)
this.$router.push('/user/pbx-configuration/customer-phonebook/')
} catch (error) {

@ -70,6 +70,7 @@ import useValidate from '@vuelidate/core'
import { required } from '@vuelidate/validators'
import CscPageSticky from 'components/CscPageSticky'
import { mapWaitingActions } from 'vue-wait-vue3'
import { mapGetters } from 'vuex'
export default {
name: 'CscPageCustomerPhonebookDetails',
components: {
@ -98,6 +99,11 @@ export default {
async mounted () {
await this.getPhonebook(this.id)
},
computed: {
...mapGetters('user', [
'getCustomerId'
])
},
methods: {
...mapWaitingActions('user', {
getPhonebookCustomerDetails: 'getPhonebookCustomerDetails',
@ -105,7 +111,7 @@ export default {
getValueNumberCustomer: 'getValueNumberCustomer'
}),
async getPhonebook (id) {
const response = await this.getPhonebookCustomerDetails(id)
const response = await this.getPhonebookCustomerDetails({ phonebookId: id, customerId: this.getCustomerId })
this.formData.name = response.data.name
this.formData.number = response.data.number
},
@ -121,12 +127,14 @@ export default {
},
async changeValueName () {
await this.getValueNameCustomer({
customerId: this.getCustomerId,
phonebookId: this.id,
name: this.formData.name
})
},
async changeValueNumber () {
await this.getValueNumberCustomer({
customerId: this.getCustomerId,
phonebookId: this.id,
number: this.formData.number
})

@ -99,7 +99,7 @@ export default {
return {
file: null,
purge_existing: false,
customer_id: this.getCustomerId()
customerId: this.getCustomerId()
}
},
cancel () {

@ -117,18 +117,21 @@ export default {
},
async changeValueName () {
await this.getValueName({
subscriberId: this.getSubscriberId,
phonebookId: this.id,
name: this.name
})
},
changeValueShared () {
this.getValueShared({
subscriberId: this.getSubscriberId,
phonebookId: this.id,
shared: this.shared
})
},
changeValueNumber () {
this.getValueNumber({
subscriberId: this.getSubscriberId,
phonebookId: this.id,
number: this.number
})

@ -19,6 +19,7 @@ import {
callToggleMicrophone,
callToggleRemoteAudio
} from 'src/api/ngcp-call'
import { getSubscriberId } from 'src/auth'
import { showGlobalError } from 'src/helpers/ui'
import { errorVisibilityTimeout } from 'src/store/call/common'
@ -42,8 +43,9 @@ export default {
},
async fetchPhonebookEntryName (context, number) {
try {
const phoneBookEntryArray = await fetchPhonebookEntries(number)
const phoneBookEntry = phoneBookEntryArray?.items[0] || null
const subscriberId = getSubscriberId()
const phoneBookEntryArray = await fetchPhonebookEntries(subscriberId, number)
const phoneBookEntry = phoneBookEntryArray?.data[0] || null
if (phoneBookEntry) {
context.commit('fetchPhonebookEntrySuccess', phoneBookEntry.name)
}

@ -583,22 +583,19 @@ export default {
const list = await getCustomerPhonebook({
...options
})
commit('setCustomerPhonebook', list.items)
commit('setCustomerPhonebook', list.data)
return list.totalCount
} catch (err) {
commit('setCustomerPhonebook', [])
throw err
}
},
async ajaxDownloadPhonebookCSV ({ commit }, customerId = 0) {
async downloadPhonebookAsCSV ({ commit }, customerId) {
const apiGetOptions = {
resource: 'customerphonebookentries',
resource: `v2/customers/${customerId}/phonebook`,
config: {
headers: {
Accept: 'text/csv'
},
params: {
customer_id: customerId
}
}
}
@ -614,8 +611,8 @@ export default {
async removeSubscriberPhonebook (context, { row, subscriberId }) {
await httpApi.delete(`api/v2/subscribers/${subscriberId}/phonebook/${row.id}`)
},
async removeCustomerPhonebook (context, row) {
await httpApi.delete(`api/customerphonebookentries/${row.id}`)
async removeCustomerPhonebook (context, { row, customerId }) {
await httpApi.delete(`api/v2/customers/${customerId}/phonebook/${row.id}`)
},
async getNcosLevelsSubscriber () {
const ncosLevel = []
@ -656,28 +653,28 @@ export default {
const list = await httpApi.get(`api/v2/subscribers/${subscriberId}/phonebook/${phonebookId}`)
return list
},
async getPhonebookCustomerDetails (context, id) {
const list = await httpApi.get(`api/customerphonebookentries/${id}`)
async getPhonebookCustomerDetails (context, { phonebookId, customerId }) {
const list = await httpApi.get(`api/v2/customers/${customerId}/phonebook/${phonebookId}`)
return list
},
async getValueShared (context, options) {
await setValueShared(options.phonebookId, options.shared)
await setValueShared(options.subscriberId, options.phonebookId, options.shared)
},
async updateValueShared (context, row) {
context.commit('setPhonebookShared', { id: row.id, value: !row.shared })
await setValueShared(row.id, row.shared)
await setValueShared(row.subscriber_id, row.id, row.shared)
},
async getValueName (context, options) {
await setValueName(options.phonebookId, options.name)
await setValueName(options.subscriberId, options.phonebookId, options.name)
},
async getValueNameCustomer (context, options) {
await setValueNameCustomer(options.phonebookId, options.name)
await setValueNameCustomer(options.customerId, options.phonebookId, options.name)
},
async getValueNumber (context, options) {
await setValueNumber(options.phonebookId, options.number)
await setValueNumber(options.subscriberId, options.phonebookId, options.number)
},
async getValueNumberCustomer (context, options) {
await setValueNumberCustomer(options.phonebookId, options.number)
await setValueNumberCustomer(options.customerId, options.phonebookId, options.number)
},
async createPhonebookSubscriber (context, data) {
await createPhonebook(data)

Loading…
Cancel
Save