UNPKG

9s-fe-core

Version:

Core functionalities for authentication, configuration, and repository management.

158 lines (157 loc) 7.45 kB
"use strict"; 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();