Skip to content

Another test assignment executed in Nov 2023 on position of Team Lead

Notifications You must be signed in to change notification settings

avertiy/timers-api

Repository files navigation

#Challenge Description

Task time: 3 hours

The task is to develop a web API containing two endpoints, "Set Timer" and "Get Timer Status". The "Set Timer" endpoint should receive a JSON input including hours, minutes, seconds, and a web URL. Upon receiving this input, the endpoint should generate a JSON output with a single field, "id" representing the timer’s unique identifier.

The endpoint must also define an internal timer that will send a webhook to the specified URL after the timer runs out (a POST HTTP call with an empty body).

The second endpoint, "Get Timer Status," should receive a timer ID as a resource ID in the URL. Upon receiving this input, the endpoint should generate a JSON output containing the number of seconds left until the timer expires. If the timer has expired, the endpoint should return "0". Happy flow for example: Create a new Timer request body, for example: { "hours": 0, "minutes": 1, "seconds": 0, "webhookUrl": "http/s://{domain}/api/timers/outpost" }

Get the status of the created Timer expected response, for example

{ "id": "dcfc8df0-ed93-48fc-8bb5-9e376be06fce", "timeLeft": 36 }

List the timers expected response for example (The specified timer status is "Started")

{ "pageNumber": 1, "pageSize": 100, "items": [ { "id": "dcfc8df0-ed93-48fc-8bb5-9e376be06fce", "dateCreated": "2023-05-07T05:31:16.3350923+00:00", "hours": 0, "minutes": 1, "seconds": 0, "timeLeft": 36, "webhookUrl": "http/s://{domain}/api/timers/outpost", "status": "Started" } ], "totalRowCount": 1 }

Wait for 1 min.

The webhook URL is triggered.

List the timers expected response for example (The specified timer status updated to "Finished")

{ "pageNumber": 1, "pageSize": 100, "items": [ { "id": "dcfc8df0-ed93-48fc-8bb5-9e376be06fce", "dateCreated": "2023-05-07T05:31:16.3350923+00:00", "hours": 0, "minutes": 1, "seconds": 0, "timeLeft": 36, "webhookUrl": "http/s://{domain}/api/timers/outpost", "status": "Finished" } ], "totalRowCount": 1 }

Your solution must have the following features:

Persistent timers will continue running even if the server is shut down and restarted.

The server should send the webhook if a timer is supposed to fire when the server is down.

#Database and ConnectionString Create SQL Server db timers or update the connection string

"DefaultConnection": "Server=localhost;Database=timers;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True"

if migrations are not applied automatically plase run Update-Database ef migrations command from package manager console in VS

Api starts with swagger so you can pick all the relevant information and try api from there.

About

Another test assignment executed in Nov 2023 on position of Team Lead

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published