https://github.com/denchenn/shorturl-maker
This is a demo project for Dcard, which is currently deployed on GKE.
https://github.com/denchenn/shorturl-maker
gcp-kubernetes gin-gonic github-actions golang kubernetes postgresql redis semantic-versioning unit-testing
Last synced: about 1 month ago
JSON representation
This is a demo project for Dcard, which is currently deployed on GKE.
- Host: GitHub
- URL: https://github.com/denchenn/shorturl-maker
- Owner: DenChenn
- License: mit
- Created: 2022-03-17T16:28:31.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2023-08-08T05:15:08.000Z (almost 2 years ago)
- Last Synced: 2025-04-14T22:12:22.708Z (about 1 month ago)
- Topics: gcp-kubernetes, gin-gonic, github-actions, golang, kubernetes, postgresql, redis, semantic-versioning, unit-testing
- Language: Go
- Homepage: https://dcard-api.yentingchen.me/v1/
- Size: 86.9 KB
- Stars: 27
- Watchers: 3
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Overview



This is a project for applying my first intern job at **Dcard Taiwan Ltd.** 😃 !!!
[🔗 Backend documentation link 🔗](https://documenter.getpostman.com/view/12176709/UVypycK7)### Company Requirements
- [x] One POST api for uploading url
- [x] One GET api for redirecting to original url
- [x] Use one of the relational databases: MySQL, PostgresSQL, SQLite
- [x] Use one of the cache database: Redis, Memcached
- [x] Reasonable error handling
- [x] No need to consider auth
- [x] Simultaneously user access handling
- [x] Non-existent shorten URL access handling### Tech Stack
* 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### Features
* 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**### Detail explanation
[How do I design my backend system architecture ?](https://medium.com/@aaaa102234/crazy-go-day-k8s-system-design-for-go-gin-redis-postgresql-957c74b4b25)
[How do I handle simultaneously access and non-existed-url access with cache ?](https://medium.com/@aaaa102234/crazy-go-day-access-caching-go-gin-redis-58d0446e9a3a)
[Why do I choose Gin framework and how do I handle error in it?](https://medium.com/@aaaa102234/crazy-go-day-why-using-gin-for-golang-backend-9ca48ec5d855)
[How do I integrate both versioning process and unit tests into CI/CD process ?](https://medium.com/@aaaa102234/crazy-go-day-integrate-semantic-versioning-and-unit-tests-into-ci-cd-workflow-827d07495ca)
[How do I implement unit tests ?](https://medium.com/@aaaa102234/crazy-go-day-simple-golang-unit-test-implementation-73518086496e)### Future TODO list
- [ ] Build frontend UI with next.js and ts
- [ ] Feature: Upload video and image
- [ ] Feature: User can set password for uploaded resource