A URL shortener in Go.
You should have postgres
and redis
installed which listening on ports 5432
and 6379 respectively.
To serve the project, use:
make serve
To make subscriber working:
make subscribe
Subscriber listen for messages about viewed url, So it can calculate and insert
the number of views in Stats
table.
- Creating a shortened url
path: / \
verb: POST \
form: url -> `string` (ex: `example.com`) \
response: {"id": "wEJQBwz", "url": "example.com"} (example) \
Header: `Authorization: Bearer <JWT token>` (Case Sensitive)
- Getting a shortened url
path: /{id:`shortened url`} (ex: `/wEJQBwz`) \
verb: GET \
response: {"id": "wEJQBwz", "url": "example.com"} (example)
- Signup
path: /signup \
verb: POST \
form: username -> `string` (ex: `username`)
password -> `string` (ex: `password`) \
response: {"username": "username"} (example)
- Login
path: /login \
verb: POST \
form: username -> `string` (ex: `username`)
password -> `string` (ex: `password`) \
response: {"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJFbWFpbCI6Im1lbWJlcjIiLCJleHAiOjE2MTg3Mjk3MzAsImlzcyI6IkF1dGhTZXJ2aWNlIn0.EBQDC9cxOdV2ob8Sujy0iSnzmJi5gYLNfOtdQSvp_gw"} (example)
Following API list should be implemented in V2
- Online stats
path: /stats/online \
verb: GET \
response: {"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJFbWFpbCI6Im1lbWJlcjIiLCJleHAiOjE2MTg3Mjk3MzAsImlzcyI6IkF1dGhTZXJ2aWNlIn0.EBQDC9cxOdV2ob8Sujy0iSnzmJi5gYLNfOtdQSvp_gw"} (example)
- Daily stats
path: /stats/daily \
verb: GET \
response: {"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJFbWFpbCI6Im1lbWJlcjIiLCJleHAiOjE2MTg3Mjk3MzAsImlzcyI6IkF1dGhTZXJ2aWNlIn0.EBQDC9cxOdV2ob8Sujy0iSnzmJi5gYLNfOtdQSvp_gw"} (example)
- Weekly stats
path: /stats/weekly \
verb: GET \
response: {"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJFbWFpbCI6Im1lbWJlcjIiLCJleHAiOjE2MTg3Mjk3MzAsImlzcyI6IkF1dGhTZXJ2aWNlIn0.EBQDC9cxOdV2ob8Sujy0iSnzmJi5gYLNfOtdQSvp_gw"} (example)
You can use one of benchmarking tools.
1. Provide tests for all the packages
2. Dockerize the project