diff --git a/api/handler/errorHandlers.go b/api/handler/errorHandlers.go index a198e59..e86d144 100644 --- a/api/handler/errorHandlers.go +++ b/api/handler/errorHandlers.go @@ -17,3 +17,11 @@ func NotFoundHandler(w http.ResponseWriter, r *http.Request) { return } } + +func BadRequestHandler(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusBadRequest) + _, err := w.Write([]byte("400 Bad Request")) + if err != nil { + return + } +} diff --git a/api/handler/userHandler.go b/api/handler/userHandler.go index 111374a..9dc2506 100644 --- a/api/handler/userHandler.go +++ b/api/handler/userHandler.go @@ -2,24 +2,47 @@ package handler import ( "context" + "encoding/json" "net/http" + "portfolio-backend/database/ent" "portfolio-backend/database/query" + "strconv" ) func CreateUser(w http.ResponseWriter, r *http.Request) { - _, err := w.Write([]byte("test2")) + + var u *ent.User + + err := json.NewDecoder(r.Body).Decode(&u) if err != nil { InternalServerErrorHandler(w, r) } -} -func GetUser(w http.ResponseWriter, r *http.Request) { - user, err := query.GetUser(context.Background()) + err = query.CreateUser(context.Background(), *u) if err != nil { return } - _, err = w.Write([]byte(r.PathValue(user.Name))) + w.WriteHeader(http.StatusCreated) + _, err = w.Write([]byte("user created")) + +} + +func GetUser(w http.ResponseWriter, r *http.Request) { + + userID, err := strconv.Atoi(r.PathValue("id")) if err != nil { - InternalServerErrorHandler(w, r) + BadRequestHandler(w, r) + } + + User, err := query.GetUser(context.Background(), userID) + if err != nil { + return + } + + w.Header().Set("Content-Type", "application/json") + + err = json.NewEncoder(w).Encode(User) + if err != nil { + return } } diff --git a/database/database.go b/database/database.go index b438177..76ea172 100644 --- a/database/database.go +++ b/database/database.go @@ -23,7 +23,6 @@ func DB() { if err != nil { log.Fatalf("failed opening connection to mysql: %v", err) } - defer client.Close() // Run the auto migration tool. if err := client.Schema.Create(context.Background()); err != nil { log.Fatalf("failed creating schema resources: %v", err) diff --git a/database/query/userQuery.go b/database/query/userQuery.go index ccf2c60..406b576 100644 --- a/database/query/userQuery.go +++ b/database/query/userQuery.go @@ -9,12 +9,12 @@ import ( "portfolio-backend/database/ent/user" ) -func GetUser(ctx context.Context) (*ent.User, error) { +func GetUser(ctx context.Context, id int) (*ent.User, error) { + u, err := database.DBclient.User. Query(). - Where(user.Name("a8m")). - // `Only` fails if no user found, - // or more than 1 user returned. + Where(user.ID(id)). + WithTeams(). Only(ctx) if err != nil { return nil, fmt.Errorf("failed querying user: %w", err) @@ -22,3 +22,17 @@ func GetUser(ctx context.Context) (*ent.User, error) { log.Println("user returned: ", u) return u, nil } + +func CreateUser(ctx context.Context, User ent.User) error { + + _, err := database.DBclient.User. + Create(). + SetName(User.Name). + SetRole(User.Role). + Save(ctx) + if err != nil { + return fmt.Errorf("failed to create user: %w", err) + } + log.Println("user created: ") + return err +} diff --git a/go.sum b/go.sum index 2f60d4e..b5f681a 100644 --- a/go.sum +++ b/go.sum @@ -22,6 +22,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/hcl/v2 v2.19.1 h1://i05Jqznmb2EXqa39Nsvyan2o5XyMowW5fnCKW5RPI= github.com/hashicorp/hcl/v2 v2.19.1/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= @@ -30,14 +32,22 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/zclconf/go-cty v1.14.2 h1:kTG7lqmBou0Zkx35r6HJHUQTvaRPr5bIAf3AoHS0izI= @@ -46,5 +56,7 @@ golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= +golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index d599e5a..7abfe13 100644 --- a/main.go +++ b/main.go @@ -17,7 +17,7 @@ func main() { // Register the routes and handlers mux.HandleFunc("/", handler.CatchAllHandler) - mux.HandleFunc("POST /user}", handler.CreateUser) + mux.HandleFunc("POST /user", handler.CreateUser) mux.HandleFunc("GET /user/{id}", handler.GetUser) // Run the server