2024-09-28 23:15:09 +01:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2024-10-01 01:12:12 +01:00
|
|
|
"database/sql"
|
|
|
|
"errors"
|
2024-09-28 23:15:09 +01:00
|
|
|
"fmt"
|
|
|
|
"os"
|
2024-10-01 01:12:12 +01:00
|
|
|
|
|
|
|
"codeflow.dananglin.me.uk/apollo/gator/internal/config"
|
|
|
|
"codeflow.dananglin.me.uk/apollo/gator/internal/database"
|
|
|
|
_ "github.com/lib/pq"
|
2024-09-28 23:15:09 +01:00
|
|
|
)
|
|
|
|
|
2024-10-01 01:12:12 +01:00
|
|
|
type state struct {
|
|
|
|
db *database.Queries
|
|
|
|
config *config.Config
|
|
|
|
}
|
|
|
|
|
2024-09-28 23:15:09 +01:00
|
|
|
var (
|
|
|
|
binaryVersion string
|
|
|
|
buildTime string
|
|
|
|
goVersion string
|
|
|
|
gitCommit string
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
if err := run(); err != nil {
|
|
|
|
fmt.Printf("ERROR: %v.\n", err)
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func run() error {
|
2024-10-01 01:12:12 +01:00
|
|
|
cfg, err := config.NewConfig()
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("unable to load the configuration: %w", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
db, err := sql.Open("postgres", cfg.DBConfig.URL)
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("unable to open a connection to the database: %w", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
s := state{
|
|
|
|
db: database.New(db),
|
|
|
|
config: &cfg,
|
|
|
|
}
|
|
|
|
|
|
|
|
cmds := commands{
|
|
|
|
commandMap: make(map[string]commandFunc),
|
|
|
|
}
|
|
|
|
|
|
|
|
cmds.register("login", handlerLogin)
|
|
|
|
cmds.register("register", handlerRegister)
|
|
|
|
cmds.register("reset", handlerReset)
|
|
|
|
cmds.register("users", handlerUsers)
|
|
|
|
cmds.register("agg", handlerAgg)
|
|
|
|
cmds.register("addfeed", middlewareLoggedIn(handlerAddFeed))
|
|
|
|
cmds.register("feeds", handlerFeeds)
|
|
|
|
cmds.register("follow", middlewareLoggedIn(handlerFollow))
|
|
|
|
cmds.register("unfollow", middlewareLoggedIn(handlerUnfollow))
|
|
|
|
cmds.register("following", middlewareLoggedIn(handlerFollowing))
|
|
|
|
cmds.register("browse", middlewareLoggedIn(handlerBrowse))
|
|
|
|
|
|
|
|
cmd, err := parseArgs(os.Args[1:])
|
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("unable to parse the command: %w", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return cmds.run(&s, cmd)
|
|
|
|
}
|
|
|
|
|
|
|
|
func parseArgs(args []string) (command, error) {
|
|
|
|
if len(args) == 0 {
|
|
|
|
return command{}, errors.New("no arguments given")
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(args) == 1 {
|
|
|
|
return command{
|
|
|
|
name: args[0],
|
|
|
|
args: make([]string, 0),
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
return command{
|
|
|
|
name: args[0],
|
|
|
|
args: args[1:],
|
|
|
|
}, nil
|
2024-09-28 23:15:09 +01:00
|
|
|
}
|