Week 7

Project: Ticket Tracking System

Sending emails

Design document

Technical interview

Back end Track

Ticket Tracking System

Overview

You'll design and build the backend for a new ticket tracking system — the kind of tool teams use to log, assign, and follow up on work, like Jira, Trello, or GitHub Issues. A ticket tracking system lets users across different projects manage their tasks, bugs, and other to-dos. Each ticket represents something that needs to be done and holds the key information about it: what the work is, its current status, and who is responsible for it.

Jira - a popular ticket tracking system

Jira - a popular ticket tracking system

You'll build a REST API that will allow you to manage tickets, users and projects within the system. Your API will manage users, tickets and projects, store everything in a SQL database, and email the people assigned to a ticket whenever it changes.


Entities

<aside> ❗

You will be modeling three things. These are the fields the business cares about — how you turn them into tables, keys, and relationships is your decision.

</aside>

1. User

Represents a single person who is using the system. Fields:

  1. name - at least 3 characters, required
  2. email - valid email format, required

There is no need to implement ****an authentication system (login, passwords, etc…)

2. Project

A project represents an area of work that multiple tickets can be connected to.

Must have fields:

  1. name - at least 3 characters, required

3. Ticket

Must have fields:

  1. Title - required
  2. Description - optional
  3. The Project it belongs to - required
  4. Status - required, Must be one of the following values: open, in progress, closed .
  5. Assigned users - a list of assigned users, can be empty.
  6. Creation date - required, will be set automatically by the system.
  7. Update date - optional (Empty if there were no updates), will be automatically set by the system.

<aside> 💭

In plain terms:


Product Requirements

<aside> ❗

These are capabilities, not endpoints. You decide how they map to resources, URLs, and HTTP methods — and your design should use GET, POST, PUT, and DELETE where each is appropriate.

</aside>

Users

Projects

Tickets

Note: Deleting ticket is not possible in the system.

Email sending

Each time a ticket is updated, send an email to all the assignees of that ticket to let them know what have changed. For example:

Ticket #123 updated:
Title: "Fix the database"
Status: "In progress"

Current assignees: Max, Dave, Yaris.

It is up to you to handle the case when sending an email fails

Validations

You are responsible for implementing validation checks according to the specification above. In addition to extra validations that are not explicitly mentioned such as:

<aside> ❗

You are responsible for protecting your API and database from bad or invalid input. Make an effort to validate everything before saving the information in the system.

</aside>


Technical Requirements

Tech Stack

Database

Architecture

Tests