This is a project for applying my first intern job at Dcard Taiwan Ltd.
- One POST api for uploading url
- One GET api for redirecting to original url
- Use one of the relational databases: MySQL, PostgresSQL, SQLite
- Use one of the cache database: Redis, Memcached
- Reasonable error handling
- No need to consider auth
- Simultaneously user access handling
- Non-existent shorten URL access handling
- Using Golang Gin framework to build api
- Using postgresSQL for relational database
- Using redis for caching database
- Deploy database and backend server on Google Kubernetes Engine
- Github Actions for CI / CD
- Implement semantic versioning with git
- Deploy backend service on GKE 3-Nodes distributed systems
- Deploy databases on GKE 3-Nodes distributed systems
- Handling invalid access and simultaneously access by caching
- Automatically unit testing in CI/CD workflow using github action
- Improve CI/CD efficiency with pipeline workflow
- Automatically semantic versioning in CI/CD workflow base on git label
- DNS and proxy server configuration using cloudflare
How do I design my backend system architecture ?
How do I handle simultaneously access and non-existed-url access with cache ?
Why do I choose Gin framework and how do I handle error in it?
How do I integrate both versioning process and unit tests into CI/CD process ?
How do I implement unit tests ?
Future TODO list
- Build frontend UI with next.js and ts
- Feature: Upload video and image
- Feature: User can set password for uploaded resource