├── LICENSE ├── Makefile ├── README.md ├── application ├── app.go ├── echo.go └── router.go ├── config ├── config.go └── config.yaml ├── database ├── db.go ├── migrate │ ├── 000001_init_schema.down.sql │ └── 000001_init_schema.up.sql └── query │ ├── url.sql │ └── user.sql ├── frontend ├── .gitignore ├── README.md ├── app │ ├── auth │ │ ├── forgot-password │ │ │ └── page.tsx │ │ ├── layout.tsx │ │ ├── login │ │ │ └── page.tsx │ │ └── register │ │ │ └── page.tsx │ ├── favicon.ico │ ├── globals.css │ ├── help │ │ └── page.tsx │ ├── layout.tsx │ ├── page.tsx │ └── urls │ │ └── page.tsx ├── components.json ├── components │ ├── auth │ │ ├── forgot-password-form.tsx │ │ ├── login-form.tsx │ │ └── register-form.tsx │ ├── context.tsx │ ├── env.tsx │ ├── loading.tsx │ ├── logout.tsx │ ├── mode-toggle.tsx │ ├── nav │ │ └── navbar.tsx │ ├── own │ │ └── radio.tsx │ ├── theme-provider.tsx │ ├── token.ts │ └── ui │ │ ├── button.tsx │ │ ├── card.tsx │ │ ├── checkbox.tsx │ │ ├── dialog.tsx │ │ ├── dropdown-menu.tsx │ │ ├── form.tsx │ │ ├── input.tsx │ │ ├── label.tsx │ │ ├── pagination.tsx │ │ ├── radio-group.tsx │ │ └── table.tsx ├── eslint.config.mjs ├── hooks │ └── use-localstorage.tsx ├── lib │ ├── utils.ts │ └── validations │ │ └── auth.ts ├── next.config.ts ├── package.json ├── pnpm-lock.yaml ├── postcss.config.mjs ├── public │ ├── file.svg │ ├── globe.svg │ ├── next.svg │ ├── vercel.svg │ └── window.svg ├── tailwind.config.ts └── tsconfig.json ├── go.mod ├── go.sum ├── internal ├── api │ ├── url.go │ └── user.go ├── cache │ ├── redis.go │ ├── user.go │ └── view.go ├── model │ ├── error.go │ ├── url.go │ └── user.go ├── mw │ ├── jwt.go │ └── logger.go ├── repo │ ├── db.go │ ├── models.go │ ├── querier.go │ ├── url.sql.go │ └── user.sql.go └── service │ ├── url.go │ └── user.go ├── main.go ├── pkg ├── emailsender │ └── email.go ├── hasher │ ├── hasher_test.go │ └── password.go ├── jwt │ └── jwt.go ├── logger │ └── logger.go ├── randnum │ └── randnum.go ├── shortcode │ └── shortcode.go └── validator │ └── valid.go └── sqlc.yaml /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/LICENSE -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/Makefile -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/README.md -------------------------------------------------------------------------------- /application/app.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/application/app.go -------------------------------------------------------------------------------- /application/echo.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/application/echo.go -------------------------------------------------------------------------------- /application/router.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/application/router.go -------------------------------------------------------------------------------- /config/config.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/config/config.go -------------------------------------------------------------------------------- /config/config.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/config/config.yaml -------------------------------------------------------------------------------- /database/db.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/database/db.go -------------------------------------------------------------------------------- /database/migrate/000001_init_schema.down.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/database/migrate/000001_init_schema.down.sql -------------------------------------------------------------------------------- /database/migrate/000001_init_schema.up.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/database/migrate/000001_init_schema.up.sql -------------------------------------------------------------------------------- /database/query/url.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/database/query/url.sql -------------------------------------------------------------------------------- /database/query/user.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/database/query/user.sql -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/.gitignore -------------------------------------------------------------------------------- /frontend/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/README.md -------------------------------------------------------------------------------- /frontend/app/auth/forgot-password/page.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/app/auth/forgot-password/page.tsx -------------------------------------------------------------------------------- /frontend/app/auth/layout.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/app/auth/layout.tsx -------------------------------------------------------------------------------- /frontend/app/auth/login/page.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/app/auth/login/page.tsx -------------------------------------------------------------------------------- /frontend/app/auth/register/page.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/app/auth/register/page.tsx -------------------------------------------------------------------------------- /frontend/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/app/favicon.ico -------------------------------------------------------------------------------- /frontend/app/globals.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/app/globals.css -------------------------------------------------------------------------------- /frontend/app/help/page.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/app/help/page.tsx -------------------------------------------------------------------------------- /frontend/app/layout.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/app/layout.tsx -------------------------------------------------------------------------------- /frontend/app/page.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/app/page.tsx -------------------------------------------------------------------------------- /frontend/app/urls/page.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/app/urls/page.tsx -------------------------------------------------------------------------------- /frontend/components.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components.json -------------------------------------------------------------------------------- /frontend/components/auth/forgot-password-form.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/auth/forgot-password-form.tsx -------------------------------------------------------------------------------- /frontend/components/auth/login-form.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/auth/login-form.tsx -------------------------------------------------------------------------------- /frontend/components/auth/register-form.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/auth/register-form.tsx -------------------------------------------------------------------------------- /frontend/components/context.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/context.tsx -------------------------------------------------------------------------------- /frontend/components/env.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | export const base_url = process.env.NEXT_PUBLIC_API_URL; 3 | -------------------------------------------------------------------------------- /frontend/components/loading.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/loading.tsx -------------------------------------------------------------------------------- /frontend/components/logout.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/logout.tsx -------------------------------------------------------------------------------- /frontend/components/mode-toggle.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/mode-toggle.tsx -------------------------------------------------------------------------------- /frontend/components/nav/navbar.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/nav/navbar.tsx -------------------------------------------------------------------------------- /frontend/components/own/radio.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/own/radio.tsx -------------------------------------------------------------------------------- /frontend/components/theme-provider.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/theme-provider.tsx -------------------------------------------------------------------------------- /frontend/components/token.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/token.ts -------------------------------------------------------------------------------- /frontend/components/ui/button.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/ui/button.tsx -------------------------------------------------------------------------------- /frontend/components/ui/card.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/ui/card.tsx -------------------------------------------------------------------------------- /frontend/components/ui/checkbox.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/ui/checkbox.tsx -------------------------------------------------------------------------------- /frontend/components/ui/dialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/ui/dialog.tsx -------------------------------------------------------------------------------- /frontend/components/ui/dropdown-menu.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/ui/dropdown-menu.tsx -------------------------------------------------------------------------------- /frontend/components/ui/form.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/ui/form.tsx -------------------------------------------------------------------------------- /frontend/components/ui/input.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/ui/input.tsx -------------------------------------------------------------------------------- /frontend/components/ui/label.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/ui/label.tsx -------------------------------------------------------------------------------- /frontend/components/ui/pagination.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/ui/pagination.tsx -------------------------------------------------------------------------------- /frontend/components/ui/radio-group.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/ui/radio-group.tsx -------------------------------------------------------------------------------- /frontend/components/ui/table.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/components/ui/table.tsx -------------------------------------------------------------------------------- /frontend/eslint.config.mjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/eslint.config.mjs -------------------------------------------------------------------------------- /frontend/hooks/use-localstorage.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/hooks/use-localstorage.tsx -------------------------------------------------------------------------------- /frontend/lib/utils.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/lib/utils.ts -------------------------------------------------------------------------------- /frontend/lib/validations/auth.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/lib/validations/auth.ts -------------------------------------------------------------------------------- /frontend/next.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/next.config.ts -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/package.json -------------------------------------------------------------------------------- /frontend/pnpm-lock.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/pnpm-lock.yaml -------------------------------------------------------------------------------- /frontend/postcss.config.mjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/postcss.config.mjs -------------------------------------------------------------------------------- /frontend/public/file.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/public/file.svg -------------------------------------------------------------------------------- /frontend/public/globe.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/public/globe.svg -------------------------------------------------------------------------------- /frontend/public/next.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/public/next.svg -------------------------------------------------------------------------------- /frontend/public/vercel.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/public/vercel.svg -------------------------------------------------------------------------------- /frontend/public/window.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/public/window.svg -------------------------------------------------------------------------------- /frontend/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/tailwind.config.ts -------------------------------------------------------------------------------- /frontend/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/frontend/tsconfig.json -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/go.mod -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/go.sum -------------------------------------------------------------------------------- /internal/api/url.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/api/url.go -------------------------------------------------------------------------------- /internal/api/user.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/api/user.go -------------------------------------------------------------------------------- /internal/cache/redis.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/cache/redis.go -------------------------------------------------------------------------------- /internal/cache/user.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/cache/user.go -------------------------------------------------------------------------------- /internal/cache/view.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/cache/view.go -------------------------------------------------------------------------------- /internal/model/error.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/model/error.go -------------------------------------------------------------------------------- /internal/model/url.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/model/url.go -------------------------------------------------------------------------------- /internal/model/user.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/model/user.go -------------------------------------------------------------------------------- /internal/mw/jwt.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/mw/jwt.go -------------------------------------------------------------------------------- /internal/mw/logger.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/mw/logger.go -------------------------------------------------------------------------------- /internal/repo/db.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/repo/db.go -------------------------------------------------------------------------------- /internal/repo/models.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/repo/models.go -------------------------------------------------------------------------------- /internal/repo/querier.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/repo/querier.go -------------------------------------------------------------------------------- /internal/repo/url.sql.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/repo/url.sql.go -------------------------------------------------------------------------------- /internal/repo/user.sql.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/repo/user.sql.go -------------------------------------------------------------------------------- /internal/service/url.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/service/url.go -------------------------------------------------------------------------------- /internal/service/user.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/internal/service/user.go -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/main.go -------------------------------------------------------------------------------- /pkg/emailsender/email.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/pkg/emailsender/email.go -------------------------------------------------------------------------------- /pkg/hasher/hasher_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/pkg/hasher/hasher_test.go -------------------------------------------------------------------------------- /pkg/hasher/password.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/pkg/hasher/password.go -------------------------------------------------------------------------------- /pkg/jwt/jwt.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/pkg/jwt/jwt.go -------------------------------------------------------------------------------- /pkg/logger/logger.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/pkg/logger/logger.go -------------------------------------------------------------------------------- /pkg/randnum/randnum.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/pkg/randnum/randnum.go -------------------------------------------------------------------------------- /pkg/shortcode/shortcode.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/pkg/shortcode/shortcode.go -------------------------------------------------------------------------------- /pkg/validator/valid.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/pkg/validator/valid.go -------------------------------------------------------------------------------- /sqlc.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aeilang/urlshortener/HEAD/sqlc.yaml --------------------------------------------------------------------------------