55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"homelab/pkg/logger"
|
|
"homelab/pkg/mongo"
|
|
"homelab/pkg/setup"
|
|
"homelab/pkg/trace"
|
|
)
|
|
|
|
func main() {
|
|
logger.Init()
|
|
defer trace.Init(context.Background(), "users")()
|
|
|
|
db, err := mongo.Connect(context.Background())
|
|
if err != nil {
|
|
slog.Error("mongo connect", "err", err)
|
|
return
|
|
}
|
|
defer db.Close(context.Background())
|
|
|
|
h := NewHandler(db)
|
|
if err := h.SeedAdmin(context.Background()); err != nil {
|
|
slog.Error("seed admin", "err", err)
|
|
}
|
|
if err := h.SeedRoles(context.Background()); err != nil {
|
|
slog.Error("seed roles", "err", err)
|
|
}
|
|
|
|
mux := http.NewServeMux()
|
|
mux.HandleFunc("POST /register", h.Register)
|
|
mux.HandleFunc("GET /users/{id}", h.GetUser)
|
|
mux.HandleFunc("GET /users/email/{email}", h.GetUserByEmail)
|
|
mux.HandleFunc("POST /invites", h.CreateInvite)
|
|
mux.HandleFunc("POST /verify-password", h.VerifyPassword)
|
|
|
|
mux.HandleFunc("GET /admin/roles", h.AdminListRoles)
|
|
mux.HandleFunc("POST /admin/roles", h.AdminCreateRole)
|
|
mux.HandleFunc("GET /admin/roles/{id}", h.AdminGetRole)
|
|
mux.HandleFunc("PUT /admin/roles/{id}", h.AdminUpdateRole)
|
|
mux.HandleFunc("DELETE /admin/roles/{id}", h.AdminDeleteRole)
|
|
mux.HandleFunc("GET /admin/users", h.AdminListUsers)
|
|
mux.HandleFunc("POST /admin/users", h.AdminCreateUser)
|
|
mux.HandleFunc("PUT /admin/users/{id}", h.AdminUpdateUser)
|
|
mux.HandleFunc("POST /admin/invites", h.CreateInvite)
|
|
|
|
srv := setup.Default("users", mux)
|
|
if err := srv.Run(context.Background()); err != nil {
|
|
slog.Error("server exited", "err", err)
|
|
}
|
|
}
|