123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 |
- /*
- * <<
- * Davinci
- * ==
- * Copyright (C) 2016 - 2017 EDP
- * ==
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * >>
- */
- import { call, put, all, takeLatest, takeEvery } from 'redux-saga/effects'
- import { ActionTypes } from './constants'
- import { SourceActions, SourceActionType } from './actions'
- import omit from 'lodash/omit'
- import request from 'utils/request'
- import api from 'utils/api'
- import { errorHandler } from 'utils/util'
- import { message } from 'antd'
- import {
- ISourceBase,
- ISourceRaw,
- ISource,
- ISourceDatabases,
- IDatabaseTables,
- ITableColumns
- } from './types'
- export function* getSources(action: SourceActionType) {
- if (action.type !== ActionTypes.LOAD_SOURCES) {
- return
- }
- const { payload } = action
- try {
- const asyncData = yield call(
- request,
- `${api.source}?projectId=${payload.projectId}`
- )
- const sources = asyncData.payload as ISourceBase[]
- yield put(SourceActions.sourcesLoaded(sources))
- } catch (err) {
- yield put(SourceActions.loadSourcesFail())
- errorHandler(err)
- }
- }
- export function* addSource(action: SourceActionType) {
- if (action.type !== ActionTypes.ADD_SOURCE) {
- return
- }
- const { payload } = action
- try {
- const asyncData = yield call(request, {
- method: 'post',
- url: api.source,
- data: payload.source
- })
- payload.resolve()
- yield put(SourceActions.sourceAdded(asyncData.payload))
- } catch (err) {
- yield put(SourceActions.addSourceFail())
- errorHandler(err)
- }
- }
- export function* getSourceDetail(action: SourceActionType) {
- if (action.type !== ActionTypes.LOAD_SOURCE_DETAIL) {
- return
- }
- const { sourceId, resolve } = action.payload
- try {
- const asyncData = yield call(request, `${api.source}/${sourceId}`)
- const sourceRaw = asyncData.payload as ISourceRaw
- const source: ISource = {
- ...sourceRaw,
- config: JSON.parse(sourceRaw.config)
- }
- yield put(SourceActions.sourceDetailLoaded(source))
- if (resolve) {
- resolve(source)
- }
- } catch (err) {
- yield put(SourceActions.loadSourceDetailFail())
- errorHandler(err)
- }
- }
- export function* deleteSource(action: SourceActionType) {
- if (action.type !== ActionTypes.DELETE_SOURCE) {
- return
- }
- const { payload } = action
- try {
- const result = yield call(request, {
- method: 'delete',
- url: `${api.source}/${payload.id}`
- })
- const { code } = result.header
- yield put(SourceActions.sourceDeleted(payload.id))
- } catch (err) {
- yield put(SourceActions.deleteSourceFail())
- errorHandler(err)
- }
- }
- export function* editSource(action: SourceActionType) {
- if (action.type !== ActionTypes.EDIT_SOURCE) {
- return
- }
- const { source, resolve } = action.payload
- try {
- yield call(request, {
- method: 'put',
- url: `${api.source}/${source.id}`,
- data: source
- })
- const sourceBase = omit(source, 'config')
- yield put(SourceActions.sourceEdited(sourceBase))
- resolve()
- } catch (err) {
- yield put(SourceActions.editSourceFail())
- errorHandler(err)
- }
- }
- export function* testSourceConnection(action: SourceActionType) {
- if (action.type !== ActionTypes.TEST_SOURCE_CONNECTION) {
- return
- }
- const { payload } = action
- try {
- const res = yield call(request, {
- method: 'post',
- url: `${api.source}/test`,
- data: payload.testSource
- })
- yield put(SourceActions.sourceConnected())
- message.success('测试成功')
- } catch (err) {
- yield put(SourceActions.testSourceConnectionFail())
- errorHandler(err)
- }
- }
- export function* resetSourceConnection(action: SourceActionType) {
- if (action.type !== ActionTypes.RESET_SOURCE_CONNECTION) {
- return
- }
- const { properties, resolve } = action.payload
- const { sourceId, username, password } = properties
- try {
- yield call(request, {
- method: 'post',
- url: `${api.source}/reconnect/${sourceId}`,
- data: {
- dbUser: username,
- dbPassword: password
- }
- })
- yield put(SourceActions.sourceReset())
- message.success('连接重置成功')
- resolve()
- } catch (err) {
- yield put(SourceActions.resetSourceConnectionFail())
- errorHandler(err)
- }
- }
- export function* validateCsvTableName(action: SourceActionType) {
- if (action.type !== ActionTypes.VALIDATE_CSV_TABLE_NAME) {
- return
- }
- const { callback } = action.payload
- const { sourceId, mode, tableName } = action.payload.csvMeta
- try {
- yield call(request, {
- url: `${api.source}/${sourceId}/csvmeta`,
- method: 'post',
- data: {
- mode,
- tableName
- }
- })
- callback()
- } catch (err) {
- callback(err.response.data.header.msg)
- }
- }
- export function* uploadCsvFile(action: SourceActionType) {
- if (action.type !== ActionTypes.UPLOAD_CSV_FILE) {
- return
- }
- const { csvMeta, resolve, reject } = action.payload
- try {
- const formData = new FormData()
- Object.entries(csvMeta).forEach(([fieldName, fieldValue]) => {
- if (fieldValue || fieldValue === 0) {
- formData.append(fieldName, fieldValue)
- }
- })
- yield call(request, `${api.source}/${csvMeta.sourceId}/uploadcsv`, {
- method: 'POST',
- data: formData
- })
- resolve()
- } catch (err) {
- errorHandler(err)
- reject()
- }
- }
- export function* getSourceDatabases(action: SourceActionType) {
- if (action.type !== ActionTypes.LOAD_SOURCE_DATABASES) {
- return
- }
- const { sourceId } = action.payload
- try {
- const asyncData = yield call(request, `${api.source}/${sourceId}/databases`)
- const sourceDatabases: ISourceDatabases = asyncData.payload
- yield put(SourceActions.sourceDatabasesLoaded(sourceDatabases))
- } catch (err) {
- yield put(SourceActions.loadSourceDatabasesFail(err))
- errorHandler(err)
- }
- }
- export function* getDatabaseTables(action: SourceActionType) {
- if (action.type !== ActionTypes.LOAD_SOURCE_DATABASE_TABLES) {
- return
- }
- const { databaseName, sourceId } = action.payload
- try {
- const asyncData = yield call(
- request,
- `${api.source}/${sourceId}/tables?dbName=${databaseName}`
- )
- const databaseTables: IDatabaseTables = asyncData.payload
- yield put(SourceActions.databaseTablesLoaded(databaseTables))
- } catch (err) {
- yield put(SourceActions.loadDatabaseTablesFail(err))
- errorHandler(err)
- }
- }
- export function* getTableColumns(action: SourceActionType) {
- if (action.type !== ActionTypes.LOAD_SOURCE_TABLE_COLUMNS) {
- return
- }
- const { sourceId, databaseName, tableName, resolve } = action.payload
- try {
- const asyncData = yield call(
- request,
- `${api.source}/${sourceId}/table/columns?dbName=${databaseName}&tableName=${tableName}`
- )
- const tableColumns: ITableColumns = {
- ...asyncData.payload,
- dbName: databaseName
- }
- yield put(SourceActions.tableColumnsLoaded(databaseName, tableColumns))
- if (resolve) {
- resolve(tableColumns)
- }
- } catch (err) {
- yield put(SourceActions.loadTableColumnsFail(err))
- errorHandler(err)
- }
- }
- export function* getDatasourcesInfo(action: SourceActionType) {
- if (action.type !== ActionTypes.LOAD_DATASOURCES_INFO) {
- return
- }
- try {
- const asyncData = yield call(request, `${api.source}/jdbc/datasources`)
- yield put(SourceActions.datasourcesInfoLoaded(asyncData.payload))
- } catch (err) {
- yield put(SourceActions.loadDatasourcesInfoFail(err))
- errorHandler(err)
- }
- }
- export default function* rootSourceSaga() {
- yield all([
- takeLatest(ActionTypes.LOAD_SOURCES, getSources),
- takeEvery(ActionTypes.LOAD_SOURCE_DETAIL, getSourceDetail),
- takeEvery(ActionTypes.ADD_SOURCE, addSource),
- takeEvery(ActionTypes.DELETE_SOURCE, deleteSource),
- takeEvery(ActionTypes.EDIT_SOURCE, editSource),
- takeEvery(ActionTypes.TEST_SOURCE_CONNECTION, testSourceConnection),
- takeEvery(ActionTypes.RESET_SOURCE_CONNECTION, resetSourceConnection),
- takeLatest(ActionTypes.VALIDATE_CSV_TABLE_NAME, validateCsvTableName),
- takeEvery(ActionTypes.UPLOAD_CSV_FILE, uploadCsvFile),
- takeEvery(ActionTypes.LOAD_SOURCE_DATABASES, getSourceDatabases),
- takeEvery(ActionTypes.LOAD_SOURCE_DATABASE_TABLES, getDatabaseTables),
- takeEvery(ActionTypes.LOAD_SOURCE_TABLE_COLUMNS, getTableColumns),
- takeLatest(ActionTypes.LOAD_DATASOURCES_INFO, getDatasourcesInfo)
- ])
- }
|