Implemented issue create modal, further polish
This commit is contained in:
@@ -19,7 +19,8 @@ router.get(
|
||||
router.post(
|
||||
'/issues',
|
||||
catchErrors(async (req, res) => {
|
||||
const issue = await createEntity(Issue, req.body);
|
||||
const listPosition = await calculateListPosition(req.body);
|
||||
const issue = await createEntity(Issue, { ...req.body, listPosition });
|
||||
res.respond({ issue });
|
||||
}),
|
||||
);
|
||||
@@ -40,4 +41,15 @@ router.delete(
|
||||
}),
|
||||
);
|
||||
|
||||
const calculateListPosition = async (newIssue: Issue): Promise<number> => {
|
||||
const issues = await Issue.find({
|
||||
where: { projectId: newIssue.projectId, status: newIssue.status },
|
||||
});
|
||||
const listPositions = issues.map(({ listPosition }) => listPosition);
|
||||
if (listPositions.length > 0) {
|
||||
return Math.min(...listPositions) - 1;
|
||||
}
|
||||
return 1;
|
||||
};
|
||||
|
||||
export default router;
|
||||
|
||||
@@ -23,6 +23,7 @@ class Issue extends BaseEntity {
|
||||
type: [is.required(), is.oneOf(Object.values(IssueType))],
|
||||
status: [is.required(), is.oneOf(Object.values(IssueStatus))],
|
||||
priority: [is.required(), is.oneOf(Object.values(IssuePriority))],
|
||||
listPosition: is.required(),
|
||||
reporterId: is.required(),
|
||||
};
|
||||
|
||||
@@ -71,6 +72,9 @@ class Issue extends BaseEntity {
|
||||
)
|
||||
project: Project;
|
||||
|
||||
@Column('integer')
|
||||
projectId: number;
|
||||
|
||||
@OneToMany(
|
||||
() => Comment,
|
||||
comment => comment.issue,
|
||||
|
||||
Reference in New Issue
Block a user