From e58d8fbe734f67b4fc88ff270be9ba79ea431376 Mon Sep 17 00:00:00 2001 From: Wh1te Date: Wed, 30 Sep 2020 00:25:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=88=96=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=8F=8B=E9=93=BE=E6=97=B6=E6=A0=A1=E9=AA=8C=20name?= =?UTF-8?q?=20=E5=92=8C=20url=20=E6=98=AF=E5=90=A6=E9=87=8D=E5=A4=8D=20(#9?= =?UTF-8?q?97)=20(#1079)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/api/LinkController.java | 5 +-- .../halo/app/repository/LinkRepository.java | 4 ++ .../run/halo/app/service/LinkService.java | 19 +++++++++ .../app/service/impl/LinkServiceImpl.java | 39 +++++++++++++++++++ 4 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/main/java/run/halo/app/controller/admin/api/LinkController.java b/src/main/java/run/halo/app/controller/admin/api/LinkController.java index a42f4ff8d..a9f6bff25 100644 --- a/src/main/java/run/halo/app/controller/admin/api/LinkController.java +++ b/src/main/java/run/halo/app/controller/admin/api/LinkController.java @@ -54,9 +54,8 @@ public class LinkController { @ApiOperation("Updates a link") public LinkDTO updateBy(@PathVariable("id") Integer id, @RequestBody @Valid LinkParam linkParam) { - Link link = linkService.getById(id); - linkParam.update(link); - return new LinkDTO().convertFrom(linkService.update(link)); + Link link = linkService.updateBy(id, linkParam); + return new LinkDTO().convertFrom(link); } @DeleteMapping("{id:\\d+}") diff --git a/src/main/java/run/halo/app/repository/LinkRepository.java b/src/main/java/run/halo/app/repository/LinkRepository.java index fbfe8aed7..f54d9dfc2 100755 --- a/src/main/java/run/halo/app/repository/LinkRepository.java +++ b/src/main/java/run/halo/app/repository/LinkRepository.java @@ -20,4 +20,8 @@ public interface LinkRepository extends BaseRepository { */ @Query(value = "select distinct a.team from Link a") List findAllTeams(); + + boolean existsByNameAndIdNot(String name, Integer id); + + boolean existsByUrlAndIdNot(String url, Integer id); } diff --git a/src/main/java/run/halo/app/service/LinkService.java b/src/main/java/run/halo/app/service/LinkService.java index a0e37e25e..82f83880f 100755 --- a/src/main/java/run/halo/app/service/LinkService.java +++ b/src/main/java/run/halo/app/service/LinkService.java @@ -55,6 +55,17 @@ public interface LinkService extends CrudService { @NonNull Link createBy(@NonNull LinkParam linkParam); + /** + * Updates link by link param. + * + * + * @param id must not be null + * @param linkParam must not be null + * @return updated link + */ + @NonNull + Link updateBy(Integer id, @NonNull LinkParam linkParam); + /** * Exists by link name. * @@ -63,6 +74,14 @@ public interface LinkService extends CrudService { */ boolean existByName(String name); + /** + * Exists by link url. + * + * @param url must not be blank + * @return true if exists; false otherwise + */ + boolean existByUrl(String url); + /** * List all link teams. * diff --git a/src/main/java/run/halo/app/service/impl/LinkServiceImpl.java b/src/main/java/run/halo/app/service/impl/LinkServiceImpl.java index 02d0fa8da..b5cd33908 100644 --- a/src/main/java/run/halo/app/service/impl/LinkServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/LinkServiceImpl.java @@ -101,9 +101,39 @@ public class LinkServiceImpl extends AbstractCrudService implemen throw new AlreadyExistsException("友情链接 " + linkParam.getName() + " 已存在").setErrorData(linkParam.getName()); } + // Check the url + exist = existByUrl(linkParam.getUrl()); + + if (exist) { + throw new AlreadyExistsException("友情链接 " + linkParam.getUrl() + " 已存在").setErrorData(linkParam.getUrl()); + } + return create(linkParam.convertTo()); } + @Override + public @NotNull Link updateBy(Integer id, @NotNull LinkParam linkParam) { + Assert.notNull(id, "Id must not be null"); + Assert.notNull(linkParam, "Link param must not be null"); + + // Check the name + boolean exist = linkRepository.existsByNameAndIdNot(linkParam.getName(), id); + if (exist) { + throw new AlreadyExistsException("友情链接 " + linkParam.getName() + " 已存在").setErrorData(linkParam.getName()); + } + + // Check the url + exist = linkRepository.existsByUrlAndIdNot(linkParam.getUrl(), id); + if (exist) { + throw new AlreadyExistsException("友情链接 " + linkParam.getUrl() + " 已存在").setErrorData(linkParam.getUrl()); + } + + Link link = getById(id); + linkParam.update(link); + + return update(link); + } + @Override public boolean existByName(String name) { Assert.hasText(name, "Link name must not be blank"); @@ -113,6 +143,15 @@ public class LinkServiceImpl extends AbstractCrudService implemen return linkRepository.exists(Example.of(link)); } + @Override + public boolean existByUrl(String url) { + Assert.hasText(url, "Link url must not be blank"); + Link link = new Link(); + link.setUrl(url); + + return linkRepository.exists(Example.of(link)); + } + @Override public List listAllTeams() { return linkRepository.findAllTeams();