Skip to content

The Issue Tracker GraphQL API is a powerful system for managing software development projects and tracking issues. It allows users to create, update, and manage issues efficiently.

License

Notifications You must be signed in to change notification settings

BaseMax/IssueTrackerGraphQLTS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Issue Tracker - GraphQL API TS

The Issue Tracker GraphQL API is a powerful system for managing software development projects and tracking issues. It allows users to create, update, and manage issues efficiently.

Demo

Demo image

Demo image

Demo image

Demo image

Demo image

Demo image

Demo image

Demo image

Demo image

Features

  • Create Issue: Users can create a new issue by providing essential details like title, description, priority, and assignee.
  • Update Issue: Users can update existing issues by modifying their title, description, priority, status, and assignee.
  • List Issues: Users can view a list of all issues in the system, sorted by priority or creation date.
  • Search Issues: Users can search for issues based on keywords, status, priority, or assignee.
  • Assign Issue: Users can assign an issue to a specific team member for resolution.
  • Change Issue Status: Users can change the status of an issue (e.g., open, in progress, closed) as the issue progresses.
  • Delete Issue: Users with appropriate permissions can delete issues that are no longer relevant.

GraphQL

Queries:

  • findAllIssues: Get a list of all issues in the system.
  • findIssueById(issueId: ID!): Retrieve a specific issue by providing its unique ID.
  • searchIssues(keywords: String!, status: String, priority: String, assignee: String): Search for issues based on provided search parameters.
  • findOpenIssues: [Issue]: Get a list of all open issues in the system.
  • findClosedIssues: [Issue]: Get a list of all closed issues.
  • findHighPriorityIssues: [Issue]: Get a list of issues with high priority.
  • findMediumPriorityIssues: [Issue]: Get a list of issues with medium priority.
  • findLowPriorityIssues: [Issue]: Get a list of issues with low priority.
  • findIssuesCreatedAfter(date: String!): [Issue]: Get a list of issues created after a specified date.
  • findIssuesCreatedBefore(date: String!): [Issue]: Get a list of issues created before a specified date.
  • findIssuesByAuthor(authorId: ID!): [Issue]: Get a list of issues created by a specific author.
  • findIssuesByLabel(label: String!): [Issue]: Get a list of issues with a specific label.
  • findIssuesByMilestone(milestone: String!): [Issue]: Get a list of issues associated with a particular milestone.
  • findIssuesByTag(tag: String!): [Issue]: Get a list of issues associated with a specific tag.
  • findAssignedIssues(assigneeId: ID!): [Issue]: Get a list of issues assigned to a specific team member.
  • findUnassignedIssues: [Issue]: Get a list of issues that are not assigned to anyone.
  • findIssuesByProject(projectId: ID!): [Issue]: Get a list of issues associated with a specific project.
  • findIssuesByComponent(component: String!): [Issue]: Get a list of issues related to a particular component of the project.
  • getIssuesByEpic(epicId: ID!): [Issue]: Get a list of issues associated with a specific epic.
  • getIssuesByRelatedIssue(issueId: ID!): [Issue]: Get a list of issues related to a specific issue.
  • getIssuesWithAttachments: [Issue]: Get a list of issues with attached files or images.
  • getIssuesWithoutAssignee: [Issue]: Get a list of issues that do not have an assignee.
  • getIssuesByWatchers(watcherId: ID!): [Issue]: Get a list of issues watched by a specific user.
  • getIssuesByStatus(status: String!): [Issue]: Get a list of issues filtered by a specific status.
  • getIssuesByPriority(priority: String!): [Issue]: Get a list of issues filtered by a specific priority.
  • getIssuesByAssignee(assignee: String!): [Issue]: Get a list of issues assigned to a specific team member.

Mutations:

  • createIssue(title: String!, description: String!, priority: Priority!, assignee: String!): Issue: Create a new issue with the provided details.
  • updateIssue(issueId: ID!, title: String, description: String, priority: Priority, status: Status, assignee: String): Issue: Update an existing issue with new information.
  • changeIssueStatus(issueId: ID!, status: Status!): Issue: Change the status of an issue.
  • deleteIssue(issueId: ID!): ID: Delete an issue from the system.
  • assignIssue(issueId: ID!, assignee: String!): Issue: Assign an issue to a specific team member for resolution.
  • updateIssueStatus(issueId: ID!, status: Status!): Issue: Update the status of an issue.
  • updateIssuePriority(issueId: ID!, priority: Priority!): Issue: Update the priority of an issue.
  • deleteAllClosedIssues: Boolean: Delete all closed issues from the system.
  • deleteAllIssues: Boolean: Delete all issues from the system.
  • `addLabelToIssue(issueId: ID!, label: String!): Issue: Add a label to a specific issue.
  • `removeLabelFromIssue(issueId: ID!, label: String!): Issue: Remove a label from a specific issue.
  • addTagToIssue(issueId: ID!, tag: String!): Issue: Add a tag to a specific issue.
  • removeTagFromIssue(issueId: ID!, tag: String!): Issue: Remove a tag from a specific issue.
  • addCommentToIssue(issueId: ID!, content: String!): Comment: Add a comment to a specific issue.
  • updateComment(commentId: ID!, content: String!): Comment: Update the content of a comment.
  • removeComment(commentId: ID!): ID: Delete a comment from the system.
  • addWatcherToIssue(issueId: ID!, watcherId: ID!): Issue: Add a user as a watcher to a specific issue.
  • removeWatcherFromIssue(issueId: ID!, watcherId: ID!): Issue: Remove a user from the watchers of a specific issue.
  • addAttachmentToIssue(issueId: ID!, fileUrl: String!, description: String): Issue: Add an attachment (e.g., file, image) to a specific issue.
  • updateAttachmentDescription(attachmentId: ID!, description: String!): Attachment: Update the description of an attachment.
  • deleteAttachment(attachmentId: ID!): ID: Delete an attachment from the system.
  • createMilestone(title: String!, dueDate: String!): Milestone: Create a new milestone with a title and due date.
  • updateMilestone(milestoneId: ID!, title: String, dueDate: String): Milestone: Update the title or due date of a milestone.
  • deleteMilestone(milestoneId: ID!): ID: Delete a milestone from the system.
  • createProject(title: String!, description: String!): Project: Create a new project with a title and description.
  • updateProject(projectId: ID!, title: String, description: String): Project: Update the title or description of a project.
  • deleteProject(projectId: ID!): ID: Delete a project from the system.
  • createComponent(projectId: ID!, title: String!, description: String): Component: Create a new component within a project.
  • updateComponent(componentId: ID!, title: String, description: String): Component: Update the title or description of a component.

GraphQL Models

enum Priority {
  LOW
  MEDIUM
  HIGH
}

enum Status {
  OPEN
  CLOSED
}

type Comment {
  id: ID!
  content: String!
}

type Attachment {
  id: ID!
  fileUrl: String!
  description: String
}

type Issue {
  id: ID!
  title: String!
  description: String!
  priority: Priority!
  status: Status!
  assignee: String!
  labels: [String!]!
  tags: [String!]!
  comments: [Comment!]!
  attachments: [Attachment!]!
}

type Milestone {
  id: ID!
  title: String!
  dueDate: String!
}

type Project {
  id: ID!
  title: String!
  description: String!
}

type Component {
  id: ID!
  title: String!
  description: String
}

type Query {
  findAllIssue: [Issue!]!
  findOneIssue(id: String!): Issue!
  findCloseIssues: [Issue!]!
  findOpenIssues: [Issue!]!
  findLowPriorityIssues: [Issue!]!
  findHighPriorityIssues: [Issue!]!
  findMediumPriorityIssues: [Issue!]!
  findIssuesByComponent(componentId: String!): [Issue!]!
  findIssuesByProject(projectId: String!): [Issue!]!
  findIssuesByAssignee(assigne: String!): [Issue!]!
  findOneComment(id: String!): Comment!
  findAllAttachment: [Attachment!]!
  findOneAttachment(id: String!): Attachment!
  findAllProject: [Project!]!
  findOneProject(id: String!): Project!
  findAllComponent: [Component!]!
  findOneComponent(id: ID!): Component!
}

type Mutation {
  createIssue(createIssueInput: CreateIssueInput!): StatusResult!
  changeIssueStatus(changeIssueStatusInput: ChangeIssueStatusInput!): StatusResult!
  changeIssuePriority(id: String!, priority: String!): StatusResult!
  updateIssue(updateIssueInput: UpdateIssueInput!): StatusResult!
  assignIssue(issueId: String!, assigne: String!): StatusResult!
  removeTagFromIssue(issueId: String!): StatusResult!
  removeCloseIssue: StatusResult!
  removeIssue(id: String!): StatusResult!
  removeAllIssue: StatusResult!
  addCommentToIssue(addCommentToIssueInput: AddCommentToIssueInput!): StatusResult!
  updateComment(updateCommentInput: UpdateCommentInput!): StatusResult!
  removeComment(id: String!): StatusResult!
  addAttachmentToIssue(createAttachmentInput: CreateAttachmentInput!): StatusResult!
  updateAttachment(updateAttachmentInput: UpdateAttachmentInput!): StatusResult!
  removeAttachment(id: String!): StatusResult!
  createProject(createProjectInput: CreateProjectInput!): Project!
  updateProject(updateProjectInput: UpdateProjectInput!): StatusResult!
  removeProject(id: String!): StatusResult!
  createComponent(createComponentInput: CreateComponentInput!): StatusResult!
  updateComponent(updateComponentInput: UpdateComponentInput!): StatusResult!
  removeComponent(id: ID!): StatusResult!
}

Getting Started

To set up the Issue Tracker GraphQL API and start using it, follow the installation and setup instructions provided in the Installation Guide.

installation

Clone the repository

git clone https://github.com/BaseMax/IssueTrackerGraphQLTS.git

Navigate to the project directory:

cd IssueTrackerGraphQLTS

You must install the required packages . Try the following command :

npm install 

Create Database

One of the requirements of project implementation is to have a database

Postgres is used by default

After creating the database, put all its information in the env file .

mv ./.env.example ./.env

Run app

Great!

Now run the app with the following command

npm run start:dev

Test app

if your test app following steps:

1- Get the .env file and use this:

POSTGRES_DATABASE_TEST="your-database"

2- Run command :

npm run test:e2e

Contributing

We welcome contributions to improve the Issue Tracker API. If you'd like to contribute, please follow the guidelines in the Contribution Guide.

License

The Issue Tracker GraphQL API is open-source and available under the GPL-3.0 License. Feel free to use, modify, and distribute it as per the terms of the license.

Support

If you have any questions, issues, or need support with the API, please open a GitHub Issue.

Copyright 2023, Max Base

About

The Issue Tracker GraphQL API is a powerful system for managing software development projects and tracking issues. It allows users to create, update, and manage issues efficiently.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published