From 4dadcfe91c0c142f8edc25037f469ed67016fc96 Mon Sep 17 00:00:00 2001 From: Adamyuanyuan Date: Tue, 30 Jun 2020 21:14:45 +0800 Subject: [PATCH] add workspace favorites and resolve conflicts --- .../dss/server/dao/WorkspaceMapper.java | 12 ++++ .../dss/server/dao/impl/workspaceMapper.xml | 42 ++++++++++++ .../dto/response/WorkspaceFavoriteVo.java | 65 +++++++++++++++++++ .../dss/server/entity/DWSFavorite.java | 57 ++++++++++++++++ .../server/restful/WorkspaceRestfulApi.java | 49 +++++++++++++- .../server/service/DWSWorkspaceService.java | 16 +++++ .../service/impl/DWSWorkspaceServiceImpl.java | 34 +++++++++- 7 files changed, 272 insertions(+), 3 deletions(-) create mode 100644 dss-server/src/main/java/com/webank/wedatasphere/dss/server/dto/response/WorkspaceFavoriteVo.java create mode 100644 dss-server/src/main/java/com/webank/wedatasphere/dss/server/entity/DWSFavorite.java diff --git a/dss-server/src/main/java/com/webank/wedatasphere/dss/server/dao/WorkspaceMapper.java b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/dao/WorkspaceMapper.java index 819a221d35..387c597ff8 100644 --- a/dss-server/src/main/java/com/webank/wedatasphere/dss/server/dao/WorkspaceMapper.java +++ b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/dao/WorkspaceMapper.java @@ -2,6 +2,11 @@ import com.webank.wedatasphere.dss.server.dto.response.*; import com.webank.wedatasphere.dss.server.entity.*; +import com.webank.wedatasphere.dss.server.dto.response.HomepageDemoInstanceVo; +import com.webank.wedatasphere.dss.server.dto.response.HomepageDemoMenuVo; +import com.webank.wedatasphere.dss.server.dto.response.HomepageVideoVo; +import com.webank.wedatasphere.dss.server.dto.response.WorkspaceFavoriteVo; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -36,4 +41,11 @@ public interface WorkspaceMapper { List getMenuAppInstancesCn(Long id); List getMenuAppInstanceEn(Long id); + List getWorkspaceFavoritesCn(@Param("username") String username, @Param("workspaceId") Long workspaceId); + + List getWorkspaceFavoritesEn(@Param("username") String username, @Param("workspaceId") Long workspaceId); + + void addFavorite(DWSFavorite dwsFavorite); + + void deleteFavorite(Long favouritesId); } diff --git a/dss-server/src/main/java/com/webank/wedatasphere/dss/server/dao/impl/workspaceMapper.xml b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/dao/impl/workspaceMapper.xml index a211d50228..854904bd9b 100644 --- a/dss-server/src/main/java/com/webank/wedatasphere/dss/server/dao/impl/workspaceMapper.xml +++ b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/dao/impl/workspaceMapper.xml @@ -35,6 +35,9 @@ m.`manual_button_url`,m.`icon`,m.`order`,app.`homepage_url` AS `access_button_url`,app.project_url, app.`name` + + id,`username`,`workspace_id`,`menu_application_id`,`order`,`create_by`,`create_time`,`last_update_user`,`last_update_time` + + + + + + + + + + + + + INSERT INTO dss_onestop_user_favorites () + VALUES + (#{id},#{username},#{workspaceId},#{menuApplicationId},#{order},#{createBy},#{createTime},#{lastUpdateUser},#{lastUpdateTime}) + + + + DELETE + FROM + dss_onestop_user_favorites + WHERE + id = #{favouritesId} + \ No newline at end of file diff --git a/dss-server/src/main/java/com/webank/wedatasphere/dss/server/dto/response/WorkspaceFavoriteVo.java b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/dto/response/WorkspaceFavoriteVo.java new file mode 100644 index 0000000000..50d93bc8c9 --- /dev/null +++ b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/dto/response/WorkspaceFavoriteVo.java @@ -0,0 +1,65 @@ +package com.webank.wedatasphere.dss.server.dto.response; + +/** + * Created by Adamyuanyuan on 2020/6/25 + */ +public class WorkspaceFavoriteVo { + private Long id; + + private Long menuApplicationId; + + private String name; + + private String url; + + private String icon; + + private String title; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getMenuApplicationId() { + return menuApplicationId; + } + + public void setMenuApplicationId(Long menuApplicationId) { + this.menuApplicationId = menuApplicationId; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/dss-server/src/main/java/com/webank/wedatasphere/dss/server/entity/DWSFavorite.java b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/entity/DWSFavorite.java new file mode 100644 index 0000000000..07a1b48828 --- /dev/null +++ b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/entity/DWSFavorite.java @@ -0,0 +1,57 @@ +package com.webank.wedatasphere.dss.server.entity; + +/** + * Created by Adamyuanyuan on 2020/6/25 + */ +public class DWSFavorite extends BaseEntity{ + + private Long id; + + private String username; + + private Long workspaceId; + + private Long menuApplicationId; + + private Integer order; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public Long getWorkspaceId() { + return workspaceId; + } + + public void setWorkspaceId(Long workspaceId) { + this.workspaceId = workspaceId; + } + + public Long getMenuApplicationId() { + return menuApplicationId; + } + + public void setMenuApplicationId(Long menuApplicationId) { + this.menuApplicationId = menuApplicationId; + } + + public Integer getOrder() { + return order; + } + + public void setOrder(Integer order) { + this.order = order; + } +} diff --git a/dss-server/src/main/java/com/webank/wedatasphere/dss/server/restful/WorkspaceRestfulApi.java b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/restful/WorkspaceRestfulApi.java index a55d1e0c1b..7fb0e12943 100644 --- a/dss-server/src/main/java/com/webank/wedatasphere/dss/server/restful/WorkspaceRestfulApi.java +++ b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/restful/WorkspaceRestfulApi.java @@ -5,6 +5,8 @@ import com.webank.wedatasphere.dss.server.dto.response.OnestopMenuVo; import com.webank.wedatasphere.dss.server.entity.DWSWorkspace; import com.webank.wedatasphere.dss.server.dto.response.WorkspaceDepartmentVo; +import com.webank.wedatasphere.dss.application.service.DSSUserService; +import com.webank.wedatasphere.dss.server.dto.response.*; import com.webank.wedatasphere.dss.server.service.DWSWorkspaceService; import com.webank.wedatasphere.linkis.server.Message; import com.webank.wedatasphere.linkis.server.security.SecurityFilter; @@ -31,6 +33,8 @@ public class WorkspaceRestfulApi { @Autowired private DWSWorkspaceService dwsWorkspaceService; + @Autowired + private DSSUserService dssUserService; @GET @Path("/workspaces") @@ -40,6 +44,13 @@ public Response getAllWorkspaces(@Context HttpServletRequest req) { return Message.messageToResponse(Message.ok().data("workspaces", workspaces)); } + @GET + @Path("/workspaces/{id}") + public Response getWorkspacesById(@Context HttpServletRequest req, @PathParam("id") Long id) { + DWSWorkspace workspace = dwsWorkspaceService.getWorkspacesById(id); + return Message.messageToResponse(Message.ok().data("workspace", workspace)); + } + @GET @Path("/workspaces/departments") public Response getAllWorkspaceDepartments(@Context HttpServletRequest req) { @@ -89,7 +100,7 @@ public Response getAllVideos(@Context HttpServletRequest req) { @GET @Path("workspaces/{workspaceId}/managements") - public Response getWorkspaceManagements(@Context HttpServletRequest req, @PathParam("workspaceId")Long workspaceId) { + public Response getWorkspaceManagements(@Context HttpServletRequest req, @PathParam("workspaceId") Long workspaceId) { String header = req.getHeader("Content-language").trim(); boolean isChinese = "zh-CN".equals(header); String username = SecurityFilter.getLoginUsername(req); @@ -100,11 +111,45 @@ public Response getWorkspaceManagements(@Context HttpServletRequest req, @PathPa @GET @Path("workspaces/{workspaceId}/applications") - public Response getWorkspaceApplications(@Context HttpServletRequest req, @PathParam("workspaceId")Long workspaceId) { + public Response getWorkspaceApplications(@Context HttpServletRequest req, @PathParam("workspaceId") Long workspaceId) { String header = req.getHeader("Content-language").trim(); boolean isChinese = "zh-CN".equals(header); String username = SecurityFilter.getLoginUsername(req); List applications = dwsWorkspaceService.getWorkspaceApplications(workspaceId, username, isChinese); return Message.messageToResponse(Message.ok().data("applications", applications)); } + + @GET + @Path("/workspaces/{workspaceId}/favorites") + public Response getWorkspaceFavorites(@Context HttpServletRequest req, @PathParam("workspaceId") Long workspaceId) { + String header = req.getHeader("Content-language").trim(); + boolean isChinese = "zh-CN".equals(header); + String username = SecurityFilter.getLoginUsername(req); + List favorites = dwsWorkspaceService.getWorkspaceFavorites(workspaceId, username, isChinese); + return Message.messageToResponse(Message.ok().data("favorites", favorites)); + } + + /** + * 应用加入收藏,返回收藏后id + * + * @param req + * @param json + * @return + */ + @POST + @Path("/workspaces/{workspaceId}/favorites") + public Response addFavorite(@Context HttpServletRequest req, @PathParam("workspaceId") Long workspaceId, JsonNode json) { + String username = SecurityFilter.getLoginUsername(req); + Long menuApplicationId = json.get("menuApplicationId").getLongValue(); + Long favoriteId = dwsWorkspaceService.addFavorite(username, workspaceId, menuApplicationId); + return Message.messageToResponse(Message.ok().data("favoriteId", favoriteId)); + } + + @DELETE + @Path("/workspaces/{workspaceId}/favorites/{favouritesId}") + public Response deleteFavorite(@Context HttpServletRequest req, @PathParam("workspaceId") Long workspaceId, @PathParam("favouritesId") Long favouritesId) { + String username = SecurityFilter.getLoginUsername(req); + Long favoriteId = dwsWorkspaceService.deleteFavorite(username, favouritesId); + return Message.messageToResponse(Message.ok().data("favoriteId", favoriteId)); + } } diff --git a/dss-server/src/main/java/com/webank/wedatasphere/dss/server/service/DWSWorkspaceService.java b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/service/DWSWorkspaceService.java index e44a11e0da..c88779a4c3 100644 --- a/dss-server/src/main/java/com/webank/wedatasphere/dss/server/service/DWSWorkspaceService.java +++ b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/service/DWSWorkspaceService.java @@ -5,6 +5,7 @@ import com.webank.wedatasphere.dss.server.dto.response.OnestopMenuVo; import com.webank.wedatasphere.dss.server.entity.DWSWorkspace; import com.webank.wedatasphere.dss.server.dto.response.WorkspaceDepartmentVo; +import com.webank.wedatasphere.dss.server.dto.response.*; import java.util.List; @@ -27,4 +28,19 @@ public interface DWSWorkspaceService { List getWorkspaceManagements(Long workspaceId, String username, boolean isChinese); List getWorkspaceApplications(Long workspaceId, String username, boolean isChinese); + + DWSWorkspace getWorkspacesById(Long id); + + /** + * 查询用户收藏的应用,如果是新用户,就在数据库给它插入默认两个收藏:脚本开发与工作流 workflow scriptis + * @param workspaceId + * @param username + * @param isChinese + * @return + */ + List getWorkspaceFavorites(Long workspaceId, String username, boolean isChinese); + + Long addFavorite(String username, Long workspaceId, Long menuApplicationId); + + Long deleteFavorite(String username, Long favouritesId); } diff --git a/dss-server/src/main/java/com/webank/wedatasphere/dss/server/service/impl/DWSWorkspaceServiceImpl.java b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/service/impl/DWSWorkspaceServiceImpl.java index 2c270b75d9..5718a01196 100644 --- a/dss-server/src/main/java/com/webank/wedatasphere/dss/server/service/impl/DWSWorkspaceServiceImpl.java +++ b/dss-server/src/main/java/com/webank/wedatasphere/dss/server/service/impl/DWSWorkspaceServiceImpl.java @@ -22,9 +22,16 @@ public class DWSWorkspaceServiceImpl implements DWSWorkspaceService { @Override public List getWorkspaces() { + return workspaceMapper.getWorkspaces(); } + @Override + public DWSWorkspace getWorkspacesById(Long id) { + return workspaceMapper.getWorkspaceById(id); + } + + @Override public Long addWorkspace(String userName, String name, String department, String label, String description) { DWSWorkspace dwsWorkspace = new DWSWorkspace(); @@ -61,7 +68,7 @@ public List getWorkSpaceDepartments() { @Override public List getHomepageDemos(boolean isChinese) { - List demoMenuVos = isChinese ? workspaceMapper.getHomepageDemoMenusCn():workspaceMapper.getHomepageDemoMenusEn(); + List demoMenuVos = isChinese ? workspaceMapper.getHomepageDemoMenusCn() : workspaceMapper.getHomepageDemoMenusEn(); for (HomepageDemoMenuVo demoMenuVo : demoMenuVos) { Long menuId = demoMenuVo.getId(); List demoInstanceVos = isChinese ? workspaceMapper.getHomepageInstancesByMenuIdCn(menuId) : workspaceMapper.getHomepageInstancesByMenuIdEn(menuId); @@ -99,6 +106,31 @@ public List getWorkspaceApplications(Long workspaceId, String use return getMenuAppInstances(applicationMenuVos, isChinese); } + @Override + public List getWorkspaceFavorites(Long workspaceId, String username, boolean isChinese) { + return isChinese ? workspaceMapper.getWorkspaceFavoritesCn(username, workspaceId) : workspaceMapper.getWorkspaceFavoritesEn(username, workspaceId); + } + + @Override + public Long addFavorite(String username, Long workspaceId, Long menuApplicationId) { + DWSFavorite dwsFavorite = new DWSFavorite(); + dwsFavorite.setUsername(username); + dwsFavorite.setWorkspaceId(workspaceId); + dwsFavorite.setMenuApplicationId(menuApplicationId); + // todo: order will from the front end + dwsFavorite.setOrder(1); + dwsFavorite.setCreateBy(username); + dwsFavorite.setLastUpdateUser(username); + workspaceMapper.addFavorite(dwsFavorite); + return dwsFavorite.getId(); + } + + @Override + public Long deleteFavorite(String username, Long favouritesId) { + workspaceMapper.deleteFavorite(favouritesId); + return favouritesId; + } + private boolean isAdminUser(Long workspaceId, String username) { DWSWorkspace workspace = workspaceMapper.getWorkspaceById(workspaceId); return username != null && workspace != null && username.equals(workspace.getCreateBy());