From 38509c81ad96ae49df6a6dba3f66dffb9bfb04bf Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 13 May 2022 10:36:40 +0800 Subject: [PATCH] fix news code position --- src/main/resources/templates/febs/views/modules/news/newsInfoList.html | 8 src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java | 93 +++++++++++++ src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java | 35 ----- src/main/java/cc/mrbird/febs/mall/entity/MallNewsCategory.java | 16 ++ src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java | 38 ----- src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java | 71 ++++++++++ src/main/resources/templates/febs/views/modules/news/newsInfoAdd.html | 0 src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java | 59 ++++++++ src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java | 22 +++ src/main/resources/templates/febs/views/modules/news/newsInfoUpdate.html | 0 src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java | 10 - src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java | 67 --------- 12 files changed, 265 insertions(+), 154 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java index 046f5d6..5d3e98b 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java @@ -280,44 +280,6 @@ return mallMemberService.updateAppVersion(appVersion); } - /** - * 新闻中心-列表 - * @param mallNewsInfo - * @param request - * @return - */ - @GetMapping("getNewInfoList") - public FebsResponse getNewInfoList(MallNewsInfo mallNewsInfo, QueryRequest request) { - Map<String, Object> data = getDataTable(mallMemberService.getNewInfoList(mallNewsInfo, request)); - return new FebsResponse().success().data(data); - } - - /** - * 新闻中心-新增 - */ - @PostMapping("addNewsInfo") - @ControllerEndpoint(operation = " 新闻中心-新增", exceptionMessage = "操作失败") - public FebsResponse addNewsInfo(@Valid MallNewsInfoDto mallNewsInfoDto) { - return mallMemberService.addNewsInfo(mallNewsInfoDto); - } - - /** - * 新闻中心-删除 - */ - @GetMapping("delNewsInfo/{id}") - @ControllerEndpoint(operation = " 新闻中心-删除", exceptionMessage = "操作失败") - public FebsResponse delNewsInfo(@NotNull(message = "{required}") @PathVariable Long id) { - return mallMemberService.delNewsInfo(id); - } - - /** - * 新闻中心-更新 - */ - @PostMapping("updateNewsInfo") - @ControllerEndpoint(operation = "新闻中心-更新", exceptionMessage = "操作失败") - public FebsResponse updateNewsInfo(@Valid MallNewsInfoDto mallNewsInfoDto) { - return mallMemberService.updateNewsInfo(mallNewsInfoDto); - } @PostMapping("resetPwd/{id}") @ControllerEndpoint(operation = "会员列表---重置密码", exceptionMessage = "重置密码失败") diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java new file mode 100644 index 0000000..3240f05 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java @@ -0,0 +1,71 @@ +package cc.mrbird.febs.mall.controller; + +import cc.mrbird.febs.common.annotation.ControllerEndpoint; +import cc.mrbird.febs.common.controller.BaseController; +import cc.mrbird.febs.common.entity.FebsResponse; +import cc.mrbird.febs.common.entity.QueryRequest; +import cc.mrbird.febs.mall.dto.MallNewsInfoDto; +import cc.mrbird.febs.mall.entity.MallNewsInfo; +import cc.mrbird.febs.mall.service.IMallNewsInfoService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.Map; + +/** + * @author wzy + * @date 2022-05-13 + **/ +@Slf4j +@Validated +@RestController +@RequiredArgsConstructor +@RequestMapping(value = "/admin/news") +public class AdminNewsInfoController extends BaseController { + + private final IMallNewsInfoService mallNewsInfoService; + + /** + * 新闻中心-列表 + * @param mallNewsInfo + * @param request + * @return + */ + @GetMapping("getNewInfoList") + public FebsResponse getNewInfoList(MallNewsInfo mallNewsInfo, QueryRequest request) { + Map<String, Object> data = getDataTable(mallNewsInfoService.getNewInfoList(mallNewsInfo, request)); + return new FebsResponse().success().data(data); + } + + /** + * 新闻中心-新增 + */ + @PostMapping("addNewsInfo") + @ControllerEndpoint(operation = " 新闻中心-新增", exceptionMessage = "操作失败") + public FebsResponse addNewsInfo(@Valid MallNewsInfoDto mallNewsInfoDto) { + return mallNewsInfoService.addNewsInfo(mallNewsInfoDto); + } + + /** + * 新闻中心-删除 + */ + @GetMapping("delNewsInfo/{id}") + @ControllerEndpoint(operation = " 新闻中心-删除", exceptionMessage = "操作失败") + public FebsResponse delNewsInfo(@NotNull(message = "{required}") @PathVariable Long id) { + return mallNewsInfoService.delNewsInfo(id); + } + + /** + * 新闻中心-更新 + */ + @PostMapping("updateNewsInfo") + @ControllerEndpoint(operation = "新闻中心-更新", exceptionMessage = "操作失败") + public FebsResponse updateNewsInfo(@Valid MallNewsInfoDto mallNewsInfoDto) { + return mallNewsInfoService.updateNewsInfo(mallNewsInfoDto); + } + +} diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java index 8acf032..057d595 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java @@ -240,41 +240,6 @@ return FebsUtil.view("modules/mallMember/appVerSionUpdate"); } - /** - * 新闻中心-列表 - * @return - */ - @GetMapping("newsInfoList") - @RequiresPermissions("newsInfoList:view") - public String newsInfoList() { - return FebsUtil.view("modules/mallMember/newsInfoList"); - } - - /** - * 新闻中心-新增 - * @return - */ - @GetMapping("newsInfoAdd") - @RequiresPermissions("newsInfoAdd:add") - public String newsInfoAdd() { - return FebsUtil.view("modules/mallMember/newsInfoAdd"); - } - - /** - * 新闻中心-详情 - * @param id - * @param model - * @return - */ - @GetMapping("newsInfoUpdate/{id}") - @RequiresPermissions("newsInfoUpdate:update") - public String newsInfoUpdate(@PathVariable long id, Model model) { - MallNewsInfo data = mallMemberService.getNewsInfoById(id); - model.addAttribute("newsInfo", data); - return FebsUtil.view("modules/mallMember/newsInfoUpdate"); - } - - @GetMapping("shopApply") public String shopApply() { diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java new file mode 100644 index 0000000..8e36c43 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java @@ -0,0 +1,59 @@ +package cc.mrbird.febs.mall.controller; + +import cc.mrbird.febs.common.entity.FebsConstant; +import cc.mrbird.febs.common.utils.FebsUtil; +import cc.mrbird.febs.mall.entity.MallNewsInfo; +import cc.mrbird.febs.mall.service.IMallNewsInfoService; +import lombok.RequiredArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +/** + * @author wzy + * @date 2022-05-13 + **/ +@Controller("newView") +@RequestMapping(FebsConstant.VIEW_PREFIX + "modules/news") +@RequiredArgsConstructor +public class ViewNewsController { + + private final IMallNewsInfoService mallNewsInfoService; + + /** + * 新闻中心-列表 + * @return + */ + @GetMapping("newsInfoList") + @RequiresPermissions("newsInfoList:view") + public String newsInfoList() { + return FebsUtil.view("modules/news/newsInfoList"); + } + + /** + * 新闻中心-新增 + * @return + */ + @GetMapping("newsInfoAdd") + @RequiresPermissions("newsInfoAdd:add") + public String newsInfoAdd() { + return FebsUtil.view("modules/news/newsInfoAdd"); + } + + /** + * 新闻中心-详情 + * @param id + * @param model + * @return + */ + @GetMapping("newsInfoUpdate/{id}") + @RequiresPermissions("newsInfoUpdate:update") + public String newsInfoUpdate(@PathVariable long id, Model model) { + MallNewsInfo data = mallNewsInfoService.getNewsInfoById(id); + model.addAttribute("newsInfo", data); + return FebsUtil.view("modules/news/newsInfoUpdate"); + } +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallNewsCategory.java b/src/main/java/cc/mrbird/febs/mall/entity/MallNewsCategory.java new file mode 100644 index 0000000..56e73a4 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallNewsCategory.java @@ -0,0 +1,16 @@ +package cc.mrbird.febs.mall.entity; + +import cc.mrbird.febs.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @author wzy + * @date 2022-05-13 + **/ +@Data +@TableName("mall_news_category") +public class MallNewsCategory extends BaseEntity { + + private String title; +} diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java index e13fe8d..48fd860 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java @@ -66,16 +66,6 @@ FebsResponse activateAccount(Long id); - MallNewsInfo getNewsInfoById(long id); - - IPage<AdminMallNewsInfoVo> getNewInfoList(MallNewsInfo mallNewsInfo, QueryRequest request); - - FebsResponse addNewsInfo(MallNewsInfoDto mallNewsInfoDto); - - FebsResponse delNewsInfo(Long id); - - FebsResponse updateNewsInfo(MallNewsInfoDto mallNewsInfoDto); - FebsResponse updateSystemPay(MallSystemPayDto mallSystemPayDto); AdminAgentLevelSetInfoVo getAgentLevelSetInfoByMemberId(long id); diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java b/src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java new file mode 100644 index 0000000..8609249 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java @@ -0,0 +1,22 @@ +package cc.mrbird.febs.mall.service; + +import cc.mrbird.febs.common.entity.FebsResponse; +import cc.mrbird.febs.common.entity.QueryRequest; +import cc.mrbird.febs.mall.dto.MallNewsInfoDto; +import cc.mrbird.febs.mall.entity.MallNewsInfo; +import cc.mrbird.febs.mall.vo.AdminMallNewsInfoVo; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface IMallNewsInfoService extends IService<MallNewsInfo> { + + IPage<AdminMallNewsInfoVo> getNewInfoList(MallNewsInfo mallNewsInfo, QueryRequest request); + + FebsResponse addNewsInfo(MallNewsInfoDto mallNewsInfoDto); + + FebsResponse delNewsInfo(Long id); + + FebsResponse updateNewsInfo(MallNewsInfoDto mallNewsInfoDto); + + MallNewsInfo getNewsInfoById(long id); +} diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java index f2541be..5399644 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java @@ -319,73 +319,6 @@ } @Override - public MallNewsInfo getNewsInfoById(long id) { - return mallNewsInfoMapper.selectById(id); - } - - @Override - public IPage<AdminMallNewsInfoVo> getNewInfoList(MallNewsInfo mallNewsInfo, QueryRequest request) { - Page<AdminMallNewsInfoVo> page = new Page<>(request.getPageNum(), request.getPageSize()); - IPage<AdminMallNewsInfoVo> adminMallNewsInfoVos = mallNewsInfoMapper.getNewInfoListInPage(page, mallNewsInfo); - return adminMallNewsInfoVos; - } - - @Override - public FebsResponse addNewsInfo(MallNewsInfoDto mallNewsInfoDto) { - Integer type = mallNewsInfoDto.getType(); - if(type == 2){ - Long goodsId = mallNewsInfoDto.getGoodsId()==null?0L:mallNewsInfoDto.getGoodsId(); - if(goodsId == 0L){ - return new FebsResponse().fail().message("请选择跳转的产品"); - } - } - MallNewsInfo mallNewsInfo = new MallNewsInfo(); - mallNewsInfo.setTitle(mallNewsInfoDto.getTitle()); - mallNewsInfo.setContent(mallNewsInfoDto.getContent()); - mallNewsInfo.setType(mallNewsInfoDto.getType()); - if(mallNewsInfoDto.getType() == 2){ - mallNewsInfo.setTargetId(mallNewsInfoDto.getGoodsId()); - } - mallNewsInfoMapper.insert(mallNewsInfo); - return new FebsResponse().success(); - } - - @Override - public FebsResponse delNewsInfo(Long id) { - MallNewsInfo mallNewsInfo = mallNewsInfoMapper.selectById(id); - if(ObjectUtil.isEmpty(mallNewsInfo)){ - return new FebsResponse().fail().message("系统繁忙,请刷新页面重试"); - } - mallNewsInfoMapper.deleteById(id); - return new FebsResponse().success(); - } - - @Override - public FebsResponse updateNewsInfo(MallNewsInfoDto mallNewsInfoDto) { - MallNewsInfo mallNewsInfoBefore = mallNewsInfoMapper.selectById(mallNewsInfoDto.getId()); - if(ObjectUtil.isEmpty(mallNewsInfoBefore)){ - return new FebsResponse().fail().message("系统繁忙,请刷新页面重试"); - } - Integer type = mallNewsInfoDto.getType(); - if(type == 2){ - Long goodsId = mallNewsInfoDto.getGoodsId()==null?0L:mallNewsInfoDto.getGoodsId(); - if(goodsId == 0L){ - return new FebsResponse().fail().message("请选择跳转的产品"); - } - } - MallNewsInfo mallNewsInfo = new MallNewsInfo(); - mallNewsInfo.setTitle(mallNewsInfoDto.getTitle()); - mallNewsInfo.setContent(mallNewsInfoDto.getContent()); - mallNewsInfo.setType(mallNewsInfoDto.getType()); - if(mallNewsInfoDto.getType() == 2){ - mallNewsInfo.setTargetId(mallNewsInfoDto.getGoodsId()); - } - mallNewsInfoMapper.insert(mallNewsInfo); - mallNewsInfoMapper.deleteById(mallNewsInfoDto.getId()); - return new FebsResponse().success(); - } - - @Override @Transactional public FebsResponse updateSystemPay(MallSystemPayDto mallSystemPayDto) { Long memberId = mallSystemPayDto.getId(); diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java new file mode 100644 index 0000000..2dd07ea --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java @@ -0,0 +1,93 @@ +package cc.mrbird.febs.mall.service.impl; + +import cc.mrbird.febs.common.entity.FebsResponse; +import cc.mrbird.febs.common.entity.QueryRequest; +import cc.mrbird.febs.mall.dto.MallNewsInfoDto; +import cc.mrbird.febs.mall.entity.MallNewsInfo; +import cc.mrbird.febs.mall.mapper.MallNewsInfoMapper; +import cc.mrbird.febs.mall.service.IMallNewsInfoService; +import cc.mrbird.febs.mall.vo.AdminMallNewsInfoVo; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @author wzy + * @date 2022-05-13 + **/ +@Slf4j +@Service +@RequiredArgsConstructor +public class MallNewsInfoServiceImpl extends ServiceImpl<MallNewsInfoMapper, MallNewsInfo> implements IMallNewsInfoService { + + @Override + public IPage<AdminMallNewsInfoVo> getNewInfoList(MallNewsInfo mallNewsInfo, QueryRequest request) { + Page<AdminMallNewsInfoVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<AdminMallNewsInfoVo> adminMallNewsInfoVos = this.baseMapper.getNewInfoListInPage(page, mallNewsInfo); + return adminMallNewsInfoVos; + } + + @Override + public FebsResponse addNewsInfo(MallNewsInfoDto mallNewsInfoDto) { + Integer type = mallNewsInfoDto.getType(); + if(type == 2){ + Long goodsId = mallNewsInfoDto.getGoodsId()==null?0L:mallNewsInfoDto.getGoodsId(); + if(goodsId == 0L){ + return new FebsResponse().fail().message("请选择跳转的产品"); + } + } + MallNewsInfo mallNewsInfo = new MallNewsInfo(); + mallNewsInfo.setTitle(mallNewsInfoDto.getTitle()); + mallNewsInfo.setContent(mallNewsInfoDto.getContent()); + mallNewsInfo.setType(mallNewsInfoDto.getType()); + if(mallNewsInfoDto.getType() == 2){ + mallNewsInfo.setTargetId(mallNewsInfoDto.getGoodsId()); + } + this.baseMapper.insert(mallNewsInfo); + return new FebsResponse().success(); + } + + @Override + public FebsResponse delNewsInfo(Long id) { + MallNewsInfo mallNewsInfo = this.baseMapper.selectById(id); + if(ObjectUtil.isEmpty(mallNewsInfo)){ + return new FebsResponse().fail().message("系统繁忙,请刷新页面重试"); + } + this.baseMapper.deleteById(id); + return new FebsResponse().success(); + } + + @Override + public FebsResponse updateNewsInfo(MallNewsInfoDto mallNewsInfoDto) { + MallNewsInfo mallNewsInfoBefore = this.baseMapper.selectById(mallNewsInfoDto.getId()); + if(ObjectUtil.isEmpty(mallNewsInfoBefore)){ + return new FebsResponse().fail().message("系统繁忙,请刷新页面重试"); + } + Integer type = mallNewsInfoDto.getType(); + if(type == 2){ + Long goodsId = mallNewsInfoDto.getGoodsId()==null?0L:mallNewsInfoDto.getGoodsId(); + if(goodsId == 0L){ + return new FebsResponse().fail().message("请选择跳转的产品"); + } + } + MallNewsInfo mallNewsInfo = new MallNewsInfo(); + mallNewsInfo.setTitle(mallNewsInfoDto.getTitle()); + mallNewsInfo.setContent(mallNewsInfoDto.getContent()); + mallNewsInfo.setType(mallNewsInfoDto.getType()); + if(mallNewsInfoDto.getType() == 2){ + mallNewsInfo.setTargetId(mallNewsInfoDto.getGoodsId()); + } + this.baseMapper.insert(mallNewsInfo); + this.baseMapper.deleteById(mallNewsInfoDto.getId()); + return new FebsResponse().success(); + } + + @Override + public MallNewsInfo getNewsInfoById(long id) { + return this.baseMapper.selectById(id); + } +} diff --git a/src/main/resources/templates/febs/views/modules/mallMember/newsInfoAdd.html b/src/main/resources/templates/febs/views/modules/news/newsInfoAdd.html similarity index 100% rename from src/main/resources/templates/febs/views/modules/mallMember/newsInfoAdd.html rename to src/main/resources/templates/febs/views/modules/news/newsInfoAdd.html diff --git a/src/main/resources/templates/febs/views/modules/mallMember/newsInfoList.html b/src/main/resources/templates/febs/views/modules/news/newsInfoList.html similarity index 94% rename from src/main/resources/templates/febs/views/modules/mallMember/newsInfoList.html rename to src/main/resources/templates/febs/views/modules/news/newsInfoList.html index 1bc98a9..7675466 100644 --- a/src/main/resources/templates/febs/views/modules/mallMember/newsInfoList.html +++ b/src/main/resources/templates/febs/views/modules/news/newsInfoList.html @@ -58,7 +58,7 @@ var data = obj.data, layEvent = obj.event; if (layEvent === 'newsInfoUpdate') { - febs.modal.open('编辑', 'modules/mallMember/newsInfoUpdate/' + data.id, { + febs.modal.open('编辑', 'modules/news/newsInfoUpdate/' + data.id, { btn: ['提交', '取消'], yes: function (index, layero) { $('#systemPay-update').find('#submit').trigger('click'); @@ -76,7 +76,7 @@ }); function delNewsInfo(id) { - febs.get(ctx + 'admin/mallMember/delNewsInfo/' + id, null, function () { + febs.get(ctx + 'admin/news/delNewsInfo/' + id, null, function () { febs.alert.success('操作成功'); $query.click(); }); @@ -96,7 +96,7 @@ }); $add.on('click', function () { - febs.modal.open('新增', 'modules/mallMember/newsInfoAdd/', { + febs.modal.open('新增', 'modules/news/newsInfoAdd/', { btn: ['提交', '取消'], yes: function (index, layero) { $('#newsInfo-add').find('#submit').trigger('click'); @@ -111,7 +111,7 @@ tableIns = febs.table.init({ elem: $view.find('table'), id: 'newInfoTable', - url: ctx + 'admin/mallMember/getNewInfoList', + url: ctx + 'admin/news/getNewInfoList', cols: [[ {field: 'title', title: '标题', minWidth: 120,align:'center'}, {field: 'content', title: '内容', minWidth: 120,align:'center'}, diff --git a/src/main/resources/templates/febs/views/modules/mallMember/newsInfoUpdate.html b/src/main/resources/templates/febs/views/modules/news/newsInfoUpdate.html similarity index 100% rename from src/main/resources/templates/febs/views/modules/mallMember/newsInfoUpdate.html rename to src/main/resources/templates/febs/views/modules/news/newsInfoUpdate.html -- Gitblit v1.9.1