Build a ticketing system that can
-
Accept HTTP request
-
to create a ticket
-
List all the tickets
-
List all the tickets filtered by
-
assigned agent
-
customer
-
status
-
List details of a given ticket id
-
edit details about the ticket
-
update status for the ticket (open, waiting on customer, customer responded, resolved, closed)
-
assign the ticket to an agent
-
to add response to the ticket
-
delete the ticket
-
send email to the customer when agent adds a response
-
Below is a sendgrid account credentials. You can use them or you can sign up for an email service of your choice.
-
Note: the sendgrid credentials seems to have expired. I got an error when tried it out on it's dev portal.
-
Approach: queue a message to notification exchange. And process it asynchronously.
-
Assign the ticket equally to available agents on that given day (do not overload a single agent, spread the ticket load equally)
-
Update tickets that were marked as Resolved status 30 days ago as closed status
-
Approach: Run a cron job everyday to run a batch update.
- TESTS 😬
- Authentication and Authorization.
- Multi-tenant support
- Current db schema is for multi-tenant. Code needs to be changed.
- Split unrelated components(eg. mailer) into a diff service
- Springboot
- jooq
- postgres
- RabbitMQ