This repository holds the source to a game that I developed for fun and to help me explore different software technologies and architectures. Previously I had the game deployed at gophercache.com. It was built as a multi-page application backed by several services running on Google Kubernetes Engine. I started by implementing my own user service and authorization backend using simple UUIDs. I also developed the complete frontend with mostly vanilla HTML, CSS and Javascript. This was painful and slow, but I enjoyed what I learned from it. I decided that I wanted to make the system more testable and robust, so I started thinking about architectures that would allow me to achieve this. I experimented with an architecture demonstrated in Uncle Bob's Clean Architecture book and I also tried a ports and adapters architecture demonstrated by threedotslabs. Both architectures were very testable and clean, but I decided to continue with the ports and adapters approach since it seemed more succinct to me. The Threedots approach also involved some DDD and CQRS which interested me and I plan to continue experimenting with that. I have also done away with the custom auth and I will be using firebase for future authorization purposes. This was easy since I was already using firestore as my database. My frontend is also being rewritten in Vue as a single page application. When that is complete I will post that source as well. What I hope to achieve here is to show a fully working web application using Golang and clean architecture.
Gopher Cache is a text based game that encourages players to get outside and explore areas to solve puzzles that will lead them to a cache.
Once you login, search a game and start it you will receive an sms message with some information about the first level of the game. This will either tell you explicitly where a location is or it will give you some clues to figure out where the location is. Once you are at the location you will need to study the area in order to solve the puzzle for the current level. If you provide the wrong answer you may or may not get clues to help you solve the puzzle. Once the puzzle is solved for the current level you will either complete the game or get information for the next level. Once a game is complete there will be a hidden cache that you can access. The creator of the game will choose what the cache is.