👋 Summary

The goal is to create a system for uploading and processing files. It should consist of two microservices, one responsible for file uploading and retrieval (Files API), and another responsible for file processing (Processing API). Each microservice should reside in a separate main package.

📄 Files API

The Files API microservice should expose an HTTP endpoint for uploading files. Once a file is uploaded, it should be saved to the file system, and its ID should be sent to the Processing API via a RabbitMQ queue.

⚙️ Processing API

The Processing API microservice should provide functionality for processing and optimizing images. It should accept file ID from a RabbitMQ queue, reduce the image size and overwrite the file in the file system.

🤔 Evaluation criteria

  1. Functionality. The developed solution should function as described in the "Summary" section. However, if you think that you can create a solution better than described in the "Summary" section, you are welcome to do so.
  2. Code simplicity. The architecture should be simple and easy to understand, the code should be well-formatted and consistent. Usage of code formatters (like gofmt) and linters (like golangci-lint) is encouraged.