Basic project structure
parent
d956532d16
commit
0e5a46f050
@ -0,0 +1,7 @@
|
|||||||
|
test:
|
||||||
|
go test -v ./...
|
||||||
|
PHONEY: test
|
||||||
|
|
||||||
|
serve:
|
||||||
|
go run ./cmd/ratchetd/main.go
|
||||||
|
PHONEY: serve
|
@ -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.
|
|
@ -0,0 +1,21 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"git.runcible.io/learning/ratchet"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
version string
|
||||||
|
commit string
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// Propagate build information to root package to share globally
|
||||||
|
ratchet.Version = strings.TrimPrefix(version, "")
|
||||||
|
ratchet.Commit = commit
|
||||||
|
fmt.Fprintf(os.Stdout, "Version: %s\nCommit: %s\n", ratchet.Version, ratchet.Commit)
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
package main
|
@ -0,0 +1,8 @@
|
|||||||
|
package ratchet
|
||||||
|
|
||||||
|
// Build version and commit SHA.
|
||||||
|
|
||||||
|
var (
|
||||||
|
Version string
|
||||||
|
Commit string
|
||||||
|
)
|
Loading…
Reference in New Issue