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
1ad60127
Commit
1ad60127
authored
Feb 01, 2020
by
胡明森
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
TopicApi0201
parent
5e04066c
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
286 additions
and
2 deletions
+286
-2
src/main/java/cn/meteor/beyondclouds/modules/topic/api/TopicApi.java
+63
-0
src/main/java/cn/meteor/beyondclouds/modules/topic/enums/TopicErrorCode.java
+33
-0
src/main/java/cn/meteor/beyondclouds/modules/topic/exception/TopicServiceException.java
+23
-0
src/main/java/cn/meteor/beyondclouds/modules/topic/service/ITopicService.java
+36
-0
src/main/java/cn/meteor/beyondclouds/modules/topic/service/impl/TopicFollowServiceImpl.java
+24
-0
src/main/java/cn/meteor/beyondclouds/modules/topic/service/impl/TopicServiceImpl.java
+99
-0
src/main/resources/application-prod.yml
+4
-1
src/main/resources/application.yml
+4
-1
No files found.
src/main/java/cn/meteor/beyondclouds/modules/topic/api/TopicApi.java
View file @
1ad60127
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
api
;
import
cn.meteor.beyondclouds.common.form.PageForm
;
import
cn.meteor.beyondclouds.core.annotation.Anonymous
;
import
cn.meteor.beyondclouds.core.annotation.CurrentSubject
;
import
cn.meteor.beyondclouds.core.api.Response
;
import
cn.meteor.beyondclouds.core.bean.Subject
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.exception.TopicServiceException
;
import
cn.meteor.beyondclouds.modules.topic.form.CreateTopicForm
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicFollowService
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicService
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
io.swagger.annotations.Api
;
...
...
@@ -30,12 +34,17 @@ public class TopicApi {
private
ITopicService
iTopicService
;
private
ITopicFollowService
iTopicFollowService
;
@Autowired
public
void
setiTopicService
(
ITopicService
iTopicService
)
{
this
.
iTopicService
=
iTopicService
;
}
@Autowired
public
void
setiTopicFollowService
(
ITopicFollowService
iTopicFollowService
)
{
this
.
iTopicFollowService
=
iTopicFollowService
;
}
@ApiOperation
(
"创建话题"
)
@PostMapping
(
"/topic"
)
...
...
@@ -72,4 +81,58 @@ public class TopicApi {
}
@Anonymous
@ApiOperation
(
"话题详情"
)
@GetMapping
(
"/topic/{topicId}"
)
public
Response
getTopic
(
@PathVariable
(
"topicId"
)
String
topicId
){
try
{
Topic
topic
=
iTopicService
.
getTopic
(
topicId
);
return
Response
.
success
(
topic
);
}
catch
(
TopicServiceException
e
)
{
e
.
printStackTrace
();
return
Response
.
error
(
e
);
}
}
@ApiOperation
(
"关注话题"
)
@PostMapping
(
"/topic/{topicId}/follower"
)
public
Response
topicFollower
(
@PathVariable
(
"topicId"
)
String
topicId
,
@CurrentSubject
Subject
subject
){
try
{
iTopicService
.
topicFollower
((
String
)
subject
.
getId
(),
topicId
);
return
Response
.
success
();
}
catch
(
TopicServiceException
e
)
{
e
.
printStackTrace
();
return
Response
.
error
(
e
);
}
}
@ApiOperation
(
"话题关注者列表"
)
@GetMapping
(
"/topic/{topicId}/follower"
)
public
Response
topicsFollower
(
@PathVariable
(
"topicId"
)
@Valid
String
topicId
,
PageForm
pageForm
,
BindingResult
bindingResult
)
{
if
(
bindingResult
.
hasErrors
())
{
return
Response
.
fieldError
(
bindingResult
.
getFieldError
());
}
IPage
<
User
>
page
=
iTopicService
.
getTopicsFollower
(
pageForm
.
getPage
(),
pageForm
.
getSize
(),
topicId
);
return
Response
.
success
(
page
);
}
@ApiOperation
(
"我关注的话题"
)
@GetMapping
(
"/my/topic/followed"
)
public
Response
topicsMyFollowed
(
@Valid
PageForm
pageForm
,
@CurrentSubject
Subject
subject
,
BindingResult
bindingResult
)
{
if
(
bindingResult
.
hasErrors
())
{
return
Response
.
fieldError
(
bindingResult
.
getFieldError
());
}
IPage
<
Topic
>
page
=
iTopicService
.
getTopicsMyFollowed
(
pageForm
.
getPage
(),
pageForm
.
getSize
(),
String
.
valueOf
(
subject
.
getId
()));
return
Response
.
success
(
page
);
}
}
src/main/java/cn/meteor/beyondclouds/modules/topic/enums/TopicErrorCode.java
0 → 100644
View file @
1ad60127
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
enums
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
/**
* 话题相关错误码
* @author 胡明森
*/
public
enum
TopicErrorCode
implements
IErrorCode
{
/**
* 话题已存在
*/
TOPIC_EXISTS
(
3001
,
"该话题已存在"
),
TOPIC_NOT_EXISTS
(
3002
,
"该话题不存在"
);
TopicErrorCode
(
long
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
private
long
code
;
private
String
msg
;
@Override
public
long
code
()
{
return
code
;
}
@Override
public
String
msg
()
{
return
msg
;
}
}
src/main/java/cn/meteor/beyondclouds/modules/topic/exception/TopicServiceException.java
0 → 100644
View file @
1ad60127
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
exception
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
import
cn.meteor.beyondclouds.core.exception.ServiceException
;
import
lombok.Data
;
/**
* 话题业务异常
* @author 胡明森
* @since 2020/1/28
*/
@Data
public
class
TopicServiceException
extends
ServiceException
{
public
TopicServiceException
(
long
errorCode
,
String
errorMsg
)
{
super
(
errorCode
,
errorMsg
);
}
public
TopicServiceException
(
IErrorCode
errorCode
)
{
this
(
errorCode
.
code
(),
errorCode
.
msg
());
}
}
src/main/java/cn/meteor/beyondclouds/modules/topic/service/ITopicService.java
View file @
1ad60127
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
service
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.exception.TopicServiceException
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.List
;
...
...
@@ -27,4 +30,37 @@ public interface ITopicService extends IService<Topic> {
* @param keywords
*/
List
<
Topic
>
searchTopics
(
String
keywords
);
/**
* 关注话题
* @param userId
* @param topicId
*/
void
topicFollower
(
String
userId
,
String
topicId
)
throws
TopicServiceException
;
/**
* 话题详情
* @param topicId
* @return
*/
Topic
getTopic
(
String
topicId
)
throws
TopicServiceException
;
/**
* 我关注的话题
* @param page
* @param size
* @param userId
* @return
*/
IPage
<
Topic
>
getTopicsMyFollowed
(
Integer
page
,
Integer
size
,
String
userId
);
/**
* 话题关注者列表
* @param page
* @param size
* @param topicId
* @return
*/
IPage
<
User
>
getTopicsFollower
(
Integer
page
,
Integer
size
,
String
topicId
);
}
src/main/java/cn/meteor/beyondclouds/modules/topic/service/impl/TopicFollowServiceImpl.java
View file @
1ad60127
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
service
.
impl
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
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.modules.topic.service.ITopicService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* <p>
* 话题关注表,记录了用户和话题之间的关注关系 服务实现类
...
...
@@ -17,4 +26,19 @@ import org.springframework.stereotype.Service;
@Service
public
class
TopicFollowServiceImpl
extends
ServiceImpl
<
TopicFollowMapper
,
TopicFollow
>
implements
ITopicFollowService
{
private
ITopicFollowService
iTopicFollowService
;
private
ITopicService
iTopicService
;
@Autowired
public
void
setiTopicFollowService
(
ITopicFollowService
iTopicFollowService
)
{
this
.
iTopicFollowService
=
iTopicFollowService
;
}
@Autowired
public
void
setiTopicService
(
ITopicService
iTopicService
)
{
this
.
iTopicService
=
iTopicService
;
}
}
src/main/java/cn/meteor/beyondclouds/modules/topic/service/impl/TopicServiceImpl.java
View file @
1ad60127
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
service
.
impl
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.entity.TopicFollow
;
import
cn.meteor.beyondclouds.modules.topic.enums.TopicErrorCode
;
import
cn.meteor.beyondclouds.modules.topic.exception.TopicServiceException
;
import
cn.meteor.beyondclouds.modules.topic.mapper.TopicMapper
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicFollowService
;
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
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -25,6 +34,15 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
private
ITopicService
iTopicService
;
private
ITopicFollowService
iTopicFollowService
;
private
IUserService
iUserService
;
@Autowired
public
void
setiUserService
(
IUserService
iUserService
)
{
this
.
iUserService
=
iUserService
;
}
@Autowired
public
void
setTopicMapper
(
TopicMapper
topicMapper
)
{
this
.
topicMapper
=
topicMapper
;
...
...
@@ -35,6 +53,11 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
this
.
iTopicService
=
iTopicService
;
}
@Autowired
public
void
setiTopicFollowService
(
ITopicFollowService
iTopicFollowService
)
{
this
.
iTopicFollowService
=
iTopicFollowService
;
}
@Override
public
void
createTopic
(
String
userId
,
String
topicName
)
{
...
...
@@ -50,4 +73,80 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
return
topicMapper
.
searchTopics
(
keywords
);
}
@Override
public
Topic
getTopic
(
String
topicId
)
throws
TopicServiceException
{
//1. 获取话题
Topic
topic
=
iTopicService
.
getById
(
topicId
);
//2. 找不到该话题,抛出业务异常
if
(
topic
==
null
)
{
throw
new
TopicServiceException
(
TopicErrorCode
.
TOPIC_NOT_EXISTS
);
}
return
topic
;
}
@Override
public
void
topicFollower
(
String
userId
,
String
topicId
)
throws
TopicServiceException
{
//1. 获取话题
Topic
topic
=
iTopicService
.
getById
(
topicId
);
//2. 找不到该话题,抛出业务异常
if
(
topic
==
null
)
{
throw
new
TopicServiceException
(
TopicErrorCode
.
TOPIC_NOT_EXISTS
);
}
//3. 关注话题
TopicFollow
topicFollow
=
new
TopicFollow
();
topicFollow
.
setTopicId
(
topicId
);
topicFollow
.
setUserId
(
userId
);
iTopicFollowService
.
save
(
topicFollow
);
}
@Override
public
IPage
<
Topic
>
getTopicsMyFollowed
(
Integer
page
,
Integer
size
,
String
userId
)
{
//1. 通过用户id获取我关注的所有话题的id
IPage
<
TopicFollow
>
pages
=
new
Page
<>(
page
,
size
);
QueryWrapper
<
TopicFollow
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"user_id"
,
userId
);
IPage
<
TopicFollow
>
page1
=
iTopicFollowService
.
page
(
pages
,
queryWrapper
);
//2. 通过话题id获取话题详情
IPage
<
Topic
>
page2
=
new
Page
<>(
page
,
size
);
QueryWrapper
<
Topic
>
queryWrapper1
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"topic_id"
,
page1
.
getRecords
());
//3. 分页返回
return
iTopicService
.
page
(
page2
,
queryWrapper1
);
}
@Override
public
IPage
<
User
>
getTopicsFollower
(
Integer
page
,
Integer
size
,
String
topicId
)
{
//1. 通过话题id获取该话题所有关注着
IPage
<
TopicFollow
>
pages
=
new
Page
<>(
page
,
size
);
QueryWrapper
<
TopicFollow
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"topic_id"
,
topicId
);
IPage
<
TopicFollow
>
page1
=
iTopicFollowService
.
page
(
pages
,
queryWrapper
);
//2. 通过用户id获取用户详情
IPage
<
User
>
page2
=
new
Page
<>(
page
,
size
);
QueryWrapper
<
User
>
queryWrapper1
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"user_id"
,
page1
.
getRecords
());
//3. 分页返回
return
iUserService
.
page
(
page2
,
queryWrapper1
);
}
}
src/main/resources/application-prod.yml
View file @
1ad60127
...
...
@@ -3,7 +3,7 @@ spring:
driver-class-name
:
com.mysql.cj.jdbc.Driver
url
:
jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
username
:
root
password
:
100Centa30821%mysql
password
:
password
swagger
:
enable
:
true
...
...
@@ -32,3 +32,5 @@ beyondclouds:
client-id
:
101846021
client-secret
:
5bc41deeb7e152e2e6aff97726bbf86a
redirect-uri
:
http://meteor.natapp1.cc/auth/qq
server
:
port
:
8081
\ No newline at end of file
src/main/resources/application.yml
View file @
1ad60127
...
...
@@ -3,7 +3,7 @@ spring:
driver-class-name
:
com.mysql.cj.jdbc.Driver
url
:
jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
username
:
root
password
:
100Centa30821%mysql
password
:
password
swagger
:
enable
:
true
...
...
@@ -32,3 +32,5 @@ beyondclouds:
client-id
:
101846021
client-secret
:
5bc41deeb7e152e2e6aff97726bbf86a
redirect-uri
:
http://meteor.natapp1.cc/auth/qq
server
:
port
:
8081
\ No newline at end of file
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