package com.imooc.controller; import com.imooc.base.BaseInfoProperties; import com.imooc.bo.VlogBO; import com.imooc.enums.YesOrNo; import com.imooc.grace.result.GraceJSONResult; import com.imooc.service.VlogService; import com.imooc.utils.PagedGridResult; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.*; @Slf4j @Api(tags = "VlogController 短视频相关业务功能的接口") @RequestMapping("vlog") @RestController @RefreshScope public class VlogController extends BaseInfoProperties { @Autowired private VlogService vlogService; @PostMapping("publish") public GraceJSONResult publish(@RequestBody VlogBO vlogBO) { // FIXME 作业,校验VlogBO vlogService.createVlog(vlogBO); return GraceJSONResult.ok(); } @GetMapping("indexList") public GraceJSONResult indexList(@RequestParam(defaultValue = "") String userId, @RequestParam(defaultValue = "") String search, @RequestParam Integer page, @RequestParam Integer pageSize) { if (page == null) { page = COMMON_START_PAGE; } if (pageSize == null) { pageSize = COMMON_PAGE_SIZE; } PagedGridResult gridResult = vlogService.getIndexVlogList(userId, search, page, pageSize); return GraceJSONResult.ok(gridResult); } @GetMapping("detail") public GraceJSONResult detail(@RequestParam(defaultValue = "") String userId, @RequestParam String vlogId) { return GraceJSONResult.ok(vlogService.getVlogDetailById(userId, vlogId)); } @PostMapping("changeToPrivate") public GraceJSONResult changeToPrivate(@RequestParam String userId, @RequestParam String vlogId) { vlogService.changeToPrivateOrPublic(userId, vlogId, YesOrNo.YES.type); return GraceJSONResult.ok(); } @PostMapping("changeToPublic") public GraceJSONResult changeToPublic(@RequestParam String userId, @RequestParam String vlogId) { vlogService.changeToPrivateOrPublic(userId, vlogId, YesOrNo.NO.type); return GraceJSONResult.ok(); } @GetMapping("myPublicList") public GraceJSONResult myPublicList(@RequestParam String userId, @RequestParam Integer page, @RequestParam Integer pageSize) { if (page == null) { page = COMMON_START_PAGE; } if (pageSize == null) { pageSize = COMMON_PAGE_SIZE; } PagedGridResult gridResult = vlogService.queryMyVlogList(userId, page, pageSize, YesOrNo.NO.type); return GraceJSONResult.ok(gridResult); } @GetMapping("myPrivateList") public GraceJSONResult myPrivateList(@RequestParam String userId, @RequestParam Integer page, @RequestParam Integer pageSize) { if (page == null) { page = COMMON_START_PAGE; } if (pageSize == null) { pageSize = COMMON_PAGE_SIZE; } PagedGridResult gridResult = vlogService.queryMyVlogList(userId, page, pageSize, YesOrNo.YES.type); return GraceJSONResult.ok(gridResult); } @GetMapping("myLikedList") public GraceJSONResult myLikedList(@RequestParam String userId, @RequestParam Integer page, @RequestParam Integer pageSize) { if (page == null) { page = COMMON_START_PAGE; } if (pageSize == null) { pageSize = COMMON_PAGE_SIZE; } PagedGridResult gridResult = vlogService.getMyLikedVlogList(userId, page, pageSize); return GraceJSONResult.ok(gridResult); } @Value(("${nacos.counts}")) private Integer nacosConuts; @PostMapping("like") public GraceJSONResult like(@RequestParam String userId, @RequestParam String vlogerId, @RequestParam String vlogId) { // 我点赞的视频,关联关系保存到数据库 vlogService.userLikeVlog(userId, vlogId); // 点赞后,视频和视频发布者的获赞都会 +1 redis.increment(REDIS_VLOGER_BE_LIKED_COUNTS + ":" + vlogerId, 1); redis.increment(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId, 1); // 我点赞的视频,需要在redis中保存关联关系 redis.set(REDIS_USER_LIKE_VLOG + ":" + userId + ":" + vlogId, "1"); log.info("nacosConuts="+nacosConuts); String countsStr = redis.get(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId); Integer counts=0; if (StringUtils.isNotBlank(countsStr)){ counts=Integer.valueOf(countsStr); if (counts>=nacosConuts){ vlogService.flushCounts(vlogId, counts); } } return GraceJSONResult.ok(); } @PostMapping("unlike") public GraceJSONResult unlike(@RequestParam String userId, @RequestParam String vlogerId, @RequestParam String vlogId) { // 我取消点赞的视频,关联关系删除 vlogService.userUnLikeVlog(userId, vlogId); redis.decrement(REDIS_VLOGER_BE_LIKED_COUNTS + ":" + vlogerId, 1); redis.decrement(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId, 1); redis.del(REDIS_USER_LIKE_VLOG + ":" + userId + ":" + vlogId); return GraceJSONResult.ok(); } @PostMapping("totalLikedCounts") public GraceJSONResult totalLikedCounts(@RequestParam String vlogId) { return GraceJSONResult.ok(vlogService.getVlogBeLikedCounts(vlogId)); } @GetMapping("followList") public GraceJSONResult followList(@RequestParam String myId, @RequestParam Integer page, @RequestParam Integer pageSize) { if (page == null) { page = COMMON_START_PAGE; } if (pageSize == null) { pageSize = COMMON_PAGE_SIZE; } PagedGridResult gridResult = vlogService.getMyFollowVlogList(myId, page, pageSize); return GraceJSONResult.ok(gridResult); } @GetMapping("friendList") public GraceJSONResult friendList(@RequestParam String myId, @RequestParam Integer page, @RequestParam Integer pageSize) { if (page == null) { page = COMMON_START_PAGE; } if (pageSize == null) { pageSize = COMMON_PAGE_SIZE; } PagedGridResult gridResult = vlogService.getMyFriendVlogList(myId, page, pageSize); return GraceJSONResult.ok(gridResult); } }