9s-fe-core
Version:
Core functionalities for authentication, configuration, and repository management.
158 lines (157 loc) • 7.45 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.baseRepository = void 0;
const axios_1 = __importDefault(require("axios"));
const http_methods_1 = require("./enums/http_methods");
const base_storage_1 = __importDefault(require("../utils/base_storage"));
const response_model_1 = require("./models/response_model");
const env_1 = require("../configs/env");
const genUrl = (path) => {
const { apiBaseUrl } = (0, env_1.getConfig)();
return /^(http|https):\/\//.test(path) ? path : `${apiBaseUrl}/${path}`;
};
class BaseRepository {
constructor() {
this.csrfToken = null;
}
setCsrfToken(token) {
this.csrfToken = token;
}
submitRequest(request, signal) {
return __awaiter(this, void 0, void 0, function* () {
// Khởi tạo requestData từ request.request
if (!request.apiUrl) {
return { status: 500, message: 'Api url is missing!' };
}
let requestData = request.payload
? Object.assign({}, request.payload) : {};
let requestFilesData = null; // Khởi tạo biến cho requestFilesData
let apiUrlData = genUrl(request.apiUrl);
const httpMethodData = request.httpMethod;
const typeData = request.type
? request.type.toString()
: null;
// Nếu có thông tin phân trang, thêm vào requestData
if (request.pagination) {
requestData['limit'] = request.pagination.limit;
requestData['page'] = request.pagination.current_page;
}
const headers = Object.assign(Object.assign({}, BaseRepository._headers), { 'Accept-Language': 'en' });
if (this.csrfToken) {
headers['X-CSRF-Token'] = this.csrfToken;
}
// Xử lý token
const token = base_storage_1.default.getToken();
if (token) {
headers['Authorization'] = 'Bearer ' + token;
}
if (request.headers) {
Object.entries(request.headers).forEach(([key, value]) => {
headers[key] = value;
});
}
// Kiểm tra loại yêu cầu
if (httpMethodData === http_methods_1.HttpMethod.GET) {
// Chuyển đổi requestData thành query parameters
const queryString = new URLSearchParams(requestData).toString();
apiUrlData += `?${queryString}`; // Thêm query string vào URL
}
// Kiểm tra loại yêu cầu
if (typeData !== null &&
(httpMethodData === http_methods_1.HttpMethod.POST ||
httpMethodData === http_methods_1.HttpMethod.PUT ||
httpMethodData === http_methods_1.HttpMethod.PATCH)) {
if (request.payload) {
// Tạo requestDataTmp
let requestDataTmp = {};
if (request.requestFiles) {
// Thêm vào requestDataTmp
Object.entries(requestData).forEach(([key, value]) => {
var _a;
// Kiểm tra image có nhiều giá trị
const file = (_a = request.requestFiles) === null || _a === void 0 ? void 0 : _a.find(file => file.name === key);
if (file) {
requestDataTmp[`${typeData}[${key}][]`] = value;
}
else {
requestDataTmp[`${typeData}[${key}]`] = value;
}
});
}
else {
requestDataTmp = { [typeData]: requestData }; // Gán cả requestData cho typeData
}
requestData = requestDataTmp; // Gán lại requestData
}
// Xử lý upload files
if (request.requestFiles) {
requestFilesData = [];
request.requestFiles.map(item => {
const keyName = `${typeData}[${item.name}][]`;
requestFilesData.push({
name: keyName,
file: item.file,
});
});
}
}
// Gửi yêu cầu với FormData hoặc bình thường
try {
if (requestFilesData && requestFilesData.length > 0) {
// Nếu có file uploads
const formData = new FormData();
// Thêm dữ liệu từ requestData vào FormData
Object.entries(requestData).forEach(([key, value]) => {
formData.append(key, value); // Thêm từng mục vào FormData
});
// Thêm các file vào FormData
requestFilesData.forEach(file => {
if (file.file) {
formData.append(file.name, file.file);
}
});
// Gửi yêu cầu với FormData
const response = yield (0, axios_1.default)({
method: httpMethodData,
url: apiUrlData,
data: formData,
headers: Object.assign(Object.assign({}, headers), { 'Content-Type': 'multipart/form-data' }),
signal,
});
return (0, response_model_1.buildResponse)(response);
}
else {
// Gửi yêu cầu bình thường
const response = yield (0, axios_1.default)({
method: httpMethodData,
url: apiUrlData,
data: requestData, // Chuyển thẳng requestData
headers: headers,
signal
});
return (0, response_model_1.buildResponse)(response);
}
}
catch (error) {
return (0, response_model_1.buildResponse)(error);
}
});
}
}
BaseRepository._headers = {
'Content-Type': 'application/json; charset=utf-8',
Source: 'MOBILE',
};
exports.baseRepository = new BaseRepository();