记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
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
董敬伟
liquidnet-bus-v1
Commits
747ce72e
Commit
747ce72e
authored
Sep 19, 2021
by
anjiabin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提交chime社交相关
parent
08c87643
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
71 additions
and
75 deletions
+71
-75
ChimeUserInfoDto.java
...ava/com/liquidnet/service/chime/dto/ChimeUserInfoDto.java
+1
-3
ChimeUserRegisterReqDto.java
.../liquidnet/service/chime/dto/ChimeUserRegisterReqDto.java
+0
-2
ChimeUserTagDto.java
...java/com/liquidnet/service/chime/dto/ChimeUserTagDto.java
+0
-4
ChimeUserUpdateReqDto.java
...om/liquidnet/service/chime/dto/ChimeUserUpdateReqDto.java
+0
-1
IChimeUserService.java
...om/liquidnet/service/chime/service/IChimeUserService.java
+0
-7
ChimeUserInfoVo.java
...com/liquidnet/service/chime/vo/mongo/ChimeUserInfoVo.java
+2
-12
ChimeUserTagsMappingVo.java
...uidnet/service/chime/vo/mongo/ChimeUserTagsMappingVo.java
+0
-2
ChimeUserBiz.java
...in/java/com/liquidnet/service/chime/biz/ChimeUserBiz.java
+28
-8
ChimePerformanceServiceImpl.java
...rvice/chime/service/impl/ChimePerformanceServiceImpl.java
+24
-0
ChimeUserServiceImpl.java
...dnet/service/chime/service/impl/ChimeUserServiceImpl.java
+10
-36
ObjectUtil.java
...in/java/com/liquidnet/service/chime/utils/ObjectUtil.java
+6
-0
No files found.
liquidnet-bus-api/liquidnet-service-chime-api/src/main/java/com/liquidnet/service/chime/dto/ChimeUserInfoDto.java
View file @
747ce72e
...
...
@@ -24,9 +24,7 @@ public class ChimeUserInfoDto {
@ApiModelProperty
(
position
=
2
,
value
=
"性别"
)
private
String
sex
;
@ApiModelProperty
(
position
=
2
,
value
=
"用户昵称"
)
private
String
userName
;
@ApiModelProperty
(
position
=
3
,
value
=
"用户手机号"
)
private
String
userMobile
;
private
String
nickName
;
@ApiModelProperty
(
position
=
4
,
value
=
"头像"
)
private
String
avatar
;
@ApiModelProperty
(
position
=
4
,
value
=
"封面"
)
...
...
liquidnet-bus-api/liquidnet-service-chime-api/src/main/java/com/liquidnet/service/chime/dto/ChimeUserRegisterReqDto.java
View file @
747ce72e
...
...
@@ -17,10 +17,8 @@ import lombok.Data;
public
class
ChimeUserRegisterReqDto
{
@ApiModelProperty
(
position
=
0
,
value
=
"用户id"
,
example
=
""
)
private
String
userId
;
private
String
nickName
;
private
String
sex
;
private
String
tags
;
private
String
performanceId
;
@Override
public
String
toString
(){
...
...
liquidnet-bus-api/liquidnet-service-chime-api/src/main/java/com/liquidnet/service/chime/dto/ChimeUserTagDto.java
View file @
747ce72e
package
com
.
liquidnet
.
service
.
chime
.
dto
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
@@ -18,9 +17,6 @@ import lombok.Data;
@Data
public
class
ChimeUserTagDto
{
private
static
final
long
serialVersionUID
=
5325511589667456214L
;
@ApiModelProperty
(
position
=
0
,
value
=
"用户ID[64]"
)
@JsonIgnore
private
String
userId
;
@ApiModelProperty
(
position
=
1
,
value
=
"标签code"
)
private
String
tagCode
;
@ApiModelProperty
(
position
=
2
,
value
=
"标签描述"
)
...
...
liquidnet-bus-api/liquidnet-service-chime-api/src/main/java/com/liquidnet/service/chime/dto/ChimeUserUpdateReqDto.java
View file @
747ce72e
...
...
@@ -17,7 +17,6 @@ import lombok.Data;
public
class
ChimeUserUpdateReqDto
{
@ApiModelProperty
(
position
=
0
,
value
=
"用户id"
,
example
=
""
)
private
String
userId
;
private
String
nickName
;
private
String
sex
;
private
String
tags
;
...
...
liquidnet-bus-api/liquidnet-service-chime-api/src/main/java/com/liquidnet/service/chime/service/IChimeUserService.java
View file @
747ce72e
package
com
.
liquidnet
.
service
.
chime
.
service
;
import
com.alibaba.fastjson.JSONObject
;
import
com.liquidnet.service.chime.dto.ChimeUserInfoDto
;
import
com.liquidnet.service.chime.dto.ChimeUserRegisterReqDto
;
import
com.liquidnet.service.chime.dto.ChimeUserUpdateReqDto
;
...
...
@@ -15,12 +14,6 @@ import com.liquidnet.service.chime.dto.ChimeUserUpdateReqDto;
* @date 2021/9/8 16:14
*/
public
interface
IChimeUserService
{
/**
* 社交用户注册
* @param reqDto
* @return
*/
JSONObject
register
(
ChimeUserRegisterReqDto
reqDto
);
ChimeUserInfoDto
createChimeUserInfo
(
ChimeUserRegisterReqDto
reqDto
);
...
...
liquidnet-bus-api/liquidnet-service-chime-api/src/main/java/com/liquidnet/service/chime/vo/mongo/ChimeUserInfoVo.java
View file @
747ce72e
...
...
@@ -24,20 +24,10 @@ public class ChimeUserInfoVo {
private
String
userId
;
@ApiModelProperty
(
position
=
1
,
value
=
"性别"
)
private
String
sex
;
@ApiModelProperty
(
position
=
2
,
value
=
"用户昵称"
)
private
String
userName
;
@ApiModelProperty
(
position
=
3
,
value
=
"用户手机号"
)
private
String
userMobile
;
@ApiModelProperty
(
position
=
4
,
value
=
"头像"
)
private
String
avatar
;
@ApiModelProperty
(
position
=
5
,
value
=
"生日"
)
private
String
birthday
;
@ApiModelProperty
(
position
=
6
,
value
=
"签名"
)
private
String
signature
;
@ApiModelProperty
(
position
=
7
,
value
=
"常住地/区域"
)
private
String
area
;
@ApiModelProperty
(
position
=
8
,
value
=
"在场ID"
)
private
String
joinPerformanceId
;
@ApiModelProperty
(
position
=
8
,
value
=
"是否在场"
)
private
Boolean
isOnLine
;
@ApiModelProperty
(
position
=
9
,
value
=
"用户标签"
)
private
List
<
ChimeUserTagsMappingVo
>
userTagsVoList
;
...
...
liquidnet-bus-api/liquidnet-service-chime-api/src/main/java/com/liquidnet/service/chime/vo/mongo/ChimeUserTagsMappingVo.java
View file @
747ce72e
...
...
@@ -17,8 +17,6 @@ import lombok.Data;
@Data
public
class
ChimeUserTagsMappingVo
{
private
static
final
long
serialVersionUID
=
5325511589667456214L
;
@ApiModelProperty
(
position
=
0
,
value
=
"用户ID[64]"
)
private
String
userId
;
@ApiModelProperty
(
position
=
1
,
value
=
"标签code"
)
private
String
tagCode
;
@ApiModelProperty
(
position
=
2
,
value
=
"标签描述"
)
...
...
liquidnet-bus-service/liquidnet-service-chime/liquidnet-service-chime-impl/src/main/java/com/liquidnet/service/chime/biz/ChimeUserBiz.java
View file @
747ce72e
...
...
@@ -3,14 +3,18 @@ package com.liquidnet.service.chime.biz;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.liquidnet.commons.lang.util.BeanUtil
;
import
com.liquidnet.commons.lang.util.StringUtil
;
import
com.liquidnet.service.adam.dto.rsc.AdamChimeUinfoDto
;
import
com.liquidnet.service.adam.dto.rsc.AdamChimeUinfoReq
;
import
com.liquidnet.service.adam.dto.vo.AdamTagVo
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.chime.dto.ChimeJoinUserCountDto
;
import
com.liquidnet.service.chime.dto.ChimeUserTagDto
;
import
com.liquidnet.service.chime.dto.PerformanceDto
;
import
com.liquidnet.service.chime.utils.DataUtils
;
import
com.liquidnet.service.chime.utils.ObjectUtil
;
import
com.liquidnet.service.chime.vo.mongo.ChimeUserTagsMappingVo
;
import
com.liquidnet.service.feign.adam.api.FeignAdamBaseClient
;
import
com.liquidnet.service.feign.kylin.api.FeignKylinForChimeClient
;
import
com.liquidnet.service.kylin.constant.KylinPerformanceStatusEnum
;
import
com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo
;
...
...
@@ -19,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.stream.Collectors
;
...
...
@@ -39,6 +44,9 @@ public class ChimeUserBiz {
@Autowired
private
FeignKylinForChimeClient
feignKylinForChimeClient
;
@Autowired
private
FeignAdamBaseClient
feignAdamBaseClient
;
/**
* Json转换list
* @param tags
...
...
@@ -57,8 +65,6 @@ public class ChimeUserBiz {
return
null
;
}
}
//设置用户id
userTagList
.
stream
().
forEach
(
vo
->
vo
.
setUserId
(
userId
));
return
userTagList
;
}
...
...
@@ -68,12 +74,12 @@ public class ChimeUserBiz {
* @return
*/
public
List
<
ChimeUserTagDto
>
buildUserTagDtoList
(
String
userId
,
String
tags
){
List
<
ChimeUserTagsMappingVo
>
userTagVoList
=
new
ArrayList
<>
();
List
<
ChimeUserTagDto
>
userTagDtoList
=
new
ArrayList
<>
();
List
<
AdamTagVo
>
userTagVoList
=
ObjectUtil
.
getAdamTagVoArrayList
();
List
<
ChimeUserTagDto
>
userTagDtoList
=
ObjectUtil
.
getChimeUserTagDtoList
();
if
(
StringUtil
.
isNotEmpty
(
tags
)){
ObjectMapper
mapper
=
new
ObjectMapper
();
try
{
userTagVoList
=
mapper
.
readValue
(
tags
,
new
TypeReference
<
List
<
ChimeUserTagsMappin
gVo
>>()
{});
userTagVoList
=
mapper
.
readValue
(
tags
,
new
TypeReference
<
List
<
AdamTa
gVo
>>()
{});
}
catch
(
JsonProcessingException
e
)
{
e
.
printStackTrace
();
log
.
error
(
"createChimeUserInfo msg:{}"
,
e
.
getMessage
());
...
...
@@ -84,8 +90,8 @@ public class ChimeUserBiz {
//设置用户id
userTagVoList
.
parallelStream
().
forEach
(
vo
->
{
ChimeUserTagDto
userTagDto
=
ChimeUserTagDto
.
getNew
();
vo
.
setUserId
(
userId
);
BeanUtil
.
copy
(
vo
,
userTagDto
);
userTagDto
.
setTagCode
(
vo
.
getVal
()
);
userTagDto
.
setTagDesc
(
vo
.
getDesc
()
);
userTagDtoList
.
add
(
userTagDto
);
});
return
userTagDtoList
;
...
...
@@ -171,4 +177,18 @@ public class ChimeUserBiz {
}
return
isOnline
;
}
public
AdamChimeUinfoDto
getAdamUserInfoDto
(
String
userId
){
List
<
AdamChimeUinfoDto
>
userInfoDtoList
=
this
.
getAdamUserInfoDtoList
(
Arrays
.
asList
(
new
String
[]{
userId
}));
if
(
StringUtil
.
isNotNull
(
userInfoDtoList
)&&
userInfoDtoList
.
size
()>
0
){
return
userInfoDtoList
.
get
(
0
);
}
return
null
;
}
public
List
<
AdamChimeUinfoDto
>
getAdamUserInfoDtoList
(
List
<
String
>
userIdList
){
AdamChimeUinfoReq
adamChimeUinfoReq
=
new
AdamChimeUinfoReq
();
adamChimeUinfoReq
.
setUid
(
userIdList
);
ResponseDto
<
List
<
AdamChimeUinfoDto
>>
responseDto
=
feignAdamBaseClient
.
queryForChimeUserInfo
(
adamChimeUinfoReq
);
return
responseDto
.
getData
();
}
}
liquidnet-bus-service/liquidnet-service-chime/liquidnet-service-chime-impl/src/main/java/com/liquidnet/service/chime/service/impl/ChimePerformanceServiceImpl.java
View file @
747ce72e
...
...
@@ -2,6 +2,8 @@ package com.liquidnet.service.chime.service.impl;
import
com.liquidnet.commons.lang.util.BeanUtil
;
import
com.liquidnet.commons.lang.util.StringUtil
;
import
com.liquidnet.service.adam.dto.rsc.AdamChimeUinfoDto
;
import
com.liquidnet.service.chime.biz.ChimeUserBiz
;
import
com.liquidnet.service.chime.dto.ChimeUserInfoDto
;
import
com.liquidnet.service.chime.dto.ChimeUserListQueryReqDto
;
import
com.liquidnet.service.chime.dto.ChimeUserTagDto
;
...
...
@@ -22,6 +24,7 @@ import org.springframework.stereotype.Service;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
...
...
@@ -37,6 +40,9 @@ import java.util.List;
public
class
ChimePerformanceServiceImpl
implements
IChimePerformanceService
{
@Autowired
private
MongoTemplate
mongoTemplate
;
@Autowired
private
ChimeUserBiz
chimeUserBiz
;
/**
* 用户关联查询
* @param reqDto
...
...
@@ -89,10 +95,28 @@ public class ChimePerformanceServiceImpl implements IChimePerformanceService {
List
<
ChimeUserInfoDto
>
dtoList
=
new
ArrayList
<>();
startTime
=
System
.
currentTimeMillis
();
//获取分页结果list中的userId
List
<
String
>
userIdList
=
chimeUserInfoVoList
.
stream
().
map
(
ChimeUserInfoVo:
:
getUserId
).
collect
(
Collectors
.
toList
());
//批量获取用户信息
List
<
AdamChimeUinfoDto
>
adamChimeUinfoDtoList
=
chimeUserBiz
.
getAdamUserInfoDtoList
(
userIdList
);
for
(
ChimeUserInfoVo
item
:
chimeUserInfoVoList
)
{
ChimeUserInfoDto
dto
=
ChimeUserInfoDto
.
getNew
();
BeanUtil
.
copy
(
item
,
dto
);
dto
.
setPassWord
(
"123456"
);
//补充用户信息
if
(
StringUtil
.
isNotNull
(
adamChimeUinfoDtoList
)&&
adamChimeUinfoDtoList
.
size
()>
0
){
adamChimeUinfoDtoList
.
stream
().
forEach
(
userDto
->
{
if
(
userDto
.
getUserId
().
equalsIgnoreCase
(
item
.
getUserId
())){
dto
.
setNickName
(
userDto
.
getNickName
());
dto
.
setAvatar
(
userDto
.
getAvatar
());
dto
.
setUserCover
(
userDto
.
getUserCover
());
dto
.
setBirthday
(
userDto
.
getBirthday
());
dto
.
setSignature
(
userDto
.
getSignature
());
dto
.
setArea
(
userDto
.
getArea
());
}
});
}
//获取标签转换
List
<
ChimeUserTagsMappingVo
>
userTagsMappingVoList
=
item
.
getUserTagsVoList
();
List
<
ChimeUserTagDto
>
userTagDtoList
=
ObjectUtil
.
getChimeUserTagDtoList
();
...
...
liquidnet-bus-service/liquidnet-service-chime/liquidnet-service-chime-impl/src/main/java/com/liquidnet/service/chime/service/impl/ChimeUserServiceImpl.java
View file @
747ce72e
package
com
.
liquidnet
.
service
.
chime
.
service
.
impl
;
import
com.alibaba.fastjson.JSONObject
;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
import
com.liquidnet.common.third.easemob.util.EasemobUtil
;
import
com.liquidnet.commons.lang.util.BeanUtil
;
import
com.liquidnet.commons.lang.util.CurrentUtil
;
import
com.liquidnet.commons.lang.util.StringUtil
;
import
com.liquidnet.service.adam.constant.AdamRedisConst
;
import
com.liquidnet.service.adam.dto.vo.AdamUserInfoVo
;
import
com.liquidnet.service.chime.biz.ChimeUserBiz
;
import
com.liquidnet.service.chime.dto.ChimeUserInfoDto
;
import
com.liquidnet.service.chime.dto.ChimeUserRegisterReqDto
;
...
...
@@ -35,9 +31,6 @@ import java.util.List;
@Slf4j
@Service
public
class
ChimeUserServiceImpl
implements
IChimeUserService
{
@Autowired
private
EasemobUtil
easemobUtil
;
@Autowired
private
DataUtils
dataUtils
;
...
...
@@ -47,34 +40,20 @@ public class ChimeUserServiceImpl implements IChimeUserService {
@Autowired
private
ChimeUserBiz
chimeUserBiz
;
@Override
public
JSONObject
register
(
ChimeUserRegisterReqDto
reqDto
)
{
String
result
=
easemobUtil
.
createUser
(
reqDto
.
getUserId
(),
"123456"
,
reqDto
.
getNickName
());
log
.
info
(
"chime easemobUtil.createUser result:{}"
,
result
);
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
result
);
return
jsonObject
;
}
@Override
public
ChimeUserInfoDto
createChimeUserInfo
(
ChimeUserRegisterReqDto
reqDto
)
{
try
{
String
rk
=
AdamRedisConst
.
INFO_USER
.
concat
(
reqDto
.
getUserId
());
AdamUserInfoVo
vo
=
(
AdamUserInfoVo
)
redisUtil
.
get
(
rk
);
ChimeUserInfoDto
chimeUserInfoDto
=
ChimeUserInfoDto
.
getNew
();
chimeUserInfoDto
.
setUserId
(
reqDto
.
getUserId
());
chimeUserInfoDto
.
setSex
(
reqDto
.
getSex
());
chimeUserInfoDto
.
setUserName
(
vo
.
getUid
());
chimeUserInfoDto
.
setUserMobile
(
vo
.
getMobile
());
chimeUserInfoDto
.
setAvatar
(
vo
.
getAvatar
());
chimeUserInfoDto
.
setJoinPerformanceId
(
reqDto
.
getPerformanceId
());
chimeUserInfoDto
.
setBirthday
(
vo
.
getBirthday
());
chimeUserInfoDto
.
setSignature
(
vo
.
getSignature
());
chimeUserInfoDto
.
setArea
(
vo
.
getArea
());
List
<
ChimeUserTagDto
>
userTagList
=
chimeUserBiz
.
buildUserTagDtoList
(
reqDto
.
getUserId
(),
reqDto
.
getTags
());
chimeUserInfoDto
.
setUserTags
(
userTagList
);
//插入mongo
dataUtils
.
createChimeUser
(
chimeUserInfoDto
);
if
(
StringUtil
.
isNotNull
(
reqDto
)){
chimeUserInfoDto
.
setUserId
(
reqDto
.
getUserId
());
chimeUserInfoDto
.
setSex
(
reqDto
.
getSex
());
chimeUserInfoDto
.
setJoinPerformanceId
(
"-1"
);
List
<
ChimeUserTagDto
>
userTagList
=
chimeUserBiz
.
buildUserTagDtoList
(
reqDto
.
getUserId
(),
reqDto
.
getTags
());
chimeUserInfoDto
.
setUserTags
(
userTagList
);
//插入mongo
dataUtils
.
createChimeUser
(
chimeUserInfoDto
);
}
return
chimeUserInfoDto
;
}
catch
(
Exception
e
)
{
log
.
error
(
"创建社交用户异常 e:{}"
,
e
.
getMessage
());
...
...
@@ -85,16 +64,11 @@ public class ChimeUserServiceImpl implements IChimeUserService {
@Override
public
boolean
updateUserInfo
(
ChimeUserUpdateReqDto
reqDto
)
{
try
{
String
rk
=
AdamRedisConst
.
INFO_USER
.
concat
(
reqDto
.
getUserId
());
AdamUserInfoVo
vo
=
(
AdamUserInfoVo
)
redisUtil
.
get
(
rk
);
//插入userTagMapping
ChimeUserInfoVo
chimeUserInfoVo
=
ChimeUserInfoVo
.
getNew
();
BeanUtil
.
copy
(
reqDto
,
chimeUserInfoVo
);
chimeUserInfoVo
.
setUserName
(
vo
.
getUid
());
chimeUserInfoVo
.
setUserMobile
(
vo
.
getMobile
());
chimeUserInfoVo
.
setAvatar
(
vo
.
getAvatar
());
List
<
ChimeUserTagsMappingVo
>
userTagList
=
chimeUserBiz
.
buildUserTagVoList
(
reqDto
.
getUserId
(),
reqDto
.
getTags
());
chimeUserInfoVo
.
setUserTagsVoList
(
userTagList
);
chimeUserInfoVo
.
setSex
(
reqDto
.
getSex
());
dataUtils
.
updateChimeUser
(
chimeUserInfoVo
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
...
...
liquidnet-bus-service/liquidnet-service-chime/liquidnet-service-chime-impl/src/main/java/com/liquidnet/service/chime/utils/ObjectUtil.java
View file @
747ce72e
package
com
.
liquidnet
.
service
.
chime
.
utils
;
import
com.liquidnet.service.adam.dto.vo.AdamTagVo
;
import
com.liquidnet.service.chime.dto.ChimeUserInfoDto
;
import
com.liquidnet.service.chime.dto.ChimeUserTagDto
;
import
com.liquidnet.service.chime.dto.NewPageResult
;
...
...
@@ -9,6 +10,7 @@ import java.util.ArrayList;
public
class
ObjectUtil
{
private
static
final
NewPageResult
<
ChimeUserInfoDto
>
chimeUserInfoDtoPagedResult
=
new
NewPageResult
<>();
private
static
final
ArrayList
<
ChimeUserTagDto
>
chimeUserTagDtoList
=
new
ArrayList
<>();
private
static
final
ArrayList
<
AdamTagVo
>
adamTagVoArrayList
=
new
ArrayList
<>();
public
static
NewPageResult
<
ChimeUserInfoDto
>
getChimeUserInfoDtoPagedResult
()
{
return
chimeUserInfoDtoPagedResult
.
clone
();
}
...
...
@@ -16,4 +18,8 @@ public class ObjectUtil {
public
static
ArrayList
<
ChimeUserTagDto
>
getChimeUserTagDtoList
()
{
return
(
ArrayList
<
ChimeUserTagDto
>)
chimeUserTagDtoList
.
clone
();
}
public
static
ArrayList
<
AdamTagVo
>
getAdamTagVoArrayList
()
{
return
(
ArrayList
<
AdamTagVo
>)
adamTagVoArrayList
.
clone
();
}
}
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