Mandatory tools
Optional tools
-
API Gateway (Lua)
Used to add authentication with custom authentication plugin and only exposing search service to the world.
-
Search Service (Kotlin)
Used to fetch profile based on search criteria, in our case using only profileids. Internally uses profile services to fetch profile data and cache service for caching profile data.
-
Profile Service (NodeJS)
Used to fetch profiles from datasource
-
Cache Service (Swift)
Used to cache profiles
├── api-gateway (API Gateway Application)
├── api.md
├── assets
├── cache-service (Cache Service Application)
├── docker-compose.yml
├── docker.md (Contains helpful docker commands)
├── profile-service (Profile Service Application)
├── README.md
└── search-service (Search Service Application)
-
API Gateway
api-gateway ├── docker-entrypoint.sh ├── Dockerfile └── kong └── plugins └── demoauth ├── constants.lua ├── handler.lua (access method of the handler is the entrypoint of the plugin) ├── schema.lua (schema defines the configuration needed by this plugin) └── utils.lua
-
Cache Service
cache-service ├── cloud.yml ├── CONTRIBUTING.md ├── Dockerfile ├── Package.resolved ├── Package.swift ├── Public ├── README.md ├── Sources │ ├── App │ │ ├── app.swift │ │ ├── boot.swift │ │ ├── configure.swift │ │ ├── Controllers │ │ │ └── CacheController.swift (Controller contains logic to store cache) │ │ ├── Models │ │ │ └── Cache.swift (Cache model) │ │ └── routes.swift (Contains routes of the API) │ └── Run │ └── main.swift () └── Tests ├── AppTests │ └── AppTests.swift └── LinuxMain.swift
-
Profile Service
profile-service ├── Dockerfile ├── index.js (Contains profile server) ├── node_modules ├── package.json ├── package-lock.json └── profiles.json (Json file acting as database)
-
Search Service
search-service ├── build ├── build.gradle ├── Dockerfile ├── gradle ├── gradlew ├── gradlew.bat ├── HELP.md ├── settings.gradle └── src ├── main │ ├── kotlin │ │ └── com │ │ └── shaadi │ │ └── search │ │ ├── SearchApplication.kt (Main application) │ │ └── SearchController.kt (Contains routing and business logic) │ └── resources │ ├── application.properties (application config) │ ├── static │ └── templates └── test └── kotlin └── com └── shaadi └── search
sudo docker-compose up
- Create Service
jo url="http://search-service:8081/" name="search-service" | http POST :8001/services
- Create Route on Service
jo -d. name="search-service-route" service.id="856704f8-aced-4d2e-8207-c75b22d1def7" paths[]="/v1/search" methods[]="GET" | http POST :8001/routes
- Activate auth plugin on Search Service
jo name=demoauth | http POST :8001/services/search-service/plugin
http :8081/search?profileids=a1q1q1
http :8000/v1/search?profileids=a1q1q1 authkey:"hackfest|demo|"