Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
T
ts-api-demo
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wmvm
ts-api-demo
Commits
1b7af35b
Commit
1b7af35b
authored
Sep 24, 2024
by
ml
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加接口、逻辑调整
parent
b80e1120
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
331 additions
and
43 deletions
+331
-43
errorCode.ts
src/constant/errorCode.ts
+1
-0
contractPair.control.ts
src/functional/mvc/control/contractPair.control.ts
+68
-0
spotPair.control.ts
src/functional/mvc/control/spotPair.control.ts
+15
-1
contractPair.service.ts
src/functional/mvc/service/contractPair.service.ts
+106
-0
spotPair.service.ts
src/functional/mvc/service/spotPair.service.ts
+109
-20
index.ts
src/functional/router/v1/index.ts
+15
-10
access-limit.ts
src/setting/access-limit.ts
+17
-12
No files found.
src/constant/errorCode.ts
View file @
1b7af35b
...
...
@@ -60,4 +60,5 @@ export const ErrorCode = {
COIN_TYPE_NOT_EXIST
:
'30056'
,
//指定币种不存在
PAIR_NOT_EXIST
:
'30057'
,
//指定币对不存在
LIMIT_ERROR
:
'30058'
,
//limit参数必须在10-2000之间
ADD_PAIR_TO_CORE_ERR
:
'30059'
,
//添加交易对提交到撮合失败
}
src/functional/mvc/control/contractPair.control.ts
0 → 100644
View file @
1b7af35b
import
*
as
contractPairService
from
"../service/contractPair.service"
;
import
{
ContractPairPageVO
,
ContractPairVO
}
from
"../service/contractPair.service"
;
let
{
logger
,
Res3Utils
,
optionalUtils
:
Optional
,
apiAssertUtils
:
ApiAssert
,
datetimeUtils
}
=
require
(
'@madex/ex-js-public'
);
import
{
ErrorCode
}
from
"../../../constant/errorCode"
;
import
{
getCurrentUserId
}
from
"../../../utils/aclUserUtils"
;
let
isIp
=
require
(
'is-ip'
);
/**
* 金融部-交易管理-合约查询交易对
* @param req
* @param infoVO
*/
export
const
query
=
async
(
req
:
any
,
pageVO
:
ContractPairPageVO
)
=>
{
let
func_name
=
"contractPair.control.query"
;
try
{
pageVO
.
page
=
Optional
.
opt
(
pageVO
,
'page'
,
1
);
pageVO
.
size
=
Optional
.
opt
(
pageVO
,
'size'
,
20
);
let
res
=
await
contractPairService
.
query
(
pageVO
);
return
Res3Utils
.
result
(
res
);
}
catch
(
e
)
{
logger
.
error
(
`
${
func_name
}
error:
${
e
}
`
);
return
Res3Utils
.
getErrorResult
(
e
);
}
};
/**
* 金融部-交易管理-合约设置交易对
* @param req
* @param authConfigVO
*/
export
const
set
=
async
(
req
:
any
,
contractPairVO
:
ContractPairVO
)
=>
{
let
func_name
=
"contractPair.control.set"
;
try
{
let
ip
=
isIp
(
req
.
ip
)
?
req
.
ip
:
'*.*.*.*'
;
let
currentUserId
=
await
getCurrentUserId
(
req
.
cookies
.
session_id
);
let
res
=
await
contractPairService
.
set
(
contractPairVO
,
currentUserId
,
ip
);
return
Res3Utils
.
result
(
res
);
}
catch
(
e
)
{
logger
.
error
(
`
${
func_name
}
error:
${
e
}
`
);
return
Res3Utils
.
getErrorResult
(
e
);
}
};
/**
* 金融部-交易管理-合约更新交易对
* @param req
* @param authConfigVO
*/
export
const
update
=
async
(
req
:
any
,
contractPairVO
:
ContractPairVO
)
=>
{
let
func_name
=
"contractPair.control.update"
;
try
{
let
ip
=
isIp
(
req
.
ip
)
?
req
.
ip
:
'*.*.*.*'
;
let
currentUserId
=
await
getCurrentUserId
(
req
.
cookies
.
session_id
);
let
res
=
await
contractPairService
.
update
(
contractPairVO
,
currentUserId
,
ip
);
return
Res3Utils
.
result
(
res
);
}
catch
(
e
)
{
logger
.
error
(
`
${
func_name
}
error:
${
e
}
`
);
return
Res3Utils
.
getErrorResult
(
e
);
}
};
src/functional/mvc/control/spotPair.control.ts
View file @
1b7af35b
...
...
@@ -18,7 +18,7 @@ export const list = async (req: any, param: ListParam) => {
return
Res3Utils
.
getErrorResult
(
e
);
}
};
//新增
export
const
save
=
async
(
req
:
any
,
param
:
AddParam
)
=>
{
let
func_name
=
"spotPairCtl.save"
;
let
cmd
=
req
.
path
;
...
...
@@ -39,6 +39,20 @@ export const save = async (req: any, param: AddParam) => {
return
Res3Utils
.
getErrorResult
(
e
);
}
};
//修改
export
const
update
=
async
(
req
:
any
,
param
:
AddParam
)
=>
{
let
func_name
=
"spotPairCtl.save"
;
let
cmd
=
req
.
path
;
try
{
ApiAssert
.
notNull
(
'3000'
,
param
.
id
);
let
res
=
await
service
.
update
(
param
);
return
Res3Utils
.
result
(
res
);
}
catch
(
e
)
{
logger
.
error
(
`
${
func_name
}
error:
${
e
}
`
);
return
Res3Utils
.
getErrorResult
(
e
);
}
};
export
const
pushToCoreSystem
=
async
(
req
:
any
,
id
:
any
)
=>
{
...
...
src/functional/mvc/service/contractPair.service.ts
0 → 100644
View file @
1b7af35b
import
{
userApikeyStrict
,
}
from
"@madex/ex-ts-dao"
;
import
{
ErrorCode
}
from
"../../../constant/errorCode"
;
import
{
addOptLog
}
from
"./userOptLog.service"
;
let
_
=
require
(
'lodash'
);
let
{
logger
}
=
require
(
'@madex/ex-js-public'
);
let
{
authCommon
:
AuthCommon
,
redisUtilsCommon
:
RedisClient
,
}
=
require
(
'@madex/ex-js-common'
);
export
interface
ContractPairVO
{
id
?:
number
,
symbol
?:
string
;
base
?:
string
;
quote
?:
string
;
leverage_init
?:
number
;
leverage_min
?:
number
;
leverage_max
?:
number
;
margin_rate_maintain
?:
string
,
margin_rate_init
?:
string
,
risk_level_base
?:
number
,
maker_fee
?:
string
,
taker_fee
?:
string
,
createdAt
?:
Date
|
any
,
updatedAt
?:
Date
|
any
,
}
export
interface
ContractPairPageVO
extends
ContractPairVO
{
page
?:
number
,
size
?:
number
,
}
export
async
function
query
(
pageVO
:
ContractPairPageVO
)
{
let
key
=
'contract.pair.query'
;
//TODO:目前在缓存里 方便调试 后期撮合搞定之后再修改
let
list
=
await
RedisClient
.
getSync
(
key
);
let
res
=
{
count
:
list
?
list
.
length
:
0
,
rows
:
list
?
list
:
[]
}
return
res
;
}
export
async
function
set
(
contractPairVO
:
ContractPairVO
,
currentUserId
:
any
,
ip
:
string
|
undefined
)
{
//TODO:目前在缓存里 方便调试 后期撮合搞定之后再修改
contractPairVO
.
createdAt
=
new
Date
();
contractPairVO
.
updatedAt
=
new
Date
();
let
key
=
'contract.pair.query'
;
let
list
=
await
RedisClient
.
getSync
(
key
);
if
(
list
)
{
contractPairVO
.
id
=
list
.
length
+
1
;
list
.
push
(
contractPairVO
);
}
else
{
contractPairVO
.
id
=
1
;
list
=
[];
list
.
push
(
contractPairVO
);
}
await
RedisClient
.
writeSync
(
key
,
list
);
//管理后台操作日志
addOptLog
(
currentUserId
,
0
,
'新增合约交易对'
,
ip
,
JSON
.
stringify
(
contractPairVO
),
'交易管理'
);
return
'success'
;
}
export
async
function
update
(
contractPairVO
:
ContractPairVO
,
currentUserId
:
any
,
ip
:
string
|
undefined
)
{
//TODO:目前在缓存里 方便调试 后期撮合搞定之后再修改
let
key
=
'contract.pair.query'
;
let
list
=
await
RedisClient
.
getSync
(
key
);
let
nList
:
any
[]
=
[];
for
(
let
item
of
list
)
{
let
one
=
item
;
if
(
item
.
id
==
contractPairVO
.
id
){
one
=
contractPairVO
;
}
nList
.
push
(
one
);
}
await
RedisClient
.
writeSync
(
key
,
nList
);
//管理后台操作日志
addOptLog
(
currentUserId
,
0
,
'修改合约交易对'
,
ip
,
JSON
.
stringify
(
contractPairVO
),
'交易管理'
);
return
'success'
;
}
src/functional/mvc/service/spotPair.service.ts
View file @
1b7af35b
// @madex/ex-ts-dao 是 ts 的 dao, 代码在 bitbucket/ex-js-dao 的 ts 分支上
import
{
spotPairs
,
o
rmDB
,
coinType
}
from
"@madex/ex-ts-dao"
;
import
{
spotPairs
,
madSpotO
rmDB
,
coinType
}
from
"@madex/ex-ts-dao"
;
import
{
NUMBER
}
from
"sequelize"
;
import
{
addPairToCore
}
from
"../../../utils/coreSystemUtils"
;
import
{
ErrorCode
}
from
"../../../constant/errorCode"
;
let
{
logger
,
datetimeUtils
}
=
require
(
'@madex/ex-js-public'
);
export
interface
ListParam
{
symbol
:
string
|
any
;
symbol
?
:
string
|
any
;
page
:
number
;
size
:
number
;
status
?:
number
from_time
?:
Date
|
any
to_time
?:
Date
|
any
}
export
interface
AddParam
{
id
:
any
;
id
?:
number
;
symbol
?:
string
;
product_id
?:
number
;
base
?:
string
;
quote
?:
string
;
name
?:
string
;
price_scale
?:
number
;
base
:
string
;
quantity_scale
?:
number
;
quote
:
string
;
maker_fee
?
:
string
;
symbol
:
string
;
taker_fee
?
:
string
;
name
:
string
;
price_increment
?:
number
;
price_scale
:
number
;
quantity_increment
?
:
number
;
quantity_scale
:
number
;
status
?:
number
maker_fee
:
string
;
view_precision
?:
number
taker_fee
:
string
;
createdAt
?:
Date
|
any
,
updatedAt
?:
Date
|
any
,
}
export
async
function
list
(
param
:
ListParam
)
{
let
where
=
{};
if
(
param
.
symbol
)
{
where
[
"symbol"
]
=
{
[
ormDB
.
Op
.
like
]:
`%
${
param
.
symbol
}
%`
};
where
[
"symbol"
]
=
{
[
madSpotOrmDB
.
Op
.
like
]:
`%
${
param
.
symbol
}
%`
};
}
if
(
param
.
status
||
param
.
status
===
0
)
{
where
[
"status"
]
=
param
.
status
}
if
(
param
.
from_time
&&
param
.
to_time
)
{
where
[
'createdAt'
]
=
{
[
madSpotOrmDB
.
Op
.
between
]:
[
param
.
from_time
,
param
.
to_time
]
}
}
let
resList
=
await
spotPairs
.
prototype
.
findAndCount
({
where
:
where
,
...
...
@@ -49,16 +77,77 @@ export async function list(param: ListParam) {
}
export
const
save
=
async
(
param
:
AddParam
)
=>
{
let
id
=
param
.
id
;
if
(
id
)
{
delete
param
.
id
await
spotPairs
.
prototype
.
update
(
param
,
{
where
:
{
id
:
id
}
})
param
.
updatedAt
=
new
Date
();
param
.
createdAt
=
new
Date
();
let
tx
;
try
{
tx
=
await
madSpotOrmDB
.
transaction
();
//数据库新增
let
insertInfo
=
await
spotPairs
.
prototype
.
create
(
param
,
{
transaction
:
tx
});
//提交到撮合
let
symbol
=
insertInfo
.
symbol
;
let
sps
=
symbol
.
split
(
"_"
);
let
base
=
sps
[
0
];
let
quote
=
sps
[
1
]
let
toCoreParam
=
{
"base"
:
base
,
"quote"
:
quote
,
"symbol"
:
symbol
,
"name"
:
symbol
,
"price_scale"
:
insertInfo
.
price_scale
,
"quantity_scale"
:
insertInfo
.
quantity_scale
,
"maker_fee"
:
insertInfo
.
maker_fee
,
"taker_fee"
:
insertInfo
.
taker_fee
}
let
optResult
=
await
addPairToCore
(
toCoreParam
);
if
(
!
optResult
)
{
throw
ErrorCode
.
ADD_PAIR_TO_CORE_ERR
;
}
if
(
!
insertInfo
.
id
)
{
throw
ErrorCode
.
DATA_NOT_EXIST
}
await
spotPairs
.
prototype
.
update
({
status
:
1
},
{
where
:
{
id
:
insertInfo
.
id
},
transaction
:
tx
});
await
tx
.
commit
();
}
catch
(
e
)
{
logger
.
error
(
'spotPairService.save.error:'
+
e
);
if
(
tx
)
{
await
tx
.
rollback
();
}
throw
e
;
}
return
'ok'
;
};
export
const
update
=
async
(
param
:
AddParam
)
=>
{
let
dbInfo
=
await
spotPairs
.
prototype
.
findOne
({
where
:
{
id
:
param
.
id
},
raw
:
true
});
if
(
!
dbInfo
)
{
throw
ErrorCode
.
DATA_NOT_EXIST
}
let
updateInfo
=
{
updatedAt
:
new
Date
()
};
if
(
param
.
view_precision
||
param
.
view_precision
===
0
)
{
updateInfo
[
'view_precision'
]
=
param
.
view_precision
}
if
(
param
.
price_increment
||
param
.
price_increment
===
0
)
{
updateInfo
[
'price_increment'
]
=
param
.
price_increment
}
else
{
await
spotPairs
.
prototype
.
create
(
param
);
if
(
param
.
quantity_increment
||
param
.
quantity_increment
===
0
)
{
updateInfo
[
'quantity_increment'
]
=
param
.
quantity_increment
}
await
spotPairs
.
prototype
.
update
(
updateInfo
,
{
where
:
{
id
:
Number
(
param
.
id
)
}
});
return
'ok'
;
};
...
...
src/functional/router/v1/index.ts
View file @
1b7af35b
...
...
@@ -36,22 +36,23 @@ import * as appSpecialModelCtrl from "../../mvc/control/appSpecialModel.control"
import
*
as
appFeatureCtrl
from
"../../mvc/control/appFeature.control"
;
import
*
as
systemTriggerCtrl
from
"../../mvc/control/systemTrigger.control"
;
import
*
as
apikeyStrictCtrl
from
"../../mvc/control/apikeyStrict.control"
;
import
{
systemTrigger
}
from
"@madex/ex-ts-dao
"
;
import
*
as
contractPairCtrl
from
"../../mvc/control/contractPair.control
"
;
const
getFunc
=
{
'user/info'
:
userController
.
getUserInfo
,
};
const
postFunc
=
{
//
国际化
//
技术部-国际化管理
'i18n/info/list'
:
i18nCtrl
.
list
,
'i18n/info/add'
:
i18nCtrl
.
add
,
'i18n/info/update'
:
i18nCtrl
.
update
,
'i18n/info/del'
:
i18nCtrl
.
del
,
'i18n/info/log/list'
:
i18nLogCtrl
.
list
,
'i18n/info/log/revert'
:
i18nLogCtrl
.
revert
,
'spotPair/save'
:
spotPairCtrl
.
save
,
//金融部-交易管理-交易对配置
'spotPair/save'
:
spotPairCtrl
.
save
,
//新增
'spotPair/update'
:
spotPairCtrl
.
update
,
//修改
'spotPair/list'
:
spotPairCtrl
.
list
,
'spotPair/pushToCoreSystem'
:
spotPairCtrl
.
pushToCoreSystem
,
'spotPair/getAllSubmitSuccess'
:
spotPairCtrl
.
getAllSubmitSuccess
,
...
...
@@ -103,19 +104,19 @@ const postFunc = {
'user/bind/totp/confirm'
:
userOptCtrl
.
bindTotpConfirm
,
'user/auth/reset/totp'
:
userAuthConfigCtrl
.
resetTotp
,
//热门交易对搜索
//
运营部-
热门交易对搜索
'hot/pair/config/list'
:
hotPairConfigCtrl
.
list
,
'hot/pair/config/add'
:
hotPairConfigCtrl
.
add
,
'hot/pair/config/update'
:
hotPairConfigCtrl
.
update
,
'hot/pair/config/del'
:
hotPairConfigCtrl
.
del
,
//消息通知
//
运营部-
消息通知
'notice/list'
:
noticeCtrl
.
list
,
'notice/add'
:
noticeCtrl
.
add
,
'notice/update'
:
noticeCtrl
.
update
,
//
Madex
用户管理
//
客服部-
用户管理
'mUser/manage/userList'
:
mUserManageCtrl
.
userList
,
//Madex 用户管理 ->用户列表
'mUser/manage/oneUserDetail'
:
mUserManageCtrl
.
oneUserDetail
,
//Madex 用户管理 ->单个用户详情
'mUser/manage/updateUserEmail'
:
mUserManageCtrl
.
updateUserEmail
,
//Madex 用户管理 ->修改用户邮箱
...
...
@@ -134,14 +135,14 @@ const postFunc = {
'mUser/manage/order/history/list'
:
orderPendingAndHistoryCtrl
.
historyList
,
//Madex 用户管理 ->历史委托
'mUser/manage/order/detail/list'
:
orderPendingAndHistoryCtrl
.
detailList
,
//Madex 用户管理 ->成交记录
//资源位管理
//
运营部-
资源位管理
'link/useful/list'
:
usefulLinkCtrl
.
list
,
//链接记录列表
'link/useful/add'
:
usefulLinkCtrl
.
add
,
//添加链接记录
'link/useful/delete'
:
usefulLinkCtrl
.
del
,
//删除链接记录
'link/useful/update'
:
usefulLinkCtrl
.
update
,
//修改链接记录
'link/useful/detail'
:
usefulLinkCtrl
.
detail
,
//链接记录详情
//邮件订阅
//
运营部-其他管理-
邮件订阅
'mUser/subscribe/list'
:
mUserSubscribeCtrl
.
list
,
//订阅列表
'mUser/subscribe/delete'
:
mUserSubscribeCtrl
.
del
,
//删除订阅
'mUser/subscribe/count'
:
mUserSubscribeCtrl
.
count
,
//订阅统计
...
...
@@ -150,7 +151,7 @@ const postFunc = {
'mUser/subscribe/mail/detail'
:
mUserSubscribeCtrl
.
mailDetail
,
//发送详情
'mUser/subscribe/mail/send/group'
:
mUserSubscribeCtrl
.
maiSendGroup
,
//群发邮件
//普通用户手续费
//
运营部-费率管理-
普通用户手续费
'mUser/fee/setting/list'
:
commonUserFeeSettingCtrl
.
list
,
//普通用户手续费列表
'mUser/fee/setting/add'
:
commonUserFeeSettingCtrl
.
add
,
//新增普通用户手续费
'mUser/fee/setting/update'
:
commonUserFeeSettingCtrl
.
update
,
//修改普通用户手续费
...
...
@@ -186,6 +187,10 @@ const postFunc = {
'tech/other/apikey/strict/add'
:
apikeyStrictCtrl
.
add
,
'tech/other/apikey/strict/update'
:
apikeyStrictCtrl
.
update
,
'tech/other/apikey/strict/del'
:
apikeyStrictCtrl
.
del
,
//金融部-交易管理-合约代码配置
'finance/trade/contract/pair/set'
:
contractPairCtrl
.
set
,
'finance/trade/contract/pair/update'
:
contractPairCtrl
.
update
,
'finance/trade/contract/pair/query'
:
contractPairCtrl
.
query
};
// TODO 这里先和 nodejs 的注册路由方式保持一样,后面在调整。
...
...
src/setting/access-limit.ts
View file @
1b7af35b
...
...
@@ -8,22 +8,23 @@ const {
let
cmdWhiteList
=
{
//
国际化
//
技术部-国际化管理
'i18n/info/list'
:
1
,
'i18n/info/add'
:
1
,
'i18n/info/update'
:
1
,
'i18n/info/del'
:
1
,
'i18n/info/log/list'
:
1
,
'i18n/info/log/revert'
:
1
,
'spotPair/add'
:
1
,
//金融部-交易管理-交易对配置
'spotPair/save'
:
1
,
'spotPair/update'
:
1
,
'spotPair/list'
:
1
,
'spotPair/
spotPairCtl
'
:
1
,
'spotPair/
pushToCoreSystem
'
:
1
,
'spotPair/getAllSubmitSuccess'
:
1
,
'coinType/
add
'
:
1
,
'coinType/
save
'
:
1
,
'coinType/list'
:
1
,
'coinType/
spotPairCtl
'
:
1
,
'coinType/
pushToCoreSystem
'
:
1
,
//权限管理 - 我的权限
'user/getInfo'
:
1
,
...
...
@@ -66,16 +67,16 @@ let cmdWhiteList = {
'user/bind/totp/confirm'
:
1
,
'user/auth/reset/totp'
:
1
,
//热门交易对搜索
//
运营部-
热门交易对搜索
'hot/pair/config/list'
:
1
,
'hot/pair/config/add'
:
1
,
'hot/pair/config/update'
:
1
,
'hot/pair/config/del'
:
1
,
//消息通知
//
运营部-
消息通知
'notice/list'
:
1
,
'notice/add'
:
1
,
'notice/update'
:
1
,
//
Madex
用户管理
//
客服部-
用户管理
'mUser/manage/userList'
:
1
,
'mUser/manage/oneUserDetail'
:
1
,
'mUser/manage/updateUserEmail'
:
1
,
...
...
@@ -93,13 +94,13 @@ let cmdWhiteList = {
'mUser/manage/order/pending/list'
:
1
,
'mUser/manage/order/history/list'
:
1
,
'mUser/manage/order/detail/list'
:
1
,
//资源位管理
//
运营部-
资源位管理
'link/useful/list'
:
1
,
'link/useful/add'
:
1
,
'link/useful/delete'
:
1
,
'link/useful/update'
:
1
,
'link/useful/detail'
:
1
,
//邮件订阅
//
运营部-其他管理-
邮件订阅
'mUser/subscribe/list'
:
1
,
'mUser/subscribe/delete'
:
1
,
'mUser/subscribe/count'
:
1
,
...
...
@@ -107,7 +108,7 @@ let cmdWhiteList = {
'mUser/subscribe/mail/send'
:
1
,
'mUser/subscribe/mail/detail'
:
1
,
'mUser/subscribe/mail/send/group'
:
1
,
//普通用户手续费
//
运营部-费率管理-
普通用户手续费
'mUser/fee/setting/list'
:
1
,
'mUser/fee/setting/add'
:
1
,
'mUser/fee/setting/update'
:
1
,
...
...
@@ -142,6 +143,10 @@ let cmdWhiteList = {
'tech/other/apikey/strict/add'
:
1
,
'tech/other/apikey/strict/update'
:
1
,
'tech/other/apikey/strict/del'
:
1
,
//金融部-交易管理-合约代码配置
'finance/trade/contract/pair/set'
:
1
,
'finance/trade/contract/pair/update'
:
1
,
'finance/trade/contract/pair/query'
:
1
,
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment