记得上下班打卡 | 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
6abc6264
Commit
6abc6264
authored
Jan 12, 2022
by
张国柄
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
+API:店铺管理:公告通知[列表、添加、编辑、管理(发布、删除)];
parent
019ec622
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
298 additions
and
5 deletions
+298
-5
GoblinStoreMgtNoticeActionParam.java
...ce/goblin/dto/manage/GoblinStoreMgtNoticeActionParam.java
+24
-0
GoblinStoreMgtNoticeAddParam.java
...rvice/goblin/dto/manage/GoblinStoreMgtNoticeAddParam.java
+35
-0
GoblinStoreMgtNoticeFilterParam.java
...ce/goblin/dto/manage/GoblinStoreMgtNoticeFilterParam.java
+17
-0
GoblinStoreNoticeVo.java
.../liquidnet/service/goblin/dto/vo/GoblinStoreNoticeVo.java
+50
-0
GoblinStoreNotice.java
...om/liquidnet/service/goblin/entity/GoblinStoreNotice.java
+76
-0
GoblinStoreNoticeMapper.java
...uidnet/service/goblin/mapper/GoblinStoreNoticeMapper.java
+16
-0
GoblinStoreNoticeMapper.xml
...quidnet.service.goblin.mapper/GoblinStoreNoticeMapper.xml
+5
-0
db_ln_goblin_initialdata.sql
...net-service-goblin-impl/docu/db_ln_goblin_initialdata.sql
+20
-0
GoblinStoreMgtController.java
...ce/goblin/controller/manage/GoblinStoreMgtController.java
+55
-5
No files found.
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/manage/GoblinStoreMgtNoticeActionParam.java
0 → 100644
View file @
6abc6264
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
manage
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.Pattern
;
import
java.io.Serializable
;
import
java.util.List
;
@ApiModel
(
value
=
"GoblinStoreMgtNoticeActionParam"
,
description
=
"店铺管理:公告通知:操作入参"
)
@Data
public
class
GoblinStoreMgtNoticeActionParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
6564996671833040261L
;
@ApiModelProperty
(
position
=
10
,
required
=
true
,
value
=
"店铺ID[64]"
)
@NotBlank
(
message
=
"店铺ID不能为空"
)
private
String
storeId
;
@ApiModelProperty
(
position
=
11
,
required
=
true
,
value
=
"操作类型[RELEASE-发布|REMOVE-删除]"
)
@Pattern
(
regexp
=
"\\b(RELEASE|REMOVE)\\b"
,
message
=
"操作类型无效"
)
private
String
action
;
@ApiModelProperty
(
position
=
12
,
required
=
true
,
value
=
"公告ID列表"
)
private
List
<
String
>
noticeIdList
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/manage/GoblinStoreMgtNoticeAddParam.java
0 → 100644
View file @
6abc6264
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
manage
;
import
com.liquidnet.commons.lang.constant.LnsRegex
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.Pattern
;
import
javax.validation.constraints.Size
;
import
java.io.Serializable
;
@ApiModel
(
value
=
"GoblinStoreMgtNoticeAddParam"
,
description
=
"店铺管理:公告通知:添加|编辑入参"
)
@Data
public
class
GoblinStoreMgtNoticeAddParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
6564996671833040261L
;
@ApiModelProperty
(
position
=
10
,
required
=
true
,
value
=
"店铺ID[64]"
)
@NotBlank
(
message
=
"店铺ID不能为空"
)
private
String
storeId
;
@ApiModelProperty
(
position
=
11
,
required
=
false
,
value
=
"公告ID[32]"
)
private
String
noticeId
;
@ApiModelProperty
(
position
=
12
,
required
=
true
,
value
=
"公告内容"
,
example
=
"..."
)
@NotBlank
(
message
=
"公告内容不能为空"
)
@Size
(
max
=
50
,
message
=
"公告内容长度限制50个字符"
)
private
String
content
;
@ApiModelProperty
(
position
=
13
,
required
=
true
,
value
=
"发布时间[yyyy-MM-dd HH:mm:ss]"
)
@Pattern
(
regexp
=
LnsRegex
.
Valid
.
DATETIME_FULL
,
message
=
"发布时间格式有误"
)
private
String
releaseTime
;
@ApiModelProperty
(
position
=
14
,
required
=
true
,
value
=
"长期有效[0-否|1-是]"
,
allowableValues
=
"0,1"
,
example
=
"1"
)
@NotBlank
(
message
=
"长期有效参数不能为空"
)
@Pattern
(
regexp
=
"\\b(0|1)\\b"
,
message
=
"长期有效参数无效"
)
private
String
longLasting
;
@ApiModelProperty
(
position
=
15
,
required
=
true
,
value
=
"结束时间[yyyy-MM-dd HH:mm:ss]"
)
@Pattern
(
regexp
=
LnsRegex
.
Valid
.
DATETIME_FULL
,
message
=
"结束时间格式有误"
)
private
String
cancellTime
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/manage/GoblinStoreMgtNoticeFilterParam.java
0 → 100644
View file @
6abc6264
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
manage
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
@ApiModel
(
value
=
"GoblinStoreMgtNoticeFilterParam"
,
description
=
"店铺管理:公告通知:公告列表筛选条件入参"
)
@Data
public
class
GoblinStoreMgtNoticeFilterParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
4698854628491039006L
;
@ApiModelProperty
(
position
=
10
,
required
=
true
,
value
=
"店铺ID[64]"
)
private
String
storeId
;
@ApiModelProperty
(
position
=
11
,
required
=
false
,
value
=
"关键字[50]"
)
private
String
keyword
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/vo/GoblinStoreNoticeVo.java
0 → 100644
View file @
6abc6264
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
@ApiModel
(
value
=
"GoblinStoreNoticeVo"
,
description
=
"店铺公告通知"
)
@Data
public
class
GoblinStoreNoticeVo
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
156629407699728873L
;
@ApiModelProperty
(
position
=
10
,
value
=
"店铺ID"
)
private
String
storeId
;
@ApiModelProperty
(
position
=
11
,
value
=
"公告ID"
)
private
String
noticeId
;
@ApiModelProperty
(
position
=
12
,
value
=
"公告内容"
)
private
String
content
;
@ApiModelProperty
(
position
=
13
,
value
=
"发布时间[yyyy-MM-dd HH:mm:ss]"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
releaseTime
;
@ApiModelProperty
(
position
=
14
,
value
=
"长期有效[0-否|1-是]"
)
private
String
longLasting
;
@ApiModelProperty
(
position
=
15
,
value
=
"结束时间[yyyy-MM-dd HH:mm:ss]"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
cancellTime
;
@ApiModelProperty
(
position
=
16
,
value
=
"公告状态[0-待发布|1-已发布]"
)
private
String
status
;
private
String
createdBy
;
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
createdAt
;
private
String
updatedBy
;
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
DateUtil
.
DATE_FULL_STR
)
private
LocalDateTime
updatedAt
;
private
static
final
GoblinStoreNoticeVo
obj
=
new
GoblinStoreNoticeVo
();
public
static
GoblinStoreNoticeVo
getNew
()
{
try
{
return
(
GoblinStoreNoticeVo
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
return
new
GoblinStoreNoticeVo
();
}
}
}
liquidnet-bus-do/liquidnet-service-goblin-do/src/main/java/com/liquidnet/service/goblin/entity/GoblinStoreNotice.java
0 → 100644
View file @
6abc6264
package
com
.
liquidnet
.
service
.
goblin
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
java.time.LocalDateTime
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
java.io.Serializable
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
* 店铺公告
* </p>
*
* @author liquidnet
* @since 2022-01-12
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
GoblinStoreNotice
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* 公告id
*/
private
String
noticeId
;
/**
* 店铺id
*/
private
String
storeId
;
/**
* 公告内容
*/
private
String
content
;
/**
* 发布时间
*/
@TableField
(
"releaseTime"
)
private
LocalDateTime
releaseTime
;
/**
* 长期有效[0-否|1-是]
*/
private
LocalDateTime
longLasting
;
/**
* 结束时间
*/
@TableField
(
"cancellTime"
)
private
LocalDateTime
cancellTime
;
/**
* 公告状态[0-待发布|1-已发布]
*/
private
String
status
;
private
String
createdBy
;
private
LocalDateTime
createdAt
;
private
String
updatedBy
;
private
LocalDateTime
updatedAt
;
private
String
comment
;
}
liquidnet-bus-do/liquidnet-service-goblin-do/src/main/java/com/liquidnet/service/goblin/mapper/GoblinStoreNoticeMapper.java
0 → 100644
View file @
6abc6264
package
com
.
liquidnet
.
service
.
goblin
.
mapper
;
import
com.liquidnet.service.goblin.entity.GoblinStoreNotice
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
/**
* <p>
* 店铺公告 Mapper 接口
* </p>
*
* @author liquidnet
* @since 2022-01-12
*/
public
interface
GoblinStoreNoticeMapper
extends
BaseMapper
<
GoblinStoreNotice
>
{
}
liquidnet-bus-do/liquidnet-service-goblin-do/src/main/resources/com.liquidnet.service.goblin.mapper/GoblinStoreNoticeMapper.xml
0 → 100644
View file @
6abc6264
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.liquidnet.service.goblin.mapper.GoblinStoreNoticeMapper"
>
</mapper>
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/docu/db_ln_goblin_initialdata.sql
View file @
6abc6264
...
@@ -182,6 +182,26 @@ create index idx_gsc_store_id on goblin_store_config (store_id);
...
@@ -182,6 +182,26 @@ create index idx_gsc_store_id on goblin_store_config (store_id);
#
(
0
,
'售罄展示'
,
'ONOFF_SOLD_OUT_SHOW'
,
'ON'
,
'admin'
,
sysdate
()),
#
(
0
,
'售罄展示'
,
'ONOFF_SOLD_OUT_SHOW'
,
'ON'
,
'admin'
,
sysdate
()),
#
(
0
,
'库存不足'
,
'LIMIT_WARNING_STOCK'
,
'5'
,
'admin'
,
sysdate
());
#
(
0
,
'库存不足'
,
'LIMIT_WARNING_STOCK'
,
'5'
,
'admin'
,
sysdate
());
#
-- >>------------------------------------------------------------------------------------
#
-- >>------------------------------------------------------------------------------------
drop
table
if
exists
goblin_store_notice
;
create
table
goblin_store_notice
(
mid
bigint
auto_increment
primary
key
,
notice_id
varchar
(
32
)
not
null
comment
'公告id'
,
store_id
varchar
(
64
)
not
null
comment
'店铺id'
,
content
varchar
(
255
)
not
null
comment
'公告内容'
,
releaseTime
datetime
not
null
comment
'发布时间'
,
long_lasting
char
default
'0'
comment
'长期有效[0-否|1-是]'
,
cancellTime
datetime
not
null
comment
'结束时间'
,
status
char
default
'0'
comment
'公告状态[0-待发布|1-已发布]'
,
created_by
varchar
(
64
)
not
null
,
created_at
datetime
not
null
,
updated_by
varchar
(
64
)
null
,
updated_at
datetime
null
,
comment
varchar
(
500
)
)
engine
=
InnoDB
comment
'店铺公告'
;
create
index
idx_goblin_store_notice
on
goblin_store_notice
(
store_id
);
#
-- >>------------------------------------------------------------------------------------
drop
table
if
exists
goblin_store_goods_category
;
drop
table
if
exists
goblin_store_goods_category
;
create
table
goblin_store_goods_category
create
table
goblin_store_goods_category
(
(
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/controller/manage/GoblinStoreMgtController.java
View file @
6abc6264
...
@@ -6,13 +6,15 @@ import com.liquidnet.commons.lang.constant.LnsEnum;
...
@@ -6,13 +6,15 @@ import com.liquidnet.commons.lang.constant.LnsEnum;
import
com.liquidnet.commons.lang.util.CurrentUtil
;
import
com.liquidnet.commons.lang.util.CurrentUtil
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.base.ErrorMapping
;
import
com.liquidnet.service.base.ErrorMapping
;
import
com.liquidnet.service.base.PagedResult
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.dto.manage.
GoblinStoreMgtConfigEditParam
;
import
com.liquidnet.service.goblin.dto.manage.
*
;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtInfoVo
;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtInfoVo
;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtThumbVo
;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtThumbVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinStoreCertificationVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinStoreCertificationVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinStoreConfigVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinStoreConfigVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinStoreInfoVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinStoreInfoVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinStoreNoticeVo
;
import
com.liquidnet.service.goblin.enums.GoblinStoreConf
;
import
com.liquidnet.service.goblin.enums.GoblinStoreConf
;
import
com.liquidnet.service.goblin.service.manage.IGoblinStoreMgtService
;
import
com.liquidnet.service.goblin.service.manage.IGoblinStoreMgtService
;
import
com.liquidnet.service.goblin.util.GoblinRedisUtils
;
import
com.liquidnet.service.goblin.util.GoblinRedisUtils
;
...
@@ -118,8 +120,8 @@ public class GoblinStoreMgtController {
...
@@ -118,8 +120,8 @@ public class GoblinStoreMgtController {
@ApiImplicitParams
({
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"storeId"
,
value
=
"店铺ID[64]"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"storeId"
,
value
=
"店铺ID[64]"
),
})
})
@GetMapping
(
value
=
{
"
info/
conf"
})
@GetMapping
(
value
=
{
"conf"
})
public
ResponseDto
<
Map
<
String
,
String
>>
conf
igInfo
(
@NotBlank
(
message
=
"店铺ID不能为空"
)
@Size
(
max
=
64
)
@RequestParam
String
storeId
)
{
public
ResponseDto
<
Map
<
String
,
String
>>
conf
(
@NotBlank
(
message
=
"店铺ID不能为空"
)
@Size
(
max
=
64
)
@RequestParam
String
storeId
)
{
// TODO: 2022/1/12 zhanggb 逻辑校验
// TODO: 2022/1/12 zhanggb 逻辑校验
List
<
GoblinStoreConfigVo
>
storeConfigVos
=
goblinRedisUtils
.
getStoreConfigVos
(
storeId
);
List
<
GoblinStoreConfigVo
>
storeConfigVos
=
goblinRedisUtils
.
getStoreConfigVos
(
storeId
);
...
@@ -135,8 +137,8 @@ public class GoblinStoreMgtController {
...
@@ -135,8 +137,8 @@ public class GoblinStoreMgtController {
@ApiOperationSupport
(
order
=
6
)
@ApiOperationSupport
(
order
=
6
)
@ApiOperation
(
value
=
"店铺管理:店铺设置:编辑"
)
@ApiOperation
(
value
=
"店铺管理:店铺设置:编辑"
)
@PostMapping
(
value
=
{
"
info/
conf/edit"
})
@PostMapping
(
value
=
{
"conf/edit"
})
public
ResponseDto
<
Object
>
conf
igInfo
Edit
(
@Valid
@RequestBody
GoblinStoreMgtConfigEditParam
param
)
{
public
ResponseDto
<
Object
>
confEdit
(
@Valid
@RequestBody
GoblinStoreMgtConfigEditParam
param
)
{
String
currentUid
=
CurrentUtil
.
getCurrentUid
();
String
currentUid
=
CurrentUtil
.
getCurrentUid
();
// TODO: 2022/1/12 zhanggb 逻辑校验
// TODO: 2022/1/12 zhanggb 逻辑校验
if
(
CollectionUtils
.
isEmpty
(
param
.
getConfMap
()))
{
if
(
CollectionUtils
.
isEmpty
(
param
.
getConfMap
()))
{
...
@@ -149,4 +151,52 @@ public class GoblinStoreMgtController {
...
@@ -149,4 +151,52 @@ public class GoblinStoreMgtController {
return
ResponseDto
.
success
();
return
ResponseDto
.
success
();
}
}
@ApiOperationSupport
(
order
=
7
)
@ApiOperation
(
value
=
"店铺管理:公告通知:列表"
)
@PostMapping
(
value
=
{
"notice/list"
})
public
ResponseDto
<
PagedResult
<
GoblinStoreNoticeVo
>>
noticeList
(
@Valid
@RequestBody
GoblinStoreMgtNoticeFilterParam
noticeFilterParam
)
{
String
currentUid
=
CurrentUtil
.
getCurrentUid
();
// TODO: 2022/1/12 zhanggb 逻辑校验
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"店铺管理:公告通知:列表[UID={},noticeFilterParam={}]"
,
currentUid
,
JsonUtils
.
toJson
(
noticeFilterParam
));
}
return
ResponseDto
.
success
();
}
@ApiOperationSupport
(
order
=
8
)
@ApiOperation
(
value
=
"店铺管理:公告通知:添加"
)
@PostMapping
(
value
=
{
"notice/add"
})
public
ResponseDto
<
Object
>
noticeAdd
(
@Valid
@RequestBody
GoblinStoreMgtNoticeAddParam
noticeAddParam
)
{
String
currentUid
=
CurrentUtil
.
getCurrentUid
();
// TODO: 2022/1/12 zhanggb 逻辑校验
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"店铺管理:公告通知:添加[UID={},noticeAddParam={}]"
,
currentUid
,
JsonUtils
.
toJson
(
noticeAddParam
));
}
return
ResponseDto
.
success
();
}
@ApiOperationSupport
(
order
=
9
)
@ApiOperation
(
value
=
"店铺管理:公告通知:编辑"
)
@PostMapping
(
value
=
{
"notice/edit"
})
public
ResponseDto
<
Object
>
noticeEdit
(
@Valid
@RequestBody
GoblinStoreMgtNoticeAddParam
noticeEditParam
)
{
String
currentUid
=
CurrentUtil
.
getCurrentUid
();
// TODO: 2022/1/12 zhanggb 逻辑校验
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"店铺管理:公告通知:编辑[UID={},noticeEditParam={}]"
,
currentUid
,
JsonUtils
.
toJson
(
noticeEditParam
));
}
return
ResponseDto
.
success
();
}
@ApiOperationSupport
(
order
=
10
)
@ApiOperation
(
value
=
"店铺管理:公告通知:管理"
)
@PostMapping
(
value
=
{
"notice/operate"
})
public
ResponseDto
<
Object
>
noticeOperate
(
@Valid
@RequestBody
GoblinStoreMgtNoticeActionParam
noticeActionParam
)
{
String
currentUid
=
CurrentUtil
.
getCurrentUid
();
// TODO: 2022/1/12 zhanggb 逻辑校验
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"店铺管理:公告通知:管理[UID={},noticeActionParam={}]"
,
currentUid
,
JsonUtils
.
toJson
(
noticeActionParam
));
}
return
ResponseDto
.
success
();
}
}
}
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