|
|
|
@ -1,3 +1,41 @@
|
|
|
|
|
# ratchet
|
|
|
|
|
# Ratchet
|
|
|
|
|
|
|
|
|
|
An example web application in Golang.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Project Structure
|
|
|
|
|
|
|
|
|
|
Loosely inspired by the organization of [WTFDial](https://github.com/benbjohnson/wtf?tab=readme-ov-file#project-structure),
|
|
|
|
|
- Application domain types reside in the project root (User, UserService, etc)
|
|
|
|
|
- Implementations of the application domain reside in the subpackages `sqlite`, `http`, etc.
|
|
|
|
|
- Everything is tied together in the `cmd` subpackages
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Application Domain
|
|
|
|
|
|
|
|
|
|
This is project is an Indie reader inspired by [Feedi](https://github.com/facundoolano/feedi).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Implementation Subpackages
|
|
|
|
|
|
|
|
|
|
The subpackages function as an adapter between our domain and the technology used to implement the domain. For example `sqlite.FeedService` implements the `ratchet.FeedService` using SQLite.
|
|
|
|
|
|
|
|
|
|
Subpackages ideally **SHOULD NOT** know about one another and **SHOULD** communicate in terms of the application domain.
|
|
|
|
|
|
|
|
|
|
A special `mock` packages can be used to create simple mocks for each application domain interface. This will allow each subpackages unit tests to share a common set of mocks so layers can be tested in isolatation.
|
|
|
|
|
|
|
|
|
|
### Binary Packages
|
|
|
|
|
|
|
|
|
|
With loosely coupledc subpackages the application is wired together in the `cmd` subpackages to produce a final binary.
|
|
|
|
|
|
|
|
|
|
The `cmd` packages are ultimately the interface between the application domain and the operator. Configuration of types and any CLI flags *SHOULD* live in these packages.
|
|
|
|
|
|
|
|
|
|
## Development
|
|
|
|
|
|
|
|
|
|
You can build `ratchet` locally by cloning the respository, then run
|
|
|
|
|
|
|
|
|
|
`make`
|
|
|
|
|
`go install ./cmd/...`
|
|
|
|
|
|
|
|
|
|
The `ratchetd` cmd binary uses Oauth so you will need to create a new Oauth App. The vlaue of the authorization callback must be the hostname and IP at which clients can access the `ratchetd` server.
|
|
|
|
|
|
|
|
|
|
An example web application in Golang.
|