The Task Management System is built with a microservices architecture, providing a scalable and maintainable solution with notification capabilities.
The system uses PostgreSQL for data persistence with the following schema:
The frontend is built with Next.js and Tailwind CSS, providing an intuitive user experience:
- API Gateway: Custom implementation in Go (Golang) with Authentication
- Frontend: TypeScript, Next.js, Tailwind CSS
- Database: PostgreSQL
- Communication: gRPC for service-to-service communication
- Containerization: Docker
- AWS: Lambda, SQS, CDK
- RESTful API
- Postgres database for persistence
- Swagger documentation
- Routes:
-
GET /api/_health - Health check route
-
POST /api/v1/auth/signin - Sign-In a user
-
POST /api/v1/auth/signup - Sign-Up a user
-
POST /api/v1/auth/refresh - Refresh access token of the user
-
POST /api/v1/auth/signout - Sign-Out a user
-
POST /api/v1/auth/forgot-password - Start forgot password flow
-
POST /api/v1/auth/reset-password - End forgot password flow
-
GET /api/v1/tasks - List all tasks
-
POST /api/v1/tasks - Create a new task
-
GET /api/v1/tasks/{id} - Get task details
-
PUT /api/v1/tasks/{id} - Update a task
-
DELETE /api/v1/tasks/{id} - Delete a task
-
GET /api/v1/notifications
-
POST /api/v1/notifications/{id}/read
-
DELETE /api/v1/notifications/{id}
-
GET /api/v1/task-system-events
-
- Event-driven communication with gRPC
- Event-driven communication with AWS SQS
- Two use cases:
- InApp notifications
- Email notifications
- Swagger - API documentation
- go-sqlite3 - SQLite driver
- uuid - UUID generation
http://localhost:3012/swagger/
- Init multi-modules
make init-multi-modules
- Install dependencies
make install
- Install Go gRPC
With brew
brew install protobuf
Or with Go
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
Then update your PATH so that the protoc compiler can find the plugins:
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.zshrc source ~/.zshrc
- Install Air to have live reload
go install github.com/air-verse/air@latest
- Start the application
make dc-start-with-build
The server will start on port :8080 by default.