前言
本来没有打算做订阅功能,这个功能是到现在,随着项目的逐渐进行,感觉需要订阅的功能,所以才加上的。
首先建了订阅表,然后实现了一些功能。
这里将标签的订阅和博客的订阅,存在了一张表中,用type区分,儿subscribed_id为博客或者标签的id
添加订阅信息
/**
* 添加订阅信息
* @param username
* @param subscriptionId
* @param type
* @return
*/
@PermitAll
@RequestMapping(value = "/add", method = RequestMethod.GET, produces = "application/json")
public Response addSubscription(
@RequestAttribute String username,
@RequestParam Integer subscriptionId,
@RequestParam Integer type ) {
User ouser = userService.selectUserByName(username);
//设置日期格式
userSubscriptionService.insertSubscription(ouser.getId(),subscriptionId,type);
return Response.success("用户订阅成功");
}
/**
* 添加一条订阅信息
* @param userId
* @param subscriptionId
* @param type
*/
public void insertSubscription(int userId,int subscriptionId,int type)
{
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String subscribedTime = df.format(new Date());
UserSubscription userSubscription =UserSubscription.builder()
.userId(userId)
.subscriptionId(subscriptionId)
.type(type)
.subscribedTime(subscribedTime)
.build();
subscriptionDao.insertSubscription(userSubscription);
}
/**
* 插入一条订阅记录
* @param userSubscription
*/
@Insert("insert into user_subscription (user_id , subscribed_id,type,subscribed_time) " +
"values (#{userSubscription.userId} , #{userSubscription.subscriptionId} , #{userSubscription.type} , #{userSubscription.subscribedTime}) ")
void insertSubscription(@Param("userSubscription") UserSubscription userSubscription);
删除订阅信息
/**
*删除订阅信息
* @param username
* @param subscriptionId
* @param type
* @return
*/
@PermitAll
@RequestMapping(value = "/{type}/{subscriptionId}", method = RequestMethod.DELETE, produces = "application/json")
public Response deleteSubscription(
@RequestAttribute String username,
@PathVariable Integer type,
@PathVariable Integer subscriptionId
) {
User ouser = userService.selectUserByName(username);
UserSubscription userSubscription =UserSubscription.builder()
.userId(ouser.getId())
.subscriptionId(subscriptionId)
.type(type)
.build();
userSubscriptionService.deleteSubscription(userSubscription);
return Response.success("订阅删除成功");
}
/**
* 删除一条订阅
* @param userSubscription UserSubscription
*/
public void deleteSubscription(UserSubscription userSubscription)
{
subscriptionDao.deleteSubscription(userSubscription);
}
/**
* 删除一条订阅
* @param userSubscription
*/
@Delete("delete from user_subscription " +
" where user_id = #{userSubscription.userId} " +
" and subscribed_id = #{userSubscription.subscriptionId} " +
" and type = #{userSubscription.type} ")
void deleteSubscription(@Param("userSubscription") UserSubscription userSubscription);
获取订阅列表
由于订阅的有标签和博客,所以使用了Object类型的数据,同时存放标签和博客在一个list中
/**
* 获取订阅列表
* @param username
* @return
*/
@PermitAll
@RequestMapping(value = "/list", method = RequestMethod.GET, produces = "application/json")
public Response getSubscriptionList(
@RequestAttribute String username
) {
User ouser = userService.selectUserByName(username);
List<Object> list = userSubscriptionService.selectSubscriptionList(ouser.getId());
return Response.success("获取订阅列表成功" , list);
}
/**
* 获取订阅列表
* @param userId
* @return
*/
public List<Object> selectSubscriptionList(int userId)
{
List<UserSubscription> userSubscriptions = subscriptionDao.selectSubscriptionList(userId);
List<Object> subscriptionList = new ArrayList<>();
for(UserSubscription userSubscription :userSubscriptions)
{
//如果是博客
if(userSubscription.getType() == 0)
{
Blog blog = blogDao.selectBlogById(userSubscription.getSubscriptionId());
if(blog != null)
{
SubBlog subBlog = new SubBlog();
subBlog.setFeed(blog.getFeed());
subBlog.setUrl(blog.getUrl());
subBlog.setId(blog.getId());
subBlog.setTitle(blog.getTitle());
subscriptionList.add(subBlog);
}
}
else
{
Tag tag = tagDao.getTagById(userSubscription.getSubscriptionId());
if(tag != null)
{
SubTag subTag = new SubTag();
subTag.setId(tag.getId());
subTag.setName(tag.getName());
subTag.setDescription(tag.getDescription());
subTag.setCount(tag.getCount());
subscriptionList.add(subTag);
}
}
}
return subscriptionList;
}
先获取到,订阅的id,然后根据订阅的id和tpye分别获取到对应的标签或者博客的详细信息,然后返回
/**
* 获取订阅列表
* @param userId
* @return
*/
@Select("select * from user_subscription " +
" where user_id = #{userId} ")
@Results(id = "UserSubscription", value = {
@Result(property = "id", column = "id"),
@Result(property = "userId", column = "user_id"),
@Result(property = "subscriptionId", column = "subscribed_id"),
@Result(property = "type", column = "type"),
@Result(property = "subscribedTime", column = "subscribed_time"),
})
List<UserSubscription> selectSubscriptionList(@Param("userId") int userId);
获取订阅状态
查询表格,获取是否被订阅,0为没有被订阅 1为已经被订阅
/**
* 获取订阅状态
* @param username
* @param type
* @param subscriptionId
* @return
*/
@PermitAll
@RequestMapping(value = "/status/{type}/{subscriptionId}", method = RequestMethod.GET, produces = "application/json")
public Response getSubscriptionStatus(
@RequestAttribute String username,
@PathVariable Integer type,
@PathVariable Integer subscriptionId
) {
User ouser = userService.selectUserByName(username);
int status = userSubscriptionService.selectSubscriptionBysubscriptionId(ouser.getId(),subscriptionId,type);
return Response.success("获取订阅列表成功" , status);
}
/**
* 获取是否被订阅
* @param userId
* @param subscribedId
* @param type
* @return
*/
public int selectSubscriptionBysubscriptionId( int userId, int subscribedId, int type )
{
UserSubscription userSubscription =subscriptionDao.selectSubscriptionBysubscriptionId(userId,subscribedId,type);
if(userSubscription == null)
{
return 0;
}
return 1;
}
/**
* 获取订阅
* @param userId
* @param subscribedId
* @param type
* @return
*/
@Select("select * from user_subscription where user_id = #{userId} and type = #{type} and subscribed_id = #{subscribedId}")
UserSubscription selectSubscriptionBysubscriptionId(@Param("userId") int userId,@Param("subscribedId") int subscribedId,@Param("type") int type);