An online IELTS exam platform powered by microservices communicating via gRPC.
This repository contains the codebase for taking IELTS exams online. The system is built using a microservices architecture, with services communicating through gRPC for efficient and scalable interactions between the components.
~/GolandProjects/examify git:[master]
tree
.
├── api-gateway
│ ├── cmd
│ │ └── main.go
│ ├── config
│ │ ├── config.go
│ │ └── config.yaml
│ ├── Dockerfile
│ ├── docs
│ │ ├── docs.go
│ │ ├── swagger.json
│ │ └── swagger.yaml
│ ├── go.mod
│ ├── go.sum
│ ├── internal
│ │ ├── grpc_clients
│ │ │ ├── auth_client.go
│ │ │ ├── ielts_client.go
│ │ │ └── user_client.go
│ │ ├── handlers
│ │ │ ├── auth_handler.go
│ │ │ ├── ielts_book_handler.go
│ │ │ ├── ielts_exam_handler.go
│ │ │ ├── init_clients.go
│ │ │ └── user_handler.go
│ │ ├── middleware
│ │ │ └── auth_middleware.go
│ │ ├── models
│ │ │ └── ielts.go
│ │ └── routes
│ │ ├── ielts_routes.go
│ │ ├── routes.go
│ │ └── user_routes.go
│ ├── proto
│ │ ├── auth.proto
│ │ ├── common.proto
│ │ ├── ielts.proto
│ │ ├── pb
│ │ │ ├── auth_grpc.pb.go
│ │ │ ├── auth.pb.go
│ │ │ ├── common.pb.go
│ │ │ ├── ielts_grpc.pb.go
│ │ │ ├── ielts.pb.go
│ │ │ ├── user_grpc.pb.go
│ │ │ └── user.pb.go
│ │ └── user.proto
│ └── utils
│ └── utils.go
├── auth-service
│ ├── cmd
│ │ └── main.go
│ ├── config
│ │ ├── config.go
│ │ └── config.yaml
│ ├── Dockerfile
│ ├── go.mod
│ ├── go.sum
│ ├── internal
│ │ ├── grpc_clients
│ │ │ └── UserClient.go
│ │ ├── repository
│ │ │ └── repository.go
│ │ ├── security
│ │ │ └── jwt.go
│ │ ├── server
│ │ │ └── server.go
│ │ ├── service
│ │ │ └── service.go
│ │ └── telegram
│ │ ├── bot.go
│ │ ├── handlers.go
│ │ └── utils.go
│ └── proto
│ ├── auth.proto
│ ├── common.proto
│ ├── pb
│ │ ├── auth_grpc.pb.go
│ │ ├── auth.pb.go
│ │ ├── common.pb.go
│ │ ├── user_grpc.pb.go
│ │ └── user.pb.go
│ └── user.proto
├── ielts-service
│ ├── cmd
│ │ └── main.go
│ ├── config
│ │ ├── config.go
│ │ └── config.yaml
│ ├── Dockerfile
│ ├── go.mod
│ ├── go.sum
│ ├── internal
│ │ ├── grpc_clients
│ │ │ ├── integration_client.go
│ │ │ └── user_client.go
│ │ ├── models
│ │ │ └── models.go
│ │ ├── repository
│ │ │ ├── db.go
│ │ │ ├── helper.go
│ │ │ └── repository.go
│ │ ├── server
│ │ │ └── server.go
│ │ ├── service
│ │ │ ├── ielts_service.go
│ │ │ └── ielts_service_test.go
│ │ └── utils
│ │ └── utils.go
│ ├── migrations
│ │ ├── ielts_service_down.sql
│ │ └── ielts_service_up.sql
│ └── proto
│ ├── common.proto
│ ├── ielts.proto
│ ├── integration.proto
│ ├── pb
│ │ ├── common.pb.go
│ │ ├── ielts_grpc.pb.go
│ │ ├── ielts.pb.go
│ │ ├── integration_grpc.pb.go
│ │ ├── integration.pb.go
│ │ ├── user_grpc.pb.go
│ │ └── user.pb.go
│ └── user.proto
├── integration-service
│ ├── cmd
│ │ └── main.go
│ ├── config
│ │ ├── config.go
│ │ └── config.yaml
│ ├── Dockerfile
│ ├── go.mod
│ ├── go.sum
│ ├── internal
│ │ ├── server
│ │ │ └── server.go
│ │ ├── service
│ │ │ ├── service.go
│ │ │ └── writing_service.go
│ │ └── utils
│ │ └── utils.go
│ ├── main.go
│ └── proto
│ ├── integration.proto
│ └── pb
│ ├── integration_grpc.pb.go
│ └── integration.pb.go
├── Makefile
├── scripts
│ ├── drop_databases.sh
│ └── setup_databases.sh
└── user-service
├── cmd
│ └── main.go
├── config
│ ├── config.go
│ └── config.yaml
├── Dockerfile
├── go.mod
├── go.sum
├── internal
│ ├── repository
│ │ ├── db.go
│ │ └── user_repository.go
│ ├── server
│ │ └── server.go
│ └── service
│ └── user_service.go
├── migrations
│ ├── user_service_down.sql
│ └── user_service_up.sql
└── proto
├── common.proto
├── pb
│ ├── common.pb.go
│ ├── user_grpc.pb.go
│ └── user.pb.go
└── user.proto
59 directories, 119 files
The project is composed of the following microservices:
- API Gateway: Routes requests to the appropriate microservices.
- Authentication Service: Manages user authentication, login, and session handling.
- IELTS Service: Core service that facilitates the exam process, including listening, reading, writing, and speaking modules.
- Integration Service: Handles third-party integrations, including AI services for automated scoring.
- User Service: Manages user data, profile information, and exam history.
- Primary Language: Go (98.9%)
- Communication Protocol: gRPC for efficient microservice-to-microservice communication.
- Containerizing Docker containers.