Basic project structure

main
Drew Bednar 7 days ago
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. 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.

@ -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,3 @@
module git.runcible.io/learning/ratchet
go 1.23.3

@ -0,0 +1,8 @@
package ratchet
// Build version and commit SHA.
var (
Version string
Commit string
)
Loading…
Cancel
Save