diff --git a/internal/app/handlers/auth_handler.go b/internal/app/handlers/auth_handler.go
index 2d7f1bb..b4b536b 100644
--- a/internal/app/handlers/auth_handler.go
+++ b/internal/app/handlers/auth_handler.go
@@ -46,7 +46,12 @@ func GoogleCallback(ctx *gin.Context) {
false, // TODO: True in prod
true,
)
- ctx.JSON(http.StatusOK, gin.H{"jwt": jwt, "googleUserInfo": googleUserInfo, "dbUser": dbUser})
+
+ // ctx.JSON(http.StatusOK, gin.H{"jwt": jwt, "googleUserInfo": googleUserInfo, "dbUser": dbUser})
+ _ = dbUser
+ _ = googleUserInfo
+
+ ctx.Redirect(http.StatusSeeOther, "/")
}
}
diff --git a/internal/app/handlers/page_handler.go b/internal/app/handlers/page_handler.go
index c9df28c..7f3c12c 100644
--- a/internal/app/handlers/page_handler.go
+++ b/internal/app/handlers/page_handler.go
@@ -1,7 +1,10 @@
package handlers
import (
+ "net/http"
+
"github.com/gin-gonic/gin"
+ domain "github.com/haydenhargreaves/Potion/internal/domain/server"
layouts "github.com/haydenhargreaves/Potion/internal/templates/layouts"
pages "github.com/haydenhargreaves/Potion/internal/templates/pages"
)
@@ -35,8 +38,18 @@ func CreatePage(ctx *gin.Context) {
}
func ProfilePage(ctx *gin.Context) {
+ // If not logged in, direct to the login page
+ if !domain.IsLoggedIn(ctx) {
+ ctx.Redirect(http.StatusSeeOther, "/v1/web/login")
+ return
+ }
+
+ // Else, get the user data
+ deps := ctx.MustGet("deps").(*domain.InjectedDependencies)
+ user := deps.UserService.GetAuthenicatedUser(ctx)
+
title := "Potion - Profile"
- page := pages.ProfilePage()
+ page := pages.ProfilePage(user)
ctx.HTML(200, "", layouts.AppLayout(title, page))
}
diff --git a/internal/app/service/user_service.go b/internal/app/service/user_service.go
index e3623c2..6bd52f5 100644
--- a/internal/app/service/user_service.go
+++ b/internal/app/service/user_service.go
@@ -1,6 +1,9 @@
package service
-import domain "github.com/haydenhargreaves/Potion/internal/domain/user"
+import (
+ "github.com/gin-gonic/gin"
+ domain "github.com/haydenhargreaves/Potion/internal/domain/user"
+)
// UserService implements the domain.UserService defined in the domain module.
type UserService struct {
@@ -15,3 +18,18 @@ var _ domain.UserService = (*UserService)(nil)
func NewUserService(userRepository domain.UserRepository) domain.UserService {
return &UserService{userRepository: userRepository}
}
+
+func (s *UserService) GetAuthenicatedUser(ctx *gin.Context) domain.User {
+ val, ok := ctx.Get("userId")
+ if !ok {
+ return domain.User{}
+ }
+
+ id := val.(int)
+ user, err := s.userRepository.GetUserById(id)
+ if err != nil {
+ return domain.User{}
+ }
+
+ return *user
+}
diff --git a/internal/domain/user/repository.go b/internal/domain/user/repository.go
index 42ba36a..3ab045b 100644
--- a/internal/domain/user/repository.go
+++ b/internal/domain/user/repository.go
@@ -3,4 +3,5 @@ package domain
type UserRepository interface {
CreateGoogleUser(googleUserInfo *GoogleUserInfo, googleRefreshToken string) (User, error)
GetGoogleUser(googleId string) (*User, error)
+ GetUserById(id int) (*User, error)
}
diff --git a/internal/domain/user/service.go b/internal/domain/user/service.go
index 5e13140..65359ce 100644
--- a/internal/domain/user/service.go
+++ b/internal/domain/user/service.go
@@ -1,4 +1,7 @@
package domain
+import "github.com/gin-gonic/gin"
+
type UserService interface {
+ GetAuthenicatedUser(ctx *gin.Context) User
}
diff --git a/internal/infrastructure/database/repository/user_repository.go b/internal/infrastructure/database/repository/user_repository.go
index 2634b2c..68a31d6 100644
--- a/internal/infrastructure/database/repository/user_repository.go
+++ b/internal/infrastructure/database/repository/user_repository.go
@@ -105,3 +105,39 @@ func (r *UserRepository) GetGoogleUser(googleId string) (*domain.User, error) {
return &user, nil
}
+
+func (r *UserRepository) GetUserById(id int) (*domain.User, error) {
+ tx, err := r.db.Begin()
+ if err != nil {
+ tx.Rollback()
+ return nil, err
+ }
+
+ var user domain.User
+ query := `SELECT * FROM users WHERE id = $1`
+
+ if err := tx.QueryRow(query, id).Scan(
+ &user.Id,
+ &user.GoogleId,
+ &user.Name,
+ &user.Email,
+ &user.ImageUrl,
+ &user.GoogleRefreshToken,
+ &user.Created,
+ ); err != nil {
+ // If no user was found, don't error, just return
+ if err == sql.ErrNoRows {
+ return nil, nil
+ }
+ tx.Rollback()
+ return nil, err
+ }
+
+ if err := tx.Commit(); err != nil {
+ tx.Rollback()
+ return nil, err
+ }
+
+ return &user, nil
+
+}
diff --git a/internal/templates/pages/profile.templ b/internal/templates/pages/profile.templ
index 8c38ab2..0902f75 100644
--- a/internal/templates/pages/profile.templ
+++ b/internal/templates/pages/profile.templ
@@ -1,38 +1,37 @@
package templates
import "github.com/haydenhargreaves/Potion/internal/templates/components"
+import "github.com/haydenhargreaves/Potion/internal/domain/user"
-templ userDetailsSection(name, email, url string) {
- { email } { user.Email }
-
{ name }
-
+
{ user.Name }
+