Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
beyond-clouds
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
4
Issues
4
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
段启岩
beyond-clouds
Commits
7cecb8d3
Commit
7cecb8d3
authored
Jan 31, 2020
by
段启岩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
发布项目,删除项目,项目详情,项目列表
parent
5e04066c
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
422 additions
and
4 deletions
+422
-4
src/main/java/cn/meteor/beyondclouds/common/vo/PageVO.java
+23
-0
src/main/java/cn/meteor/beyondclouds/modules/project/api/ProjectApi.java
+125
-0
src/main/java/cn/meteor/beyondclouds/modules/project/bean/ProjectDetail.java
+17
-0
src/main/java/cn/meteor/beyondclouds/modules/project/entity/Project.java
+5
-4
src/main/java/cn/meteor/beyondclouds/modules/project/enums/ProjectErrorCode.java
+31
-0
src/main/java/cn/meteor/beyondclouds/modules/project/exception/ProjectServiceException.java
+17
-0
src/main/java/cn/meteor/beyondclouds/modules/project/form/ProjectForm.java
+64
-0
src/main/java/cn/meteor/beyondclouds/modules/project/service/IProjectService.java
+31
-0
src/main/java/cn/meteor/beyondclouds/modules/project/service/impl/ProjectServiceImpl.java
+109
-0
No files found.
src/main/java/cn/meteor/beyondclouds/common/vo/PageVO.java
0 → 100644
View file @
7cecb8d3
package
cn
.
meteor
.
beyondclouds
.
common
.
vo
;
import
lombok.Data
;
import
java.util.List
;
/**
* 分页结果返回
* @author meteor
*/
@Data
public
class
PageVO
<
T
>
{
/**
* 总页数
*/
private
Long
totalPage
;
/**
* 数据
*/
private
List
<
T
>
dataList
;
}
src/main/java/cn/meteor/beyondclouds/modules/project/api/ProjectApi.java
0 → 100644
View file @
7cecb8d3
package
cn
.
meteor
.
beyondclouds
.
modules
.
project
.
api
;
import
cn.meteor.beyondclouds.common.form.PageForm
;
import
cn.meteor.beyondclouds.common.vo.PageVO
;
import
cn.meteor.beyondclouds.core.annotation.Anonymous
;
import
cn.meteor.beyondclouds.core.annotation.CurrentSubject
;
import
cn.meteor.beyondclouds.core.api.Response
;
import
cn.meteor.beyondclouds.core.bean.Subject
;
import
cn.meteor.beyondclouds.modules.project.bean.ProjectDetail
;
import
cn.meteor.beyondclouds.modules.project.entity.Project
;
import
cn.meteor.beyondclouds.modules.project.exception.ProjectServiceException
;
import
cn.meteor.beyondclouds.modules.project.form.ProjectForm
;
import
cn.meteor.beyondclouds.modules.project.service.IProjectService
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.Valid
;
/**
* 项目接口
* @author 段启岩
*/
@Api
(
tags
=
"项目API"
)
@RestController
public
class
ProjectApi
{
private
IProjectService
projectService
;
@Autowired
public
ProjectApi
(
IProjectService
projectService
)
{
this
.
projectService
=
projectService
;
}
/**
* 发布项目
* @param projectForm
* @param bindingResult
* @param subject
* @return
*/
@ApiOperation
(
"发布项目"
)
@PostMapping
(
"/project"
)
public
Response
publishProject
(
@RequestBody
@Valid
ProjectForm
projectForm
,
BindingResult
bindingResult
,
@CurrentSubject
Subject
subject
)
{
// 将项目表单转换为项目对象
Project
project
=
new
Project
();
BeanUtils
.
copyProperties
(
projectForm
,
project
);
// 设置用户ID(项目发布者ID)
project
.
setUserId
((
String
)
subject
.
getId
());
// 发布项目
try
{
projectService
.
publishProject
(
project
,
projectForm
.
getProjectDetail
());
return
Response
.
success
();
}
catch
(
ProjectServiceException
e
)
{
e
.
printStackTrace
();
return
Response
.
error
(
e
);
}
}
/**
* 删除项目
* @param projectId
* @param subject
* @return
*/
@ApiOperation
(
"删除项目"
)
@DeleteMapping
(
"/project/{projectId}"
)
public
Response
deleteProject
(
@PathVariable
(
"projectId"
)
String
projectId
,
@CurrentSubject
Subject
subject
)
{
// 删除
try
{
projectService
.
deleteProject
(
projectId
,
(
String
)
subject
.
getId
());
return
Response
.
success
();
}
catch
(
ProjectServiceException
e
)
{
e
.
printStackTrace
();
return
Response
.
error
(
e
);
}
}
/**
* 项目详情
* @param projectId
* @return
*/
@Anonymous
@ApiOperation
(
"项目详情"
)
@GetMapping
(
"/project/{projectId}"
)
public
Response
<
ProjectDetail
>
getProject
(
@PathVariable
(
"projectId"
)
String
projectId
)
{
try
{
// 获取项目详情并返回
ProjectDetail
projectDetail
=
projectService
.
getProject
(
projectId
);
return
Response
.
success
(
projectDetail
);
}
catch
(
ProjectServiceException
e
)
{
e
.
printStackTrace
();
return
Response
.
error
(
e
);
}
}
/**
* 项目列表
* @param pageForm
* @return
*/
@Anonymous
@ApiOperation
(
"项目列表"
)
@GetMapping
(
"/projects"
)
public
Response
<
PageVO
<
Project
>>
getProjects
(
@Valid
PageForm
pageForm
)
{
// 获取列表并返回
IPage
<
Project
>
projectPage
=
projectService
.
getProjectPage
(
pageForm
.
getPage
(),
pageForm
.
getSize
());
PageVO
<
Project
>
projectPageVO
=
new
PageVO
<>();
projectPageVO
.
setTotalPage
(
projectPage
.
getPages
());
projectPageVO
.
setDataList
(
projectPage
.
getRecords
());
return
Response
.
success
(
projectPageVO
);
}
}
src/main/java/cn/meteor/beyondclouds/modules/project/bean/ProjectDetail.java
0 → 100644
View file @
7cecb8d3
package
cn
.
meteor
.
beyondclouds
.
modules
.
project
.
bean
;
import
cn.meteor.beyondclouds.modules.project.entity.Project
;
import
lombok.Data
;
/**
* 项目详情
* @author meteor
*/
@Data
public
class
ProjectDetail
extends
Project
{
/**
* 项目详情
*/
private
String
projectDetail
;
}
src/main/java/cn/meteor/beyondclouds/modules/project/entity/Project.java
View file @
7cecb8d3
...
@@ -2,14 +2,15 @@ package cn.meteor.beyondclouds.modules.project.entity;
...
@@ -2,14 +2,15 @@ package cn.meteor.beyondclouds.modules.project.entity;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
java.time.LocalDateTime
;
import
java.io.Serializable
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
/**
* <p>
* <p>
* 项目表
* 项目表
...
@@ -68,9 +69,9 @@ public class Project implements Serializable {
...
@@ -68,9 +69,9 @@ public class Project implements Serializable {
@ApiModelProperty
(
value
=
"封面图"
)
@ApiModelProperty
(
value
=
"封面图"
)
private
String
cover
;
private
String
cover
;
private
LocalDateTim
e
createTime
;
private
Dat
e
createTime
;
private
LocalDateTim
e
updateTime
;
private
Dat
e
updateTime
;
}
}
src/main/java/cn/meteor/beyondclouds/modules/project/enums/ProjectErrorCode.java
0 → 100644
View file @
7cecb8d3
package
cn
.
meteor
.
beyondclouds
.
modules
.
project
.
enums
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
/**
* @author 段启岩
*/
public
enum
ProjectErrorCode
implements
IErrorCode
{
INCORRECT_CATEGORY
(
9001
,
"项目分类错误"
),
PROJECT_NOT_FOUND
(
9002
,
"找不到该项目"
);
private
long
code
;
private
String
msg
;
ProjectErrorCode
(
long
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
@Override
public
long
code
()
{
return
code
;
}
@Override
public
String
msg
()
{
return
msg
;
}
}
src/main/java/cn/meteor/beyondclouds/modules/project/exception/ProjectServiceException.java
0 → 100644
View file @
7cecb8d3
package
cn
.
meteor
.
beyondclouds
.
modules
.
project
.
exception
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
import
cn.meteor.beyondclouds.core.exception.ServiceException
;
/**
* 项目业务异常类
*/
public
class
ProjectServiceException
extends
ServiceException
{
public
ProjectServiceException
(
long
errorCode
,
String
errorMsg
)
{
super
(
errorCode
,
errorMsg
);
}
public
ProjectServiceException
(
IErrorCode
errorCode
)
{
super
(
errorCode
);
}
}
src/main/java/cn/meteor/beyondclouds/modules/project/form/ProjectForm.java
0 → 100644
View file @
7cecb8d3
package
cn
.
meteor
.
beyondclouds
.
modules
.
project
.
form
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
/**
* @author 段启岩
*/
@ApiModel
(
value
=
"ProjectForm"
,
description
=
"项目表单"
)
@Data
public
class
ProjectForm
{
private
static
final
long
serialVersionUID
=
1L
;
@NotEmpty
(
message
=
"项目名称不能为空"
)
@ApiModelProperty
(
value
=
"项目名称"
)
private
String
projectName
;
@NotNull
(
message
=
"项目类别不能为空"
)
@ApiModelProperty
(
value
=
"项目类别ID"
)
private
Integer
categoryId
;
@NotEmpty
(
message
=
"项目源码链接不能为空"
)
@ApiModelProperty
(
value
=
"项目源码链接"
)
private
String
sourceLink
;
@ApiModelProperty
(
value
=
"项目主页链接"
)
private
String
homeLink
;
@ApiModelProperty
(
value
=
"项目文档链接"
)
private
String
docLink
;
@ApiModelProperty
(
value
=
"项目类型"
)
private
String
projectType
;
@ApiModelProperty
(
value
=
"协议"
)
private
String
license
;
@ApiModelProperty
(
value
=
"项目开发语言"
)
private
String
devLang
;
@ApiModelProperty
(
value
=
"项目运行平台"
)
private
String
runtimePlatform
;
@ApiModelProperty
(
value
=
"项目作者"
)
private
String
author
;
@NotEmpty
(
message
=
"项目描述不能为空"
)
@ApiModelProperty
(
value
=
"项目描述"
)
private
String
projectDescription
;
@NotEmpty
(
message
=
"项目封面图不能为空"
)
@ApiModelProperty
(
value
=
"封面图"
)
private
String
cover
;
@ApiModelProperty
(
value
=
"项目详情"
)
private
String
projectDetail
;
}
src/main/java/cn/meteor/beyondclouds/modules/project/service/IProjectService.java
View file @
7cecb8d3
package
cn
.
meteor
.
beyondclouds
.
modules
.
project
.
service
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
project
.
service
;
import
cn.meteor.beyondclouds.modules.project.bean.ProjectDetail
;
import
cn.meteor.beyondclouds.modules.project.entity.Project
;
import
cn.meteor.beyondclouds.modules.project.entity.Project
;
import
cn.meteor.beyondclouds.modules.project.exception.ProjectServiceException
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.baomidou.mybatisplus.extension.service.IService
;
/**
/**
...
@@ -13,4 +16,32 @@ import com.baomidou.mybatisplus.extension.service.IService;
...
@@ -13,4 +16,32 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
*/
public
interface
IProjectService
extends
IService
<
Project
>
{
public
interface
IProjectService
extends
IService
<
Project
>
{
/**
* 发布项目
* @param project
* @param detail
*/
void
publishProject
(
Project
project
,
String
detail
)
throws
ProjectServiceException
;
/**
* 删除项目
* @param projectId
* @param userId
*/
void
deleteProject
(
String
projectId
,
String
userId
)
throws
ProjectServiceException
;
/**
* 获取项目
* @param projectId
* @return
*/
ProjectDetail
getProject
(
String
projectId
)
throws
ProjectServiceException
;
/**
* 获取项目分页
* @return
* @param pageNumber
* @param pageSize
*/
IPage
<
Project
>
getProjectPage
(
Integer
pageNumber
,
Integer
pageSize
);
}
}
src/main/java/cn/meteor/beyondclouds/modules/project/service/impl/ProjectServiceImpl.java
View file @
7cecb8d3
package
cn
.
meteor
.
beyondclouds
.
modules
.
project
.
service
.
impl
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
project
.
service
.
impl
;
import
cn.meteor.beyondclouds.modules.project.bean.ProjectDetail
;
import
cn.meteor.beyondclouds.modules.project.entity.Project
;
import
cn.meteor.beyondclouds.modules.project.entity.Project
;
import
cn.meteor.beyondclouds.modules.project.entity.ProjectCategory
;
import
cn.meteor.beyondclouds.modules.project.entity.ProjectComment
;
import
cn.meteor.beyondclouds.modules.project.entity.ProjectExt
;
import
cn.meteor.beyondclouds.modules.project.enums.ProjectErrorCode
;
import
cn.meteor.beyondclouds.modules.project.exception.ProjectServiceException
;
import
cn.meteor.beyondclouds.modules.project.mapper.ProjectCategoryMapper
;
import
cn.meteor.beyondclouds.modules.project.mapper.ProjectMapper
;
import
cn.meteor.beyondclouds.modules.project.mapper.ProjectMapper
;
import
cn.meteor.beyondclouds.modules.project.service.IProjectCommentService
;
import
cn.meteor.beyondclouds.modules.project.service.IProjectExtService
;
import
cn.meteor.beyondclouds.modules.project.service.IProjectService
;
import
cn.meteor.beyondclouds.modules.project.service.IProjectService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
/**
/**
* <p>
* <p>
...
@@ -17,4 +32,98 @@ import org.springframework.stereotype.Service;
...
@@ -17,4 +32,98 @@ import org.springframework.stereotype.Service;
@Service
@Service
public
class
ProjectServiceImpl
extends
ServiceImpl
<
ProjectMapper
,
Project
>
implements
IProjectService
{
public
class
ProjectServiceImpl
extends
ServiceImpl
<
ProjectMapper
,
Project
>
implements
IProjectService
{
private
IProjectExtService
projectExtService
;
private
ProjectCategoryMapper
projectCategoryMapper
;
private
IProjectCommentService
projectCommentService
;
@Autowired
public
ProjectServiceImpl
(
IProjectExtService
projectExtService
,
ProjectCategoryMapper
projectCategoryMapper
,
IProjectCommentService
projectCommentService
)
{
this
.
projectExtService
=
projectExtService
;
this
.
projectCategoryMapper
=
projectCategoryMapper
;
this
.
projectCommentService
=
projectCommentService
;
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
void
publishProject
(
Project
project
,
String
detail
)
throws
ProjectServiceException
{
// 1.检查项目类别是否存在
Integer
categoryId
=
project
.
getCategoryId
();
ProjectCategory
projectCategory
=
projectCategoryMapper
.
selectById
(
categoryId
);
// 若分类不存在,则抛出异常
if
(
null
==
projectCategory
)
{
throw
new
ProjectServiceException
(
ProjectErrorCode
.
INCORRECT_CATEGORY
);
}
// 2.保存项目
save
(
project
);
// 3.保存项目详情
ProjectExt
projectExt
=
new
ProjectExt
();
projectExt
.
setProjectId
(
project
.
getProjectId
());
projectExt
.
setProjectDetail
(
detail
);
projectExtService
.
save
(
projectExt
);
}
@Override
public
void
deleteProject
(
String
projectId
,
String
userId
)
throws
ProjectServiceException
{
// 1.判断自己有没有发过这个项目
QueryWrapper
<
Project
>
projectQueryWrapper
=
new
QueryWrapper
<>();
projectQueryWrapper
.
eq
(
"project_id"
,
projectId
)
.
eq
(
"user_id"
,
userId
);
Project
project
=
getOne
(
projectQueryWrapper
);
// 若找不到该用户的该项目,则抛出业务异常
if
(
null
==
project
)
{
throw
new
ProjectServiceException
(
ProjectErrorCode
.
PROJECT_NOT_FOUND
);
}
// 2.删除项目的所有评论
QueryWrapper
<
ProjectComment
>
projectCommentQueryWrapper
=
new
QueryWrapper
<>();
projectCommentQueryWrapper
.
eq
(
"project_id"
,
projectId
);
projectCommentService
.
remove
(
projectCommentQueryWrapper
);
// 3.删除项目本身
// 删除项目详情
QueryWrapper
<
ProjectExt
>
projectExtQueryWrapper
=
new
QueryWrapper
<>();
projectExtQueryWrapper
.
eq
(
"project_id"
,
projectId
);
projectExtService
.
remove
(
projectExtQueryWrapper
);
// 删除项目
removeById
(
projectId
);
}
@Override
public
ProjectDetail
getProject
(
String
projectId
)
throws
ProjectServiceException
{
// 1.获取项目
Project
project
=
getById
(
projectId
);
// 若找不到该项目,则抛出业务异常
if
(
null
==
project
)
{
throw
new
ProjectServiceException
(
ProjectErrorCode
.
PROJECT_NOT_FOUND
);
}
// 2.获取项目详情
QueryWrapper
<
ProjectExt
>
projectExtQueryWrapper
=
new
QueryWrapper
<>();
projectExtQueryWrapper
.
eq
(
"project_id"
,
projectId
);
ProjectExt
projectExt
=
projectExtService
.
getOne
(
projectExtQueryWrapper
);
// 3.装配并返回查询到的信息
ProjectDetail
projectDetail
=
new
ProjectDetail
();
BeanUtils
.
copyProperties
(
project
,
projectDetail
);
projectDetail
.
setProjectDetail
(
projectExt
.
getProjectDetail
());
return
projectDetail
;
}
@Override
public
IPage
<
Project
>
getProjectPage
(
Integer
pageNumber
,
Integer
pageSize
)
{
IPage
<
Project
>
page
=
new
Page
<>(
pageNumber
,
pageSize
);
return
page
(
page
);
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment