From f541d470de00602c9bf5ed35f14c140aed1c40db Mon Sep 17 00:00:00 2001 From: ruibaby Date: Thu, 25 Apr 2019 22:39:50 +0800 Subject: [PATCH] Change gallery to photo. --- .../config/FreeMarkerAutoConfiguration.java | 4 +- .../admin/api/GalleryController.java | 81 ---------- .../controller/admin/api/PhotoController.java | 81 ++++++++++ .../content/ContentSheetController.java | 2 +- .../dto/{GalleryDTO.java => PhotoDTO.java} | 8 +- .../model/entity/{Gallery.java => Photo.java} | 10 +- ...gDirective.java => PhotoTagDirective.java} | 20 +-- .../{GalleryParam.java => PhotoParam.java} | 10 +- .../{GalleryQuery.java => PhotoQuery.java} | 4 +- .../{GalleryTeamVO.java => PhotoTeamVO.java} | 6 +- ...ryRepository.java => PhotoRepository.java} | 12 +- .../run/halo/app/service/GalleryService.java | 66 -------- .../run/halo/app/service/PhotoService.java | 66 ++++++++ .../app/service/impl/GalleryServiceImpl.java | 147 ------------------ .../app/service/impl/PhotoServiceImpl.java | 147 ++++++++++++++++++ 15 files changed, 334 insertions(+), 330 deletions(-) delete mode 100644 src/main/java/run/halo/app/controller/admin/api/GalleryController.java create mode 100644 src/main/java/run/halo/app/controller/admin/api/PhotoController.java rename src/main/java/run/halo/app/model/dto/{GalleryDTO.java => PhotoDTO.java} (64%) rename src/main/java/run/halo/app/model/entity/{Gallery.java => Photo.java} (90%) rename src/main/java/run/halo/app/model/freemarker/tag/{GalleryTagDirective.java => PhotoTagDirective.java} (69%) rename src/main/java/run/halo/app/model/params/{GalleryParam.java => PhotoParam.java} (61%) rename src/main/java/run/halo/app/model/params/{GalleryQuery.java => PhotoQuery.java} (79%) rename src/main/java/run/halo/app/model/vo/{GalleryTeamVO.java => PhotoTeamVO.java} (66%) rename src/main/java/run/halo/app/repository/{GalleryRepository.java => PhotoRepository.java} (53%) delete mode 100644 src/main/java/run/halo/app/service/GalleryService.java create mode 100644 src/main/java/run/halo/app/service/PhotoService.java delete mode 100644 src/main/java/run/halo/app/service/impl/GalleryServiceImpl.java create mode 100644 src/main/java/run/halo/app/service/impl/PhotoServiceImpl.java diff --git a/src/main/java/run/halo/app/config/FreeMarkerAutoConfiguration.java b/src/main/java/run/halo/app/config/FreeMarkerAutoConfiguration.java index 4c1a7e3b6..af5b8f0ed 100644 --- a/src/main/java/run/halo/app/config/FreeMarkerAutoConfiguration.java +++ b/src/main/java/run/halo/app/config/FreeMarkerAutoConfiguration.java @@ -59,7 +59,7 @@ public class FreeMarkerAutoConfiguration { private TagTagDirective tagTagDirective; @Autowired - private GalleryTagDirective galleryTagDirective; + private PhotoTagDirective photoTagDirective; @Autowired private RandomMethod randomMethod; @@ -83,7 +83,7 @@ public class FreeMarkerAutoConfiguration { configuration.setSharedVariable("menuTag", menuTagDirective); configuration.setSharedVariable("tagTag", tagTagDirective); configuration.setSharedVariable("postTag", postTagDirective); - configuration.setSharedVariable("galleryTag", galleryTagDirective); + configuration.setSharedVariable("photoTag", photoTagDirective); configuration.setSharedVariable("randomMethod", randomMethod); configuration.setSharedVariable("recentPostsMethod", recentPostsMethod); configuration.setSharedVariable("recentCommentsMethod", recentCommentsMethod); diff --git a/src/main/java/run/halo/app/controller/admin/api/GalleryController.java b/src/main/java/run/halo/app/controller/admin/api/GalleryController.java deleted file mode 100644 index c2e89557c..000000000 --- a/src/main/java/run/halo/app/controller/admin/api/GalleryController.java +++ /dev/null @@ -1,81 +0,0 @@ -package run.halo.app.controller.admin.api; - -import io.swagger.annotations.ApiOperation; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.web.PageableDefault; -import org.springframework.data.web.SortDefault; -import org.springframework.web.bind.annotation.*; -import run.halo.app.model.dto.GalleryDTO; -import run.halo.app.model.entity.Gallery; -import run.halo.app.model.params.GalleryParam; -import run.halo.app.model.params.GalleryQuery; -import run.halo.app.service.GalleryService; - -import javax.validation.Valid; -import java.util.List; - -import static org.springframework.data.domain.Sort.Direction.DESC; - -/** - * Gallery controller - * - * @author : RYAN0UP - * @date : 2019/3/21 - */ -@RestController -@RequestMapping("/api/admin/galleries") -public class GalleryController { - - private final GalleryService galleryService; - - public GalleryController(GalleryService galleryService) { - this.galleryService = galleryService; - } - - /** - * List all galleries - * - * @param sort sort - * @return all of galleries - */ - @GetMapping(value = "latest") - public List listGalleries(@SortDefault(sort = "updateTime", direction = Sort.Direction.DESC) Sort sort) { - return galleryService.listDtos(sort); - } - - @GetMapping - public Page pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable, - GalleryQuery galleryQuery) { - return galleryService.pageDtosBy(pageable, galleryQuery); - } - - /** - * Get gallery by id. - * - * @param galleryId gallery id - * @return GalleryDTO - */ - @GetMapping("{galleryId:\\d+}") - @ApiOperation("Get gallery detail by id") - public GalleryDTO getBy(@PathVariable("galleryId") Integer galleryId) { - return new GalleryDTO().convertFrom(galleryService.getById(galleryId)); - } - - /** - * Delete gallery by id. - * - * @param galleryId gallery id - */ - @DeleteMapping("{galleryId:\\d+}") - @ApiOperation("Delete gallery by id") - public void deletePermanently(@PathVariable("galleryId") Integer galleryId) { - galleryService.removeById(galleryId); - } - - @PostMapping - public Gallery createBy(@Valid @RequestBody GalleryParam galleryParam) { - return galleryService.createBy(galleryParam); - } -} diff --git a/src/main/java/run/halo/app/controller/admin/api/PhotoController.java b/src/main/java/run/halo/app/controller/admin/api/PhotoController.java new file mode 100644 index 000000000..dd3a27337 --- /dev/null +++ b/src/main/java/run/halo/app/controller/admin/api/PhotoController.java @@ -0,0 +1,81 @@ +package run.halo.app.controller.admin.api; + +import io.swagger.annotations.ApiOperation; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; +import org.springframework.data.web.SortDefault; +import org.springframework.web.bind.annotation.*; +import run.halo.app.model.dto.PhotoDTO; +import run.halo.app.model.entity.Photo; +import run.halo.app.model.params.PhotoParam; +import run.halo.app.model.params.PhotoQuery; +import run.halo.app.service.PhotoService; + +import javax.validation.Valid; +import java.util.List; + +import static org.springframework.data.domain.Sort.Direction.DESC; + +/** + * Photo controller + * + * @author : RYAN0UP + * @date : 2019/3/21 + */ +@RestController +@RequestMapping("/api/admin/photos") +public class PhotoController { + + private final PhotoService photoService; + + public PhotoController(PhotoService photoService) { + this.photoService = photoService; + } + + /** + * List all photos + * + * @param sort sort + * @return all of photos + */ + @GetMapping(value = "latest") + public List listPhotos(@SortDefault(sort = "updateTime", direction = Sort.Direction.DESC) Sort sort) { + return photoService.listDtos(sort); + } + + @GetMapping + public Page pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable, + PhotoQuery photoQuery) { + return photoService.pageDtosBy(pageable, photoQuery); + } + + /** + * Get photo by id. + * + * @param photoId photo id + * @return PhotoDTO + */ + @GetMapping("{photoId:\\d+}") + @ApiOperation("Get photo detail by id") + public PhotoDTO getBy(@PathVariable("photoId") Integer photoId) { + return new PhotoDTO().convertFrom(photoService.getById(photoId)); + } + + /** + * Delete photo by id. + * + * @param photoId photo id + */ + @DeleteMapping("{photoId:\\d+}") + @ApiOperation("Delete photo by id") + public void deletePermanently(@PathVariable("photoId") Integer photoId) { + photoService.removeById(photoId); + } + + @PostMapping + public Photo createBy(@Valid @RequestBody PhotoParam photoParam) { + return photoService.createBy(photoParam); + } +} diff --git a/src/main/java/run/halo/app/controller/content/ContentSheetController.java b/src/main/java/run/halo/app/controller/content/ContentSheetController.java index 0eaad2b11..0752ccc9d 100644 --- a/src/main/java/run/halo/app/controller/content/ContentSheetController.java +++ b/src/main/java/run/halo/app/controller/content/ContentSheetController.java @@ -30,7 +30,7 @@ public class ContentSheetController { } /** - * Render gallery page + * Render photo page * * @return template path: themes/{theme}/gallery.ftl */ diff --git a/src/main/java/run/halo/app/model/dto/GalleryDTO.java b/src/main/java/run/halo/app/model/dto/PhotoDTO.java similarity index 64% rename from src/main/java/run/halo/app/model/dto/GalleryDTO.java rename to src/main/java/run/halo/app/model/dto/PhotoDTO.java index 37ec4275f..06c7979bb 100644 --- a/src/main/java/run/halo/app/model/dto/GalleryDTO.java +++ b/src/main/java/run/halo/app/model/dto/PhotoDTO.java @@ -1,15 +1,17 @@ package run.halo.app.model.dto; import run.halo.app.model.dto.base.OutputConverter; -import run.halo.app.model.entity.Gallery; +import run.halo.app.model.entity.Photo; import lombok.Data; +import java.util.Date; + /** * @author : RYAN0UP * @date : 2019/3/21 */ @Data -public class GalleryDTO implements OutputConverter { +public class PhotoDTO implements OutputConverter { private Integer id; @@ -17,6 +19,8 @@ public class GalleryDTO implements OutputConverter { private String thumbnail; + private Date takeTime; + private String url; private String team; diff --git a/src/main/java/run/halo/app/model/entity/Gallery.java b/src/main/java/run/halo/app/model/entity/Photo.java similarity index 90% rename from src/main/java/run/halo/app/model/entity/Gallery.java rename to src/main/java/run/halo/app/model/entity/Photo.java index 145522736..4d18670be 100644 --- a/src/main/java/run/halo/app/model/entity/Gallery.java +++ b/src/main/java/run/halo/app/model/entity/Photo.java @@ -10,19 +10,19 @@ import javax.persistence.*; import java.util.Date; /** - * Gallery entity + * Photo entity * * @author : RYAN0UP * @date : 2019-03-12 */ @Data @Entity -@Table(name = "galleries") -@SQLDelete(sql = "update galleries set deleted = true where id = ?") +@Table(name = "photos") +@SQLDelete(sql = "update photos set deleted = true where id = ?") @Where(clause = "deleted = false") @ToString @EqualsAndHashCode(callSuper = true) -public class Gallery extends BaseEntity { +public class Photo extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -67,7 +67,7 @@ public class Gallery extends BaseEntity { private String url; /** - * Gallery team name. + * Photo team name. */ @Column(name = "team", columnDefinition = "varchar(255) default ''") private String team; diff --git a/src/main/java/run/halo/app/model/freemarker/tag/GalleryTagDirective.java b/src/main/java/run/halo/app/model/freemarker/tag/PhotoTagDirective.java similarity index 69% rename from src/main/java/run/halo/app/model/freemarker/tag/GalleryTagDirective.java rename to src/main/java/run/halo/app/model/freemarker/tag/PhotoTagDirective.java index ab824aa8b..d73840142 100644 --- a/src/main/java/run/halo/app/model/freemarker/tag/GalleryTagDirective.java +++ b/src/main/java/run/halo/app/model/freemarker/tag/PhotoTagDirective.java @@ -5,7 +5,7 @@ import freemarker.template.*; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; import run.halo.app.model.support.HaloConst; -import run.halo.app.service.GalleryService; +import run.halo.app.service.PhotoService; import java.io.IOException; import java.util.Map; @@ -13,18 +13,18 @@ import java.util.Map; import static org.springframework.data.domain.Sort.Direction.DESC; /** - * Freemarker custom tag of gallery. + * Freemarker custom tag of photo. * * @author : RYAN0UP * @date : 2019/4/21 */ @Component -public class GalleryTagDirective implements TemplateDirectiveModel { +public class PhotoTagDirective implements TemplateDirectiveModel { - private final GalleryService galleryService; + private final PhotoService photoService; - public GalleryTagDirective(GalleryService galleryService) { - this.galleryService = galleryService; + public PhotoTagDirective(PhotoService photoService) { + this.photoService = photoService; } @Override @@ -36,16 +36,16 @@ public class GalleryTagDirective implements TemplateDirectiveModel { String team = params.get("team").toString(); switch (method) { case "list": - env.setVariable("galleries", builder.build().wrap(galleryService.listAll())); + env.setVariable("photos", builder.build().wrap(photoService.listAll())); break; case "listTeams": - env.setVariable("teams", builder.build().wrap(galleryService.listDtos(Sort.by(DESC, "createTime")))); + env.setVariable("teams", builder.build().wrap(photoService.listDtos(Sort.by(DESC, "createTime")))); break; case "listByTeam": - env.setVariable("galleries", builder.build().wrap(galleryService.listByTeam(team, Sort.by(DESC, "createTime")))); + env.setVariable("photos", builder.build().wrap(photoService.listByTeam(team, Sort.by(DESC, "createTime")))); break; case "count": - env.setVariable("count", builder.build().wrap(galleryService.count())); + env.setVariable("count", builder.build().wrap(photoService.count())); break; default: break; diff --git a/src/main/java/run/halo/app/model/params/GalleryParam.java b/src/main/java/run/halo/app/model/params/PhotoParam.java similarity index 61% rename from src/main/java/run/halo/app/model/params/GalleryParam.java rename to src/main/java/run/halo/app/model/params/PhotoParam.java index 8f6d2c223..12904d959 100644 --- a/src/main/java/run/halo/app/model/params/GalleryParam.java +++ b/src/main/java/run/halo/app/model/params/PhotoParam.java @@ -2,7 +2,7 @@ package run.halo.app.model.params; import lombok.Data; import run.halo.app.model.dto.base.InputConverter; -import run.halo.app.model.entity.Gallery; +import run.halo.app.model.entity.Photo; import javax.validation.constraints.NotBlank; import java.util.Date; @@ -14,9 +14,9 @@ import java.util.Date; * @date 2019/04/25 */ @Data -public class GalleryParam implements InputConverter { +public class PhotoParam implements InputConverter { - @NotBlank(message = "Gallery name must not be blank") + @NotBlank(message = "Photo name must not be blank") private String name; private String description; @@ -25,10 +25,10 @@ public class GalleryParam implements InputConverter { private String location; - @NotBlank(message = "Gallery thumbnail must not be blank") + @NotBlank(message = "Photo thumbnail must not be blank") private String thumbnail; - @NotBlank(message = "Gallery url must not be blank") + @NotBlank(message = "Photo url must not be blank") private String url; private String team; diff --git a/src/main/java/run/halo/app/model/params/GalleryQuery.java b/src/main/java/run/halo/app/model/params/PhotoQuery.java similarity index 79% rename from src/main/java/run/halo/app/model/params/GalleryQuery.java rename to src/main/java/run/halo/app/model/params/PhotoQuery.java index f3013c40a..d8bf81eab 100644 --- a/src/main/java/run/halo/app/model/params/GalleryQuery.java +++ b/src/main/java/run/halo/app/model/params/PhotoQuery.java @@ -3,13 +3,13 @@ package run.halo.app.model.params; import lombok.Data; /** - * Gallery query params. + * Photo query params. * * @author : RYAN0UP * @date : 2019/04/25 */ @Data -public class GalleryQuery { +public class PhotoQuery { /** * Keyword. diff --git a/src/main/java/run/halo/app/model/vo/GalleryTeamVO.java b/src/main/java/run/halo/app/model/vo/PhotoTeamVO.java similarity index 66% rename from src/main/java/run/halo/app/model/vo/GalleryTeamVO.java rename to src/main/java/run/halo/app/model/vo/PhotoTeamVO.java index d327fc185..fa2fc9338 100644 --- a/src/main/java/run/halo/app/model/vo/GalleryTeamVO.java +++ b/src/main/java/run/halo/app/model/vo/PhotoTeamVO.java @@ -2,7 +2,7 @@ package run.halo.app.model.vo; import lombok.Data; import lombok.ToString; -import run.halo.app.model.dto.GalleryDTO; +import run.halo.app.model.dto.PhotoDTO; import java.util.List; @@ -14,9 +14,9 @@ import java.util.List; */ @Data @ToString -public class GalleryTeamVO { +public class PhotoTeamVO { private String team; - private List galleries; + private List photos; } diff --git a/src/main/java/run/halo/app/repository/GalleryRepository.java b/src/main/java/run/halo/app/repository/PhotoRepository.java similarity index 53% rename from src/main/java/run/halo/app/repository/GalleryRepository.java rename to src/main/java/run/halo/app/repository/PhotoRepository.java index 2be65f190..c1d989ae4 100644 --- a/src/main/java/run/halo/app/repository/GalleryRepository.java +++ b/src/main/java/run/halo/app/repository/PhotoRepository.java @@ -2,24 +2,24 @@ package run.halo.app.repository; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; -import run.halo.app.model.entity.Gallery; +import run.halo.app.model.entity.Photo; import run.halo.app.repository.base.BaseRepository; import java.util.List; /** - * Gallery repository. + * Photo repository. * * @author johnniang */ -public interface GalleryRepository extends BaseRepository, JpaSpecificationExecutor { +public interface PhotoRepository extends BaseRepository, JpaSpecificationExecutor { /** - * Query galleries by team + * Query photos by team * * @param team team * @param sort sort - * @return list of gallery + * @return list of photo */ - List findByTeam(String team, Sort sort); + List findByTeam(String team, Sort sort); } diff --git a/src/main/java/run/halo/app/service/GalleryService.java b/src/main/java/run/halo/app/service/GalleryService.java deleted file mode 100644 index 0cbf1e7e2..000000000 --- a/src/main/java/run/halo/app/service/GalleryService.java +++ /dev/null @@ -1,66 +0,0 @@ -package run.halo.app.service; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.lang.NonNull; -import run.halo.app.model.dto.GalleryDTO; -import run.halo.app.model.entity.Gallery; -import run.halo.app.model.params.GalleryParam; -import run.halo.app.model.params.GalleryQuery; -import run.halo.app.model.vo.GalleryTeamVO; -import run.halo.app.service.base.CrudService; - -import java.util.List; - -/** - * Gallery service. - * - * @author johnniang - */ -public interface GalleryService extends CrudService { - - /** - * List gallery dtos. - * - * @param sort sort - * @return all galleries - */ - List listDtos(@NonNull Sort sort); - - /** - * Lists gallery team vos. - * - * @param sort must not be null - * @return a list of gallery team vo - */ - List listTeamVos(@NonNull Sort sort); - - /** - * List galleries by team. - * - * @param team team - * @param sort sort - * @return list of galleries - */ - List listByTeam(@NonNull String team, Sort sort); - - /** - * Pages gallery output dtos. - * - * @param pageable page info must not be null - * @param galleryQuery galleryQuery - * @return a page of gallery output dto - */ - @NonNull - Page pageDtosBy(@NonNull Pageable pageable, GalleryQuery galleryQuery); - - /** - * Creates gallery by gallery param. - * - * @param galleryParam must not be null - * @return create gallery - */ - @NonNull - Gallery createBy(@NonNull GalleryParam galleryParam); -} diff --git a/src/main/java/run/halo/app/service/PhotoService.java b/src/main/java/run/halo/app/service/PhotoService.java new file mode 100644 index 000000000..86fc5bd43 --- /dev/null +++ b/src/main/java/run/halo/app/service/PhotoService.java @@ -0,0 +1,66 @@ +package run.halo.app.service; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.lang.NonNull; +import run.halo.app.model.dto.PhotoDTO; +import run.halo.app.model.entity.Photo; +import run.halo.app.model.params.PhotoParam; +import run.halo.app.model.params.PhotoQuery; +import run.halo.app.model.vo.PhotoTeamVO; +import run.halo.app.service.base.CrudService; + +import java.util.List; + +/** + * Photo service. + * + * @author johnniang + */ +public interface PhotoService extends CrudService { + + /** + * List photo dtos. + * + * @param sort sort + * @return all photos + */ + List listDtos(@NonNull Sort sort); + + /** + * Lists photo team vos. + * + * @param sort must not be null + * @return a list of photo team vo + */ + List listTeamVos(@NonNull Sort sort); + + /** + * List photos by team. + * + * @param team team + * @param sort sort + * @return list of photos + */ + List listByTeam(@NonNull String team, Sort sort); + + /** + * Pages photo output dtos. + * + * @param pageable page info must not be null + * @param photoQuery photoQuery + * @return a page of photo output dto + */ + @NonNull + Page pageDtosBy(@NonNull Pageable pageable, PhotoQuery photoQuery); + + /** + * Creates photo by photo param. + * + * @param photoParam must not be null + * @return create photo + */ + @NonNull + Photo createBy(@NonNull PhotoParam photoParam); +} diff --git a/src/main/java/run/halo/app/service/impl/GalleryServiceImpl.java b/src/main/java/run/halo/app/service/impl/GalleryServiceImpl.java deleted file mode 100644 index ed46e58a5..000000000 --- a/src/main/java/run/halo/app/service/impl/GalleryServiceImpl.java +++ /dev/null @@ -1,147 +0,0 @@ -package run.halo.app.service.impl; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.lang.NonNull; -import org.springframework.stereotype.Service; -import org.springframework.util.Assert; -import run.halo.app.model.dto.GalleryDTO; -import run.halo.app.model.entity.Gallery; -import run.halo.app.model.params.GalleryParam; -import run.halo.app.model.params.GalleryQuery; -import run.halo.app.model.vo.GalleryTeamVO; -import run.halo.app.repository.GalleryRepository; -import run.halo.app.service.GalleryService; -import run.halo.app.service.base.AbstractCrudService; -import run.halo.app.utils.ServiceUtils; - -import javax.persistence.criteria.Predicate; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * GalleryService implementation class - * - * @author : RYAN0UP - * @date : 2019-03-14 - */ -@Service -public class GalleryServiceImpl extends AbstractCrudService implements GalleryService { - - private final GalleryRepository galleryRepository; - - public GalleryServiceImpl(GalleryRepository galleryRepository) { - super(galleryRepository); - this.galleryRepository = galleryRepository; - } - - /** - * List gallery dtos. - * - * @param sort sort - * @return all galleries - */ - @Override - public List listDtos(Sort sort) { - Assert.notNull(sort, "Sort info must not be null"); - - return listAll(sort).stream().map(gallery -> (GalleryDTO) new GalleryDTO().convertFrom(gallery)).collect(Collectors.toList()); - } - - /** - * Lists gallery team vos. - * - * @param sort must not be null - * @return a list of gallery team vo - */ - @Override - public List listTeamVos(Sort sort) { - Assert.notNull(sort, "Sort info must not be null"); - - // List all galleries - List galleries = listDtos(sort); - - // Get teams - Set teams = ServiceUtils.fetchProperty(galleries, GalleryDTO::getTeam); - - Map> teamGalleryListMap = ServiceUtils.convertToListMap(teams, galleries, GalleryDTO::getTeam); - - List result = new LinkedList<>(); - - // Wrap gallery team vo list - teamGalleryListMap.forEach((team, galleryList) -> { - // Build gallery team vo - GalleryTeamVO galleryTeamVO = new GalleryTeamVO(); - galleryTeamVO.setTeam(team); - galleryTeamVO.setGalleries(galleryList); - - // Add it to result - result.add(galleryTeamVO); - }); - - return result; - } - - /** - * List galleries by team. - * - * @param team team - * @param sort sort - * @return list of galleries - */ - @Override - public List listByTeam(String team, Sort sort) { - List galleries = galleryRepository.findByTeam(team, sort); - return galleries.stream().map(gallery -> (GalleryDTO) new GalleryDTO().convertFrom(gallery)).collect(Collectors.toList()); - } - - @Override - public Page pageDtosBy(Pageable pageable, GalleryQuery galleryQuery) { - Assert.notNull(pageable, "Page info must not be null"); - - // List all - Page galleryPage = galleryRepository.findAll(buildSpecByQuery(galleryQuery), pageable); - - // Convert and return - return galleryPage.map(gallery -> new GalleryDTO().convertFrom(gallery)); - } - - @Override - public Gallery createBy(GalleryParam galleryParam) { - Assert.notNull(galleryParam, "Gallery param must not be null"); - - return create(galleryParam.convertTo()); - } - - @NonNull - private Specification buildSpecByQuery(@NonNull GalleryQuery galleryQuery) { - Assert.notNull(galleryQuery, "Attachment query must not be null"); - - return (Specification) (root, query, criteriaBuilder) -> { - List predicates = new LinkedList<>(); - - if (galleryQuery.getTeam() != null) { - predicates.add(criteriaBuilder.equal(root.get("team"), galleryQuery.getTeam())); - } - - if (galleryQuery.getKeyword() != null) { - - String likeCondition = String.format("%%%s%%", StringUtils.strip(galleryQuery.getKeyword())); - - Predicate nameLike = criteriaBuilder.like(root.get("name"), likeCondition); - Predicate descriptionLike = criteriaBuilder.like(root.get("description"), likeCondition); - Predicate locationLike = criteriaBuilder.like(root.get("location"), likeCondition); - - predicates.add(criteriaBuilder.or(nameLike, descriptionLike, locationLike)); - } - - return query.where(predicates.toArray(new Predicate[0])).getRestriction(); - }; - } -} diff --git a/src/main/java/run/halo/app/service/impl/PhotoServiceImpl.java b/src/main/java/run/halo/app/service/impl/PhotoServiceImpl.java new file mode 100644 index 000000000..7d341a258 --- /dev/null +++ b/src/main/java/run/halo/app/service/impl/PhotoServiceImpl.java @@ -0,0 +1,147 @@ +package run.halo.app.service.impl; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.lang.NonNull; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; +import run.halo.app.model.dto.PhotoDTO; +import run.halo.app.model.entity.Photo; +import run.halo.app.model.params.PhotoParam; +import run.halo.app.model.params.PhotoQuery; +import run.halo.app.model.vo.PhotoTeamVO; +import run.halo.app.repository.PhotoRepository; +import run.halo.app.service.PhotoService; +import run.halo.app.service.base.AbstractCrudService; +import run.halo.app.utils.ServiceUtils; + +import javax.persistence.criteria.Predicate; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * PhotoService implementation class + * + * @author : RYAN0UP + * @date : 2019-03-14 + */ +@Service +public class PhotoServiceImpl extends AbstractCrudService implements PhotoService { + + private final PhotoRepository photoRepository; + + public PhotoServiceImpl(PhotoRepository photoRepository) { + super(photoRepository); + this.photoRepository = photoRepository; + } + + /** + * List photo dtos. + * + * @param sort sort + * @return all photos + */ + @Override + public List listDtos(Sort sort) { + Assert.notNull(sort, "Sort info must not be null"); + + return listAll(sort).stream().map(photo -> (PhotoDTO) new PhotoDTO().convertFrom(photo)).collect(Collectors.toList()); + } + + /** + * Lists photo team vos. + * + * @param sort must not be null + * @return a list of photo team vo + */ + @Override + public List listTeamVos(Sort sort) { + Assert.notNull(sort, "Sort info must not be null"); + + // List all photos + List photos = listDtos(sort); + + // Get teams + Set teams = ServiceUtils.fetchProperty(photos, PhotoDTO::getTeam); + + Map> teamPhotoListMap = ServiceUtils.convertToListMap(teams, photos, PhotoDTO::getTeam); + + List result = new LinkedList<>(); + + // Wrap photo team vo list + teamPhotoListMap.forEach((team, photoList) -> { + // Build photo team vo + PhotoTeamVO photoTeamVO = new PhotoTeamVO(); + photoTeamVO.setTeam(team); + photoTeamVO.setPhotos(photoList); + + // Add it to result + result.add(photoTeamVO); + }); + + return result; + } + + /** + * List photos by team. + * + * @param team team + * @param sort sort + * @return list of photos + */ + @Override + public List listByTeam(String team, Sort sort) { + List photos = photoRepository.findByTeam(team, sort); + return photos.stream().map(photo -> (PhotoDTO) new PhotoDTO().convertFrom(photo)).collect(Collectors.toList()); + } + + @Override + public Page pageDtosBy(Pageable pageable, PhotoQuery photoQuery) { + Assert.notNull(pageable, "Page info must not be null"); + + // List all + Page photoPage = photoRepository.findAll(buildSpecByQuery(photoQuery), pageable); + + // Convert and return + return photoPage.map(photo -> new PhotoDTO().convertFrom(photo)); + } + + @Override + public Photo createBy(PhotoParam photoParam) { + Assert.notNull(photoParam, "Photo param must not be null"); + + return create(photoParam.convertTo()); + } + + @NonNull + private Specification buildSpecByQuery(@NonNull PhotoQuery photoQuery) { + Assert.notNull(photoQuery, "Attachment query must not be null"); + + return (Specification) (root, query, criteriaBuilder) -> { + List predicates = new LinkedList<>(); + + if (photoQuery.getTeam() != null) { + predicates.add(criteriaBuilder.equal(root.get("team"), photoQuery.getTeam())); + } + + if (photoQuery.getKeyword() != null) { + + String likeCondition = String.format("%%%s%%", StringUtils.strip(photoQuery.getKeyword())); + + Predicate nameLike = criteriaBuilder.like(root.get("name"), likeCondition); + Predicate descriptionLike = criteriaBuilder.like(root.get("description"), likeCondition); + Predicate locationLike = criteriaBuilder.like(root.get("location"), likeCondition); + + predicates.add(criteriaBuilder.or(nameLike, descriptionLike, locationLike)); + } + + return query.where(predicates.toArray(new Predicate[0])).getRestriction(); + }; + } +}