{"id":15095993,"url":"https://github.com/denchenn/shorturl-maker","last_synced_at":"2025-06-20T10:34:08.830Z","repository":{"id":64304291,"uuid":"471058640","full_name":"DenChenn/shorturl-maker","owner":"DenChenn","description":"This is a demo project for Dcard, which is currently deployed on GKE.","archived":false,"fork":false,"pushed_at":"2023-08-08T05:15:08.000Z","size":89,"stargazers_count":27,"open_issues_count":0,"forks_count":8,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-14T22:12:57.916Z","etag":null,"topics":["gcp-kubernetes","gin-gonic","github-actions","golang","kubernetes","postgresql","redis","semantic-versioning","unit-testing"],"latest_commit_sha":null,"homepage":"https://dcard-api.yentingchen.me/v1/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DenChenn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-17T16:28:31.000Z","updated_at":"2024-03-25T05:37:38.000Z","dependencies_parsed_at":"2024-06-20T00:18:22.733Z","dependency_job_id":null,"html_url":"https://github.com/DenChenn/shorturl-maker","commit_stats":null,"previous_names":[],"tags_count":81,"template":false,"template_full_name":null,"purl":"pkg:github/DenChenn/shorturl-maker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DenChenn%2Fshorturl-maker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DenChenn%2Fshorturl-maker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DenChenn%2Fshorturl-maker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DenChenn%2Fshorturl-maker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DenChenn","download_url":"https://codeload.github.com/DenChenn/shorturl-maker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DenChenn%2Fshorturl-maker/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260927232,"owners_count":23083982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gcp-kubernetes","gin-gonic","github-actions","golang","kubernetes","postgresql","redis","semantic-versioning","unit-testing"],"created_at":"2024-09-25T15:44:40.792Z","updated_at":"2025-06-20T10:34:03.815Z","avatar_url":"https://github.com/DenChenn.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Overview\n![Build, Unit Testing, Versioning and Deploy ](https://github.com/SwarzChen/shorturl-maker/actions/workflows/build.yaml/badge.svg)\n![GitHub](https://img.shields.io/github/license/SwarzChen/shorturl-maker)\n![GitHub Repo stars](https://img.shields.io/github/stars/SwarzChen/shorturl-maker)\n![GitHub release (latest by date)](https://img.shields.io/github/v/release/SwarzChen/shorturl-maker)  \n\nThis is a project for applying my first intern job at **Dcard Taiwan Ltd.** 😃 !!!  \n[🔗 Backend documentation link 🔗](https://documenter.getpostman.com/view/12176709/UVypycK7)\n\n### Company Requirements\n\n- [x] One POST api for uploading url \n- [x] One GET api for redirecting to original url\n- [x] Use one of the relational databases: MySQL, PostgresSQL, SQLite\n- [x] Use one of the cache database: Redis, Memcached\n- [x] Reasonable error handling\n- [x] No need to consider auth\n- [x] Simultaneously user access handling\n- [x] Non-existent shorten URL access handling\n\n### Tech Stack\n* Using **Golang Gin** framework to build api\n* Using **postgresSQL** for relational database\n* Using **redis** for caching database\n* Deploy database and backend server on **Google Kubernetes Engine**\n* **Github Actions** for CI / CD\n* Implement **semantic versioning** with git\n\n### Features\n* Deploy backend service on **GKE 3-Nodes distributed systems**\n* Deploy databases on **GKE 3-Nodes distributed systems**\n* Handling invalid access and simultaneously access by **caching**\n* Automatically **unit testing** in CI/CD workflow using github action\n* Improve CI/CD efficiency with **pipeline workflow**\n* Automatically **semantic versioning** in CI/CD workflow base on git label\n* DNS and proxy server configuration using **cloudflare**\n\n### Detail explanation\n[How do I design my backend system architecture ?](https://medium.com/@aaaa102234/crazy-go-day-k8s-system-design-for-go-gin-redis-postgresql-957c74b4b25)  \n[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)  \n[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)  \n[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)  \n[How do I implement unit tests ?](https://medium.com/@aaaa102234/crazy-go-day-simple-golang-unit-test-implementation-73518086496e)\n\n### Future TODO list\n- [ ] Build frontend UI with next.js and ts\n- [ ] Feature: Upload video and image\n- [ ] Feature: User can set password for uploaded resource\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenchenn%2Fshorturl-maker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdenchenn%2Fshorturl-maker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenchenn%2Fshorturl-maker/lists"}