nft质押任务逻辑

This commit is contained in:
lianghuanjie
2024-12-27 18:06:13 +08:00
parent a22f73df20
commit 31a674080d
39 changed files with 1532 additions and 99 deletions

View File

@@ -27,6 +27,22 @@ service novatask {
@doc "领取任务奖励"
@handler GetTaskReward
get /reward/:id (TaskIdPath) returns (GetTaskRewardResp)
@doc "拉取玩家持有的nft列表"
@handler GetNftList
get /nfts returns (UserNftList)
@doc "质押任务详情"
@handler GetStakeTaskDetail
get /task/stake returns (StakeTaskDetail)
@doc "质押NFT"
@handler StakeNft
post /nft/stake (StakeNftList)
@doc "取消质押NFT"
@handler UnStakeNft
post /nft/unstake (UnStakeNftReq)
}
type GetTaskListReq {
@@ -86,3 +102,35 @@ type GetCommunityListResp {
CommunityList []Community `json:"community_list"` // 社区列表
}
// StakeTaskDetail 质押任务详情
type StakeTaskDetail {
StartDate string `json:"start_date"` // 开始日期
EndDate string `json:"end_date"` // 结束日期
CountDown int `json:"count_down"` // 剩余结算时间
ProduceTokensToday float64 `json:"produce_token_today"` // 今日产出代币
GameBonus int `json:"game_bonus"` // 游戏加成比率
CanReceiveTokens float64 `json:"can_receive_tokens"` // 可领取代币数量
}
// UserNft 用户NFT
type UserNft {
TokenId string `json:"token_id"` // nftID
HasStake bool `json:"has_stake"` // 是否已质押
StakeAt string `json:"stake_at"` // 质押时间
}
// UserNftList 用户NFT列表
type UserNftList {
NftList []UserNft `json:"nft_list"`
}
// StakeNftList 质押请求参数NFT列表
type StakeNftList {
TokenIds []string `json:"token_ids"` // nft列表
}
// UnStakeNftReq 取消质押请求参数
type UnStakeNftReq {
TokenId string `json:"token_id"` // nftID
}

View File

@@ -1,41 +1,78 @@
#DROP TABLE IF EXISTS `nh_task_progress`;
CREATE TABLE `nh_task_progress`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`task_id` int(11) unsigned NOT NULL COMMENT '任务id',
`task_seq` int(11) NOT NULL COMMENT '用于可重复任务的序列号',
`stage` tinyint NOT NULL DEFAULT 0 COMMENT '任务的阶段, 0:未完成 1:待校验 2:已完成未领取 3:已领取',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`uid` int(11) unsigned NOT NULL,
`task_id` int(11) unsigned NOT NULL COMMENT '任务id',
`task_seq` int(11) NOT NULL COMMENT '用于可重复任务的序列号',
`stage` tinyint NOT NULL DEFAULT 0 COMMENT '任务的阶段, 0:未完成 1:待校验 2:已完成未领取 3:已领取',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uid_task_id_seq` (`uid`, `task_id`, `task_seq`)
) COMMENT='用户任务节点';
) COMMENT ='用户任务节点';
#DROP TABLE IF EXISTS `nh_nft_holder`;
CREATE TABLE `nh_nft_holder`
(
`id` int NOT NULL AUTO_INCREMENT,
`address` varchar(80) NOT NULL COMMENT '钱包地址',
`token_id` varchar(80) NOT NULL COMMENT 'token id',
`balance` int(11) NOT NULL DEFAULT 0 COMMENT '余额',
`update_seq` int NOT NULL COMMENT '更新序列号',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`id` int unsigned NOT NULL AUTO_INCREMENT,
`address` varchar(80) NOT NULL COMMENT '钱包地址',
`token_id` varchar(32) NOT NULL COMMENT 'token id',
`balance` int(11) NOT NULL DEFAULT 0 COMMENT '余额',
`update_seq` int NOT NULL COMMENT '更新序列号',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY (`address`, `token_id`),
INDEX (`update_seq`)
) COMMENT ='nft 持有表';
#DROP TABLE IF EXISTS `nh_nft_holder_change_log`;
CREATE TABLE `nh_nft_holder_change_log`
(
`id` int NOT NULL AUTO_INCREMENT,
`address` varchar(80) NOT NULL COMMENT '钱包地址',
`token_id` varchar(80) NOT NULL COMMENT 'token id',
`value` int(11) NOT NULL COMMENT '变化数量',
`balance` int(11) NOT NULL COMMENT '余额',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`id` int unsigned NOT NULL AUTO_INCREMENT,
`address` varchar(80) NOT NULL COMMENT '钱包地址',
`token_id` varchar(32) NOT NULL COMMENT 'token id',
`value` int(11) NOT NULL COMMENT '变化数量',
`balance` int(11) NOT NULL COMMENT '余额',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) COMMENT ='nft 持有表变化日志';
) COMMENT ='nft 持有表变化日志';
CREATE TABLE `nh_task_nft_stake`
(
`id` int unsigned NOT NULL AUTO_INCREMENT,
`uid` int unsigned NOT NULL COMMENT '用户钱包',
`token_id` varchar(32) NOT NULL COMMENT 'token id',
`state` tinyint NOT NULL DEFAULT 0 COMMENT '状态1质押中 0已取消质押',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY (`uid`, `token_id`)
) COMMENT ='nft质押表';
CREATE TABLE `nh_task_nft_stake_log`
(
`id` int unsigned NOT NULL AUTO_INCREMENT,
`uid` int unsigned NOT NULL COMMENT '用户钱包',
`address` varchar(80) NOT NULL COMMENT '钱包地址',
`token_id` varchar(32) NOT NULL COMMENT 'token id',
`award_seq` int NOT NULL COMMENT '派奖序列号',
`balance` int(11) NOT NULL COMMENT '余额',
`stake` tinyint NOT NULL DEFAULT 0 COMMENT '状态1质押中 0未质押',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) COMMENT ='派奖时nft质押日志表';
CREATE TABLE `nh_task_nft_stake_reward`
(
`id` int unsigned NOT NULL AUTO_INCREMENT,
`uid` int unsigned NOT NULL COMMENT '用户钱包',
`award_seq` int NOT NULL COMMENT '派奖序列号',
`pledge_output` decimal(40, 8) DEFAULT NULL COMMENT '质押产出代币',
`random_coefficient` float NOT NULL COMMENT '随机系数',
`occupy_percent` int NOT NULL DEFAULT 100 COMMENT '占领百分比',
`reward` decimal(40, 8) DEFAULT NULL COMMENT '奖励金额',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) COMMENT ='nft质押派奖表';

View File

@@ -32,6 +32,90 @@
]
}
},
"/gapi/task/v1/nft/stake": {
"post": {
"summary": "质押NFT",
"operationId": "StakeNft",
"responses": {
"200": {
"description": "A successful response.",
"schema": {}
}
},
"parameters": [
{
"name": "body",
"description": " StakeNftList 质押请求参数NFT列表",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/StakeNftList"
}
}
],
"tags": [
"task"
],
"security": [
{
"apiKey": []
}
]
}
},
"/gapi/task/v1/nft/unstake": {
"post": {
"summary": "取消质押NFT",
"operationId": "UnStakeNft",
"responses": {
"200": {
"description": "A successful response.",
"schema": {}
}
},
"parameters": [
{
"name": "body",
"description": " UnStakeNftReq 取消质押请求参数",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/UnStakeNftReq"
}
}
],
"tags": [
"task"
],
"security": [
{
"apiKey": []
}
]
}
},
"/gapi/task/v1/nfts": {
"get": {
"summary": "拉取玩家持有的nft列表",
"operationId": "GetNftList",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/UserNftList"
}
}
},
"tags": [
"task"
],
"security": [
{
"apiKey": []
}
]
}
},
"/gapi/task/v1/reward/{id}": {
"get": {
"summary": "领取任务奖励",
@@ -104,6 +188,28 @@
]
}
},
"/gapi/task/v1/task/stake": {
"get": {
"summary": "质押任务详情",
"operationId": "GetStakeTaskDetail",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/StakeTaskDetail"
}
}
},
"tags": [
"task"
],
"security": [
{
"apiKey": []
}
]
}
},
"/gapi/task/v1/tasks": {
"get": {
"summary": "获取任务列表",
@@ -233,6 +339,64 @@
"points"
]
},
"StakeNftList": {
"type": "object",
"properties": {
"token_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": " nft列表"
}
},
"title": "StakeNftList",
"required": [
"token_ids"
]
},
"StakeTaskDetail": {
"type": "object",
"properties": {
"start_date": {
"type": "string",
"description": " 开始日期"
},
"end_date": {
"type": "string",
"description": " 结束日期"
},
"count_down": {
"type": "integer",
"format": "int32",
"description": " 剩余结算时间"
},
"produce_token_today": {
"type": "number",
"format": "double",
"description": " 今日产出代币"
},
"game_bonus": {
"type": "integer",
"format": "int32",
"description": " 游戏加成比率"
},
"can_receive_tokens": {
"type": "number",
"format": "double",
"description": " 可领取代币数量"
}
},
"title": "StakeTaskDetail",
"required": [
"start_date",
"end_date",
"count_down",
"produce_token_today",
"game_bonus",
"can_receive_tokens"
]
},
"Task": {
"type": "object",
"properties": {
@@ -333,6 +497,58 @@
"type": "object",
"title": "TaskIdPath"
},
"UnStakeNftReq": {
"type": "object",
"properties": {
"token_id": {
"type": "string",
"description": " nftID"
}
},
"title": "UnStakeNftReq",
"required": [
"token_id"
]
},
"UserNft": {
"type": "object",
"properties": {
"token_id": {
"type": "string",
"description": " nftID"
},
"has_stake": {
"type": "boolean",
"format": "boolean",
"description": " 是否已质押"
},
"stake_at": {
"type": "string",
"description": " 质押时间"
}
},
"title": "UserNft",
"required": [
"token_id",
"has_stake",
"stake_at"
]
},
"UserNftList": {
"type": "object",
"properties": {
"nft_list": {
"type": "array",
"items": {
"$ref": "#/definitions/UserNft"
}
}
},
"title": "UserNftList",
"required": [
"nft_list"
]
},
"VerifyTaskResultReq": {
"type": "object",
"properties": {