From 6719e313adb60b2fbe8c73d62cbf983d073c6333 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Sat, 29 Oct 2022 17:58:08 +0300 Subject: (#18) routes & controllers for profile & user lookup --- backend/controllers/controllers.go | 74 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 2 deletions(-) (limited to 'backend/controllers/controllers.go') diff --git a/backend/controllers/controllers.go b/backend/controllers/controllers.go index 6a38e8c..712b33c 100644 --- a/backend/controllers/controllers.go +++ b/backend/controllers/controllers.go @@ -4,11 +4,13 @@ import ( "log" "net/http" "os" + "regexp" "time" "github.com/gin-gonic/gin" "github.com/golang-jwt/jwt/v4" "github.com/pektezol/leastportals/backend/database" + "github.com/pektezol/leastportals/backend/models" "github.com/solovev/steam_go" ) @@ -46,7 +48,7 @@ func Login(c *gin.Context) { } // Insert new user to database database.DB.Exec(`INSERT INTO users (steam_id, username, avatar_link, country_code, created_at, updated_at, user_type) - VALUES ($1, $2, $3, $4, $5, $6, $7)`, steamID, user.PersonaName, user.Avatar, user.LocCountryCode, time.Now().UTC(), time.Now().UTC(), 0) + VALUES ($1, $2, $3, $4, $5, $6, $7)`, steamID, user.PersonaName, user.AvatarFull, user.LocCountryCode, time.Now().UTC(), time.Now().UTC(), 0) } // Update updated_at database.DB.Exec(`UPDATE users SET updated_at = $1 WHERE steam_id = $2`, time.Now().UTC(), steamID) @@ -84,6 +86,74 @@ func Logout(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "output": "logout success", }) - //c.Redirect(http.StatusPermanentRedirect, "/") } } + +func Profile(c *gin.Context) { + // Check if user exists + user, exists := c.Get("user") + if !exists { + c.JSON(http.StatusUnauthorized, gin.H{ + "code": http.StatusUnauthorized, + "output": gin.H{ + "error": "User not logged in. Could be invalid token.", + }, + }) + } else { + user := user.(models.User) + c.JSON(http.StatusOK, gin.H{ + "code": http.StatusOK, + "output": gin.H{ + "username": user.Username, + "avatar": user.AvatarLink, + "types": user.TypeToString(), + }, + "profile": true, + }) + } +} + +func User(c *gin.Context) { + id := c.Param("id") + // Check if id is all numbers and 17 length + match, _ := regexp.MatchString("^[0-9]{17}$", id) + if !match { + c.JSON(http.StatusNotFound, gin.H{ + "code": http.StatusNotFound, + "output": gin.H{ + "error": "User not found.", + }, + }) + return + } + // Check if user exists + var targetUser models.User + database.DB.QueryRow(`SELECT * FROM users WHERE steam_id = $1;`, id).Scan( + &targetUser.SteamID, &targetUser.Username, &targetUser.AvatarLink, &targetUser.CountryCode, + &targetUser.CreatedAt, &targetUser.UpdatedAt, &targetUser.UserType) + if targetUser.SteamID == "" { + // User does not exist + c.JSON(http.StatusNotFound, gin.H{ + "code": http.StatusNotFound, + "output": gin.H{ + "error": "User not found.", + }, + }) + return + } + // Target user exists + _, exists := c.Get("user") + if exists { + c.Redirect(http.StatusFound, "/api/v1/profile") + return + } + c.JSON(http.StatusOK, gin.H{ + "code": http.StatusOK, + "output": gin.H{ + "username": targetUser.Username, + "avatar": targetUser.AvatarLink, + "types": targetUser.TypeToString(), + }, + "profile": false, + }) +} -- cgit v1.2.3