Create a GraphQL server that has one mutation (subscribeEmail) that calls the Email microservice (written either in Go or node.js) which does the following three things over gRPC a) Checks the email for format validity and validity of mail server b) stores the email in BigQuery c) sends a confirmation email through the API of [login to view URL] using an existing template. If the process is completed successfully then the mutation replies with success else replies with the appropriate error (invalid email or internal error if you fail to write in BigQuery). If you fail to send the email, you must retry later and not end up storing the email in BigQuery without sending the confirmation email. In addition, every part of the system should be scalable and able to serve many thousands of requests per second during peaks but scaling down when there are little to no requests.
In the case of node.js please use TypeScript. Linter should be used throughout. The Email microservice should have adequate tests written.