feat: 添加或修改友链时校验 name 和 url 是否重复 (#997) (#1079)

pull/1095/head
Wh1te 2020-09-30 00:25:26 +08:00 committed by GitHub
parent 868efecdce
commit e58d8fbe73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 64 additions and 3 deletions

View File

@ -54,9 +54,8 @@ public class LinkController {
@ApiOperation("Updates a link") @ApiOperation("Updates a link")
public LinkDTO updateBy(@PathVariable("id") Integer id, public LinkDTO updateBy(@PathVariable("id") Integer id,
@RequestBody @Valid LinkParam linkParam) { @RequestBody @Valid LinkParam linkParam) {
Link link = linkService.getById(id); Link link = linkService.updateBy(id, linkParam);
linkParam.update(link); return new LinkDTO().convertFrom(link);
return new LinkDTO().convertFrom(linkService.update(link));
} }
@DeleteMapping("{id:\\d+}") @DeleteMapping("{id:\\d+}")

View File

@ -20,4 +20,8 @@ public interface LinkRepository extends BaseRepository<Link, Integer> {
*/ */
@Query(value = "select distinct a.team from Link a") @Query(value = "select distinct a.team from Link a")
List<String> findAllTeams(); List<String> findAllTeams();
boolean existsByNameAndIdNot(String name, Integer id);
boolean existsByUrlAndIdNot(String url, Integer id);
} }

View File

@ -55,6 +55,17 @@ public interface LinkService extends CrudService<Link, Integer> {
@NonNull @NonNull
Link createBy(@NonNull LinkParam linkParam); 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. * Exists by link name.
* *
@ -63,6 +74,14 @@ public interface LinkService extends CrudService<Link, Integer> {
*/ */
boolean existByName(String name); 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. * List all link teams.
* *

View File

@ -101,9 +101,39 @@ public class LinkServiceImpl extends AbstractCrudService<Link, Integer> implemen
throw new AlreadyExistsException("友情链接 " + linkParam.getName() + " 已存在").setErrorData(linkParam.getName()); 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()); 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 @Override
public boolean existByName(String name) { public boolean existByName(String name) {
Assert.hasText(name, "Link name must not be blank"); Assert.hasText(name, "Link name must not be blank");
@ -113,6 +143,15 @@ public class LinkServiceImpl extends AbstractCrudService<Link, Integer> implemen
return linkRepository.exists(Example.of(link)); 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 @Override
public List<String> listAllTeams() { public List<String> listAllTeams() {
return linkRepository.findAllTeams(); return linkRepository.findAllTeams();