feat(Issuers): add , edit, delete , toggle ,capability and currencies functionality
This commit is contained in:
@@ -12,4 +12,5 @@ export { currencyAPI } from './currencyAPI';
|
||||
export { countryAPI } from './countryAPI';
|
||||
export { provinceAPI } from './provinceAPI';
|
||||
export { cityAPI } from './cityAPI';
|
||||
export { issuerAPI } from './issuerAPI';
|
||||
export { listPermissions } from './permissionsAPI';
|
||||
|
||||
194
src/services/issuerAPI.js
Normal file
194
src/services/issuerAPI.js
Normal file
@@ -0,0 +1,194 @@
|
||||
import api from './apiClient';
|
||||
|
||||
// -----------------------------
|
||||
// Issuer API
|
||||
// -----------------------------
|
||||
export const issuerAPI = {
|
||||
// GET /api/v1/Issuer (with pagination)
|
||||
async list(params = {}) {
|
||||
const { currentPage = 1, pageSize = 100, ...otherParams } = params;
|
||||
const res = await api.get('/api/v1/Issuer', {
|
||||
params: { currentPage, pageSize, ...otherParams },
|
||||
skipAuthRedirect: true
|
||||
});
|
||||
return res?.data?.data?.data || [];
|
||||
},
|
||||
|
||||
// GET /api/v1/Issuer/{id}
|
||||
async getById(id) {
|
||||
const res = await api.get(`/api/v1/Issuer/${encodeURIComponent(id)}`, {
|
||||
skipAuthRedirect: true
|
||||
});
|
||||
console.log('Full API response:', res?.data);
|
||||
console.log('API response data:', res?.data?.data);
|
||||
return res?.data?.data;
|
||||
},
|
||||
|
||||
// POST /api/v1/Issuer
|
||||
async create(issuer) {
|
||||
const payload = {
|
||||
name: String(issuer?.name || ''),
|
||||
supportEmail: String(issuer?.supportEmail || ''),
|
||||
postalCode: String(issuer?.postalCode || ''),
|
||||
addressDetails: String(issuer?.addressDetails || '')
|
||||
};
|
||||
|
||||
// Include cityId - use null if empty or invalid
|
||||
if (issuer?.cityId && issuer.cityId !== '' && issuer.cityId !== 'null' && issuer.cityId !== null) {
|
||||
payload.cityId = issuer.cityId;
|
||||
} else {
|
||||
payload.cityId = null;
|
||||
}
|
||||
|
||||
console.log('Issuer Create Payload:', payload);
|
||||
const res = await api.post('/api/v1/Issuer', payload, { skipAuthRedirect: true });
|
||||
return res?.data;
|
||||
},
|
||||
|
||||
// PUT /api/v1/Issuer/{id}
|
||||
async update(id, issuer) {
|
||||
const payload = {
|
||||
name: String(issuer?.name || ''),
|
||||
supportEmail: String(issuer?.supportEmail || ''),
|
||||
postalCode: String(issuer?.postalCode || ''),
|
||||
addressDetails: String(issuer?.addressDetails || '')
|
||||
};
|
||||
|
||||
// Include cityId - use null if empty or invalid
|
||||
if (issuer?.cityId && issuer.cityId !== '' && issuer.cityId !== 'null' && issuer.cityId !== null) {
|
||||
payload.cityId = issuer.cityId;
|
||||
} else {
|
||||
payload.cityId = null;
|
||||
}
|
||||
|
||||
console.log('Issuer Update Payload:', payload);
|
||||
const res = await api.put(`/api/v1/Issuer/${encodeURIComponent(id)}`, payload, {
|
||||
skipAuthRedirect: true
|
||||
});
|
||||
return res?.data;
|
||||
},
|
||||
|
||||
// DELETE /api/v1/Issuer/{id}
|
||||
async remove(id) {
|
||||
const res = await api.delete(`/api/v1/Issuer/${encodeURIComponent(id)}`, {
|
||||
skipAuthRedirect: true
|
||||
});
|
||||
return res?.data;
|
||||
},
|
||||
|
||||
// PATCH /api/v1/Issuer/{id}/ToggleActivation
|
||||
async toggleActivation(id) {
|
||||
const res = await api.patch(`/api/v1/Issuer/${encodeURIComponent(id)}/ToggleActivation`, null, {
|
||||
skipAuthRedirect: true
|
||||
});
|
||||
return res?.data;
|
||||
},
|
||||
|
||||
// GET /api/v1/Issuer/{id}/Capabilities
|
||||
async getCapabilities(id) {
|
||||
try {
|
||||
const res = await api.get(`/api/v1/Issuer/${encodeURIComponent(id)}/Capabilities`, {
|
||||
skipAuthRedirect: true
|
||||
});
|
||||
// Response structure: { data: [...], statusCode, isSuccess, ... }
|
||||
const capabilities = res?.data?.data || [];
|
||||
console.log('Capabilities from API:', capabilities);
|
||||
return capabilities;
|
||||
} catch (err) {
|
||||
// Handle 404 gracefully - endpoint might not exist for some issuers
|
||||
if (err?.response?.status === 404) {
|
||||
console.warn('Capabilities endpoint not found (404), returning empty array');
|
||||
return [];
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
},
|
||||
|
||||
// PUT /api/v1/Issuer/{id}/Capabilities
|
||||
async updateCapabilities(id, capabilities) {
|
||||
// Filter out invalid capabilities and ensure all required fields are present
|
||||
const validCapabilities = Array.isArray(capabilities) ? capabilities
|
||||
.filter(cap => {
|
||||
const capabilityValue = typeof cap === 'string' ? cap : (cap.capability || '');
|
||||
return capabilityValue && String(capabilityValue).trim() !== '';
|
||||
})
|
||||
.map(cap => {
|
||||
const capabilityValue = typeof cap === 'string' ? cap : (cap.capability || '');
|
||||
const capabilityName = typeof cap === 'object' && cap.capabilityName ? cap.capabilityName : capabilityValue;
|
||||
const hasCapability = typeof cap === 'object' ? (cap.hasCapability !== undefined ? cap.hasCapability : true) : true;
|
||||
|
||||
// Ensure capability is a valid string (not empty, not null, not undefined)
|
||||
const capValue = String(capabilityValue).trim();
|
||||
if (!capValue) {
|
||||
return null; // Will be filtered out
|
||||
}
|
||||
|
||||
return {
|
||||
capability: capValue,
|
||||
capabilityName: String(capabilityName).trim() || capValue,
|
||||
hasCapability: Boolean(hasCapability)
|
||||
};
|
||||
})
|
||||
.filter(cap => cap !== null) : [];
|
||||
|
||||
// Wrap in IssuerManageCapabilitiesCommand structure
|
||||
const payload = {
|
||||
capabilities: validCapabilities
|
||||
};
|
||||
|
||||
console.log('Update Capabilities Payload:', JSON.stringify(payload, null, 2));
|
||||
console.log('Valid capabilities count:', validCapabilities.length);
|
||||
console.log('Capabilities details:', validCapabilities);
|
||||
|
||||
try {
|
||||
const res = await api.put(`/api/v1/Issuer/${encodeURIComponent(id)}/Capabilities`, payload, {
|
||||
skipAuthRedirect: true
|
||||
});
|
||||
return res?.data;
|
||||
} catch (err) {
|
||||
console.error('Capabilities update error details:', {
|
||||
status: err?.response?.status,
|
||||
data: err?.response?.data,
|
||||
errors: err?.response?.data?.errors,
|
||||
payload: payload
|
||||
});
|
||||
throw err;
|
||||
}
|
||||
},
|
||||
|
||||
// GET /api/v1/Issuer/{id}/AllowedCurrencies
|
||||
async getAllowedCurrencies(id) {
|
||||
try {
|
||||
const res = await api.get(`/api/v1/Issuer/${encodeURIComponent(id)}/AllowedCurrencies`, {
|
||||
skipAuthRedirect: true
|
||||
});
|
||||
// Response is a direct array: [{code, name, nativeName, symbol, numericCode, decimalPlaces}, ...]
|
||||
const currencies = Array.isArray(res?.data) ? res.data : (res?.data?.data || []);
|
||||
console.log('Allowed Currencies from API:', currencies);
|
||||
return currencies;
|
||||
} catch (err) {
|
||||
// Handle 404 gracefully - endpoint might not exist for some issuers
|
||||
if (err?.response?.status === 404) {
|
||||
console.warn('AllowedCurrencies endpoint not found (404), returning empty array');
|
||||
return [];
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
},
|
||||
|
||||
// PUT /api/v1/Issuer/{id}/AllowedCurrencies
|
||||
async updateAllowedCurrencies(id, allowedCurrencies) {
|
||||
const payload = {
|
||||
allowedCurrencies: Array.isArray(allowedCurrencies) ? allowedCurrencies.map(curr => ({
|
||||
currencyCode: curr.currencyCode || curr.code || '',
|
||||
currencyEnglishName: curr.currencyEnglishName || curr.name || '',
|
||||
allowed: curr.allowed !== undefined ? curr.allowed : true
|
||||
})) : []
|
||||
};
|
||||
const res = await api.put(`/api/v1/Issuer/${encodeURIComponent(id)}/AllowedCurrencies`, payload, {
|
||||
skipAuthRedirect: true
|
||||
});
|
||||
return res?.data;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -38,6 +38,14 @@ export const usersAPI = {
|
||||
}
|
||||
},
|
||||
async removeRole(userId,roleId){ try{ const res = await api.delete(`/api/v1/User/${encodeURIComponent(userId)}/Role/${encodeURIComponent(roleId)}`,{skipAuthRedirect:true}); return res?.data; } catch(err){ console.error(err); return null; } },
|
||||
async updateRoles(userId,roleIds=[]){ try{ const res = await api.post(`/api/v1/User/${encodeURIComponent(userId)}/Role`,{roleIds},{skipAuthRedirect:true}); return res?.data; } catch(err){ console.error(err); return null; } },
|
||||
async updateRoles(userId,roleIds=[]){
|
||||
try{
|
||||
const res = await api.put(`/api/v1/User/${encodeURIComponent(userId)}/Role`,{roleIds},{skipAuthRedirect:true});
|
||||
return res?.data;
|
||||
} catch(err){
|
||||
console.error(err);
|
||||
return null;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user