Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
beyond-clouds
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
4
Issues
4
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
段启岩
beyond-clouds
Commits
64be074a
Commit
64be074a
authored
Feb 13, 2020
by
段启岩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
话题列表添加是否关注
parent
17a9e657
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
136 additions
and
32 deletions
+136
-32
src/main/java/cn/meteor/beyondclouds/modules/topic/api/TopicApi.java
+10
-12
src/main/java/cn/meteor/beyondclouds/modules/topic/bean/TopicDTO.java
+3
-1
src/main/java/cn/meteor/beyondclouds/modules/topic/service/ITopicFollowService.java
+20
-0
src/main/java/cn/meteor/beyondclouds/modules/topic/service/ITopicService.java
+7
-6
src/main/java/cn/meteor/beyondclouds/modules/topic/service/impl/TopicFollowServiceImpl.java
+31
-0
src/main/java/cn/meteor/beyondclouds/modules/topic/service/impl/TopicServiceImpl.java
+65
-13
No files found.
src/main/java/cn/meteor/beyondclouds/modules/topic/api/TopicApi.java
View file @
64be074a
...
...
@@ -7,7 +7,7 @@ import cn.meteor.beyondclouds.core.annotation.CurrentSubject;
import
cn.meteor.beyondclouds.core.api.Response
;
import
cn.meteor.beyondclouds.core.authentication.Subject
;
import
cn.meteor.beyondclouds.modules.post.entity.Post
;
import
cn.meteor.beyondclouds.modules.topic.bean.TopicD
etail
;
import
cn.meteor.beyondclouds.modules.topic.bean.TopicD
TO
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.enums.TopicAccessWay
;
import
cn.meteor.beyondclouds.modules.topic.exception.TopicServiceException
;
...
...
@@ -45,7 +45,7 @@ public class TopicApi {
public
Response
createTopic
(
@RequestBody
@Valid
CreateTopicForm
createTopicForm
,
@CurrentSubject
Subject
subject
)
{
try
{
TopicD
etail
topic
=
topicService
.
createTopic
(
String
.
valueOf
(
subject
.
getId
()),
createTopicForm
.
getTopicName
());
TopicD
TO
topic
=
topicService
.
createTopic
(
String
.
valueOf
(
subject
.
getId
()),
createTopicForm
.
getTopicName
());
return
Response
.
success
(
topic
);
}
catch
(
TopicServiceException
e
)
{
e
.
printStackTrace
();
...
...
@@ -64,9 +64,8 @@ public class TopicApi {
int
pageNo
=
pageForm
.
getPage
();
int
pageSize
=
pageForm
.
getSize
();
IPage
<
Topic
>
topicPage
=
topicService
.
getTopicPage
(
pageNo
,
pageSize
);
PageDTO
<
Topic
>
topicPageDTO
=
new
PageDTO
<>(
topicPage
);
return
Response
.
success
(
topicPageDTO
);
PageDTO
<
TopicDTO
>
topicPage
=
topicService
.
getTopicPage
(
pageNo
,
pageSize
);
return
Response
.
success
(
topicPage
);
}
@Anonymous
...
...
@@ -78,8 +77,8 @@ public class TopicApi {
return
Response
.
fieldError
(
bindingResult
.
getFieldError
());
}
IPage
<
Topic
>
topicPage
=
topicService
.
searchTopics
(
keywords
,
pageForm
.
getPage
(),
pageForm
.
getSize
());
return
Response
.
success
(
new
PageDTO
<>(
topicPage
)
);
PageDTO
<
TopicDTO
>
topicPage
=
topicService
.
searchTopics
(
keywords
,
pageForm
.
getPage
(),
pageForm
.
getSize
());
return
Response
.
success
(
topicPage
);
}
@Anonymous
...
...
@@ -95,7 +94,7 @@ public class TopicApi {
}
try
{
Topic
topic
=
topicService
.
getTopic
(
identification
,
topicAccessWay
);
Topic
DTO
topic
=
topicService
.
getTopic
(
identification
,
topicAccessWay
);
return
Response
.
success
(
topic
);
}
catch
(
TopicServiceException
e
)
{
e
.
printStackTrace
();
...
...
@@ -175,11 +174,10 @@ public class TopicApi {
@Anonymous
@ApiOperation
(
"热门话题"
)
@GetMapping
(
"/topic/hots"
)
public
Response
<
PageDTO
<
Topic
>>
getHotTags
(
@Valid
PageForm
pageForm
)
{
public
Response
<
PageDTO
<
Topic
DTO
>>
getHotTags
(
@Valid
PageForm
pageForm
)
{
IPage
<
Topic
>
topic
=
topicService
.
getHotPage
(
pageForm
.
getPage
(),
pageForm
.
getSize
());
PageDTO
<
Topic
>
topicPageDTO
=
new
PageDTO
<>(
topic
);
return
Response
.
success
(
topicPageDTO
);
PageDTO
<
TopicDTO
>
topicPage
=
topicService
.
getHotPage
(
pageForm
.
getPage
(),
pageForm
.
getSize
());
return
Response
.
success
(
topicPage
);
}
@Anonymous
...
...
src/main/java/cn/meteor/beyondclouds/modules/topic/bean/TopicD
etail
.java
→
src/main/java/cn/meteor/beyondclouds/modules/topic/bean/TopicD
TO
.java
View file @
64be074a
...
...
@@ -7,9 +7,11 @@ import lombok.Data;
* @since 2020/2/8
*/
@Data
public
class
TopicD
etail
{
public
class
TopicD
TO
{
private
String
topicId
;
private
String
topicName
;
private
Boolean
followedTopic
;
}
src/main/java/cn/meteor/beyondclouds/modules/topic/service/ITopicFollowService.java
View file @
64be074a
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
service
;
import
cn.meteor.beyondclouds.core.authentication.Subject
;
import
cn.meteor.beyondclouds.modules.topic.entity.TopicFollow
;
import
cn.meteor.beyondclouds.util.SubjectUtils
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
org.springframework.util.Assert
;
import
java.util.Set
;
/**
* <p>
...
...
@@ -13,4 +19,18 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public
interface
ITopicFollowService
extends
IService
<
TopicFollow
>
{
/**
* 判断我是否关注过某个话题
* @param topicId
* @return
*/
public
boolean
hasFollowedTopic
(
String
topicId
);
/**
* 获取我关注的所有话题的ID
* @return
*/
Set
<
String
>
getFollowedTopicIds
();
}
src/main/java/cn/meteor/beyondclouds/modules/topic/service/ITopicService.java
View file @
64be074a
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
service
;
import
cn.meteor.beyondclouds.common.dto.PageDTO
;
import
cn.meteor.beyondclouds.modules.post.entity.Post
;
import
cn.meteor.beyondclouds.modules.topic.bean.TopicD
etail
;
import
cn.meteor.beyondclouds.modules.topic.bean.TopicD
TO
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.enums.TopicAccessWay
;
import
cn.meteor.beyondclouds.modules.topic.exception.TopicServiceException
;
...
...
@@ -28,7 +29,7 @@ public interface ITopicService extends IService<Topic> {
* @param topicName
* @return TopicDetail
*/
TopicD
etail
createTopic
(
String
userId
,
String
topicName
)
throws
TopicServiceException
;
TopicD
TO
createTopic
(
String
userId
,
String
topicName
)
throws
TopicServiceException
;
/**
* 检索话题
...
...
@@ -36,7 +37,7 @@ public interface ITopicService extends IService<Topic> {
* @param pageNumber
* @param pageSize
*/
IPage
<
Topic
>
searchTopics
(
String
keywords
,
Integer
pageNumber
,
Integer
pageSize
);
PageDTO
<
TopicDTO
>
searchTopics
(
String
keywords
,
Integer
pageNumber
,
Integer
pageSize
);
/**
* 关注话题
...
...
@@ -52,7 +53,7 @@ public interface ITopicService extends IService<Topic> {
* @return
* @throws TopicServiceException
*/
Topic
getTopic
(
String
identification
,
TopicAccessWay
topicAccessWay
)
throws
TopicServiceException
;
Topic
DTO
getTopic
(
String
identification
,
TopicAccessWay
topicAccessWay
)
throws
TopicServiceException
;
/**
* 我关注的话题
...
...
@@ -88,7 +89,7 @@ public interface ITopicService extends IService<Topic> {
* @param pageSize
* @return
*/
IPage
<
Topic
>
getTopicPage
(
Integer
pageNumber
,
Integer
pageSize
);
PageDTO
<
TopicDTO
>
getTopicPage
(
Integer
pageNumber
,
Integer
pageSize
);
/**
* 增加话题引用次数
...
...
@@ -132,7 +133,7 @@ public interface ITopicService extends IService<Topic> {
* @param pageSize
* @return
*/
IPage
<
Topic
>
getHotPage
(
Integer
pageNumber
,
Integer
pageSize
);
PageDTO
<
TopicDTO
>
getHotPage
(
Integer
pageNumber
,
Integer
pageSize
);
/**
*该话题下所有的动态
...
...
src/main/java/cn/meteor/beyondclouds/modules/topic/service/impl/TopicFollowServiceImpl.java
View file @
64be074a
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
service
.
impl
;
import
cn.meteor.beyondclouds.core.authentication.Subject
;
import
cn.meteor.beyondclouds.modules.topic.entity.TopicFollow
;
import
cn.meteor.beyondclouds.modules.topic.mapper.TopicFollowMapper
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicFollowService
;
import
cn.meteor.beyondclouds.util.SubjectUtils
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.Assert
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
/**
* <p>
...
...
@@ -17,4 +25,27 @@ import org.springframework.stereotype.Service;
@Service
public
class
TopicFollowServiceImpl
extends
ServiceImpl
<
TopicFollowMapper
,
TopicFollow
>
implements
ITopicFollowService
{
@Override
public
boolean
hasFollowedTopic
(
String
topicId
)
{
Assert
.
isTrue
(
SubjectUtils
.
isAuthenticated
(),
"user must authenticated"
);
Subject
subject
=
SubjectUtils
.
getSubject
();
String
currentUserId
=
(
String
)
subject
.
getId
();
QueryWrapper
<
TopicFollow
>
topicFollowQueryWrapper
=
new
QueryWrapper
<>();
topicFollowQueryWrapper
.
eq
(
"user_id"
,
currentUserId
);
topicFollowQueryWrapper
.
eq
(
"topic_id"
,
topicId
);
return
count
(
topicFollowQueryWrapper
)
>
0
;
}
@Override
public
Set
<
String
>
getFollowedTopicIds
()
{
Assert
.
isTrue
(
SubjectUtils
.
isAuthenticated
(),
"user must authenticated"
);
Subject
subject
=
SubjectUtils
.
getSubject
();
String
currentUserId
=
(
String
)
subject
.
getId
();
QueryWrapper
<
TopicFollow
>
topicFollowQueryWrapper
=
new
QueryWrapper
<>();
topicFollowQueryWrapper
.
eq
(
"user_id"
,
currentUserId
);
List
<
TopicFollow
>
topicFollows
=
list
(
topicFollowQueryWrapper
);
return
topicFollows
.
stream
()
.
map
(
TopicFollow:
:
getTopicId
)
.
collect
(
Collectors
.
toSet
());
}
}
src/main/java/cn/meteor/beyondclouds/modules/topic/service/impl/TopicServiceImpl.java
View file @
64be074a
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
service
.
impl
;
import
cn.meteor.beyondclouds.common.dto.PageDTO
;
import
cn.meteor.beyondclouds.modules.post.entity.Post
;
import
cn.meteor.beyondclouds.modules.post.service.IPostService
;
import
cn.meteor.beyondclouds.modules.topic.bean.TopicD
etail
;
import
cn.meteor.beyondclouds.modules.topic.bean.TopicD
TO
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.entity.TopicFollow
;
import
cn.meteor.beyondclouds.modules.topic.entity.TopicReference
;
...
...
@@ -15,6 +16,8 @@ import cn.meteor.beyondclouds.modules.topic.service.ITopicReferenceService;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicService
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.service.IUserService
;
import
cn.meteor.beyondclouds.util.PageUtils
;
import
cn.meteor.beyondclouds.util.SubjectUtils
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
...
...
@@ -25,8 +28,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -68,7 +73,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
}
@Override
public
TopicD
etail
createTopic
(
String
userId
,
String
topicName
)
throws
TopicServiceException
{
public
TopicD
TO
createTopic
(
String
userId
,
String
topicName
)
throws
TopicServiceException
{
//1. 检测是否存在该话题
QueryWrapper
<
Topic
>
topicQueryWrapper
=
new
QueryWrapper
<>();
...
...
@@ -84,23 +89,52 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
save
(
topic
);
//3. 返回话题的id与话题名称
TopicD
etail
topicDetail
=
new
TopicDetail
();
BeanUtils
.
copyProperties
(
topic
,
topicD
etail
);
return
topicD
etail
;
TopicD
TO
topicDTO
=
new
TopicDTO
();
BeanUtils
.
copyProperties
(
topic
,
topicD
TO
);
return
topicD
TO
;
}
@Override
public
IPage
<
Topic
>
searchTopics
(
String
keywords
,
Integer
pageNumber
,
Integer
pageSize
)
{
public
PageDTO
<
TopicDTO
>
searchTopics
(
String
keywords
,
Integer
pageNumber
,
Integer
pageSize
)
{
IPage
<
Topic
>
page
=
new
Page
<>(
pageNumber
,
pageSize
);
QueryWrapper
<
Topic
>
topicQueryWrapper
=
new
QueryWrapper
<>();
topicQueryWrapper
.
like
(
"topic_name"
,
keywords
);
return
page
(
page
,
topicQueryWrapper
);
IPage
<
Topic
>
topicPage
=
page
(
page
,
topicQueryWrapper
);
return
toPageDTO
(
topicPage
);
}
/**
* 将IPage<Topic>转换成PageDTO<TopicDTO>
* @param topicPage
* @return
*/
private
PageDTO
<
TopicDTO
>
toPageDTO
(
IPage
<
Topic
>
topicPage
)
{
List
<
Topic
>
topicList
=
topicPage
.
getRecords
();
Set
<
String
>
followedTopicIds
=
topicFollowService
.
getFollowedTopicIds
();
List
<
TopicDTO
>
topicDTOList
=
new
ArrayList
<>();
topicList
.
forEach
(
topic
->
{
TopicDTO
topicDTO
=
new
TopicDTO
();
BeanUtils
.
copyProperties
(
topic
,
topicDTO
);
if
(
SubjectUtils
.
isAuthenticated
())
{
topicDTO
.
setFollowedTopic
(
followedTopicIds
.
contains
(
topic
.
getTopicId
()));
}
else
{
topicDTO
.
setFollowedTopic
(
false
);
}
topicDTOList
.
add
(
topicDTO
);
});
PageDTO
<
TopicDTO
>
pageDTO
=
new
PageDTO
<>();
PageUtils
.
copyMeta
(
topicPage
,
pageDTO
);
pageDTO
.
setDataList
(
topicDTOList
);
return
pageDTO
;
}
@Override
public
Topic
getTopic
(
String
identification
,
TopicAccessWay
topicAccessWay
)
throws
TopicServiceException
{
public
Topic
DTO
getTopic
(
String
identification
,
TopicAccessWay
topicAccessWay
)
throws
TopicServiceException
{
//1. 判断by为话题id,还是话题名称
Topic
topic
;
...
...
@@ -115,7 +149,23 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
throw
new
TopicServiceException
(
TopicErrorCode
.
TOPIC_NOT_EXISTS
);
}
return
topic
;
return
toTopicDTO
(
topic
);
}
/**
* 将topic转换为topicDTO
* @param topic
* @return
*/
private
TopicDTO
toTopicDTO
(
Topic
topic
)
{
TopicDTO
topicDTO
=
new
TopicDTO
();
BeanUtils
.
copyProperties
(
topic
,
topicDTO
);
if
(
SubjectUtils
.
isAuthenticated
())
{
topicDTO
.
setFollowedTopic
(
topicFollowService
.
hasFollowedTopic
(
topic
.
getTopicId
()));
}
else
{
topicDTO
.
setFollowedTopic
(
false
);
}
return
topicDTO
;
}
...
...
@@ -237,11 +287,11 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
}
@Override
public
IPage
<
Topic
>
getTopicPage
(
Integer
pageNumber
,
Integer
pageSize
)
{
public
PageDTO
<
TopicDTO
>
getTopicPage
(
Integer
pageNumber
,
Integer
pageSize
)
{
IPage
<
Topic
>
page
=
new
Page
<>(
pageNumber
,
pageSize
);
QueryWrapper
<
Topic
>
topicQueryWrapper
=
new
QueryWrapper
<>();
topicQueryWrapper
.
orderByDesc
(
"create_time"
);
return
page
(
page
,
topicQueryWrapper
);
return
toPageDTO
(
page
(
page
,
topicQueryWrapper
)
);
}
@Override
...
...
@@ -308,12 +358,12 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
* @return
*/
@Override
public
IPage
<
Topic
>
getHotPage
(
Integer
pageNumber
,
Integer
pageSize
)
{
public
PageDTO
<
TopicDTO
>
getHotPage
(
Integer
pageNumber
,
Integer
pageSize
)
{
IPage
<
Topic
>
page
=
new
Page
<>(
pageNumber
,
pageSize
);
QueryWrapper
<
Topic
>
topicQueryWrapper
=
new
QueryWrapper
<>();
topicQueryWrapper
.
orderByDesc
(
"reference_count"
);
return
page
(
page
,
topicQueryWrapper
);
return
toPageDTO
(
page
(
page
,
topicQueryWrapper
)
);
}
...
...
@@ -387,4 +437,6 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
return
topics
;
}
}
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