Browse Source

Membuat history login

widyarhn-dev
widyarhn 1 year ago
parent
commit
53e8ec3917
  1. 2
      .env
  2. 17
      controllers/usersController.go
  3. BIN
      go-crud.exe
  4. BIN
      go-crud.exe~
  5. 1
      main.go
  6. 3
      middleware/requireAuth.go
  7. 1
      models/recordData.go

2
.env

@ -1,3 +1,3 @@
PORT=8000 PORT=1000
SECRET=sdc87sdf6gv87df6v8sd7f6v8sdf76v8sdf7v6 SECRET=sdc87sdf6gv87df6v8sd7f6v8sdf76v8sdf7v6
DB_URL="host=dumbo.db.elephantsql.com user=yvvpeiee password=QwAhcTtiKL8j9qRyUBIqs9kNbu3O0_FB dbname=yvvpeiee port=5432 sslmode=disable" DB_URL="host=dumbo.db.elephantsql.com user=yvvpeiee password=QwAhcTtiKL8j9qRyUBIqs9kNbu3O0_FB dbname=yvvpeiee port=5432 sslmode=disable"

17
controllers/usersController.go

@ -107,8 +107,6 @@ func LogIn(c *gin.Context) {
user.LastLoginAt = time.Now() user.LastLoginAt = time.Now()
initializers.DB.Save(&user) initializers.DB.Save(&user)
updateLoginRecord(c, user.ID, time.Now())
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"sub": user.ID, "sub": user.ID,
"exp": time.Now().Add(time.Hour * 24 * 30).Unix(), "exp": time.Now().Add(time.Hour * 24 * 30).Unix(),
@ -127,8 +125,11 @@ func LogIn(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{
"token": tokenString, "token": tokenString,
}) })
updateLoginRecord(c, user.ID, time.Now())
} }
func LogOut(c *gin.Context) { func LogOut(c *gin.Context) {
c.SetCookie("Authorization", "", -1, "/", "", false, true) c.SetCookie("Authorization", "", -1, "/", "", false, true)
@ -145,6 +146,7 @@ func Validate(c *gin.Context) {
}) })
} }
func updateLoginRecord(c *gin.Context, userID uint, date time.Time) { func updateLoginRecord(c *gin.Context, userID uint, date time.Time) {
// Cari data rekap login berdasarkan tanggal // Cari data rekap login berdasarkan tanggal
var loginRecord models.LoginRecord var loginRecord models.LoginRecord
@ -158,7 +160,6 @@ func updateLoginRecord(c *gin.Context, userID uint, date time.Time) {
// Jika belum ada data rekap untuk hari ini, buat data baru // Jika belum ada data rekap untuk hari ini, buat data baru
loginRecord = models.LoginRecord{ loginRecord = models.LoginRecord{
LoginDate: date, LoginDate: date,
TotalUsers: 1,
UserIDs: fmt.Sprintf("%d", userID), UserIDs: fmt.Sprintf("%d", userID),
} }
initializers.DB.Create(&loginRecord) initializers.DB.Create(&loginRecord)
@ -166,7 +167,6 @@ func updateLoginRecord(c *gin.Context, userID uint, date time.Time) {
// Jika sudah ada data rekap, cek apakah user sudah login pada hari ini // Jika sudah ada data rekap, cek apakah user sudah login pada hari ini
if !containsInt(loginRecord.UserIDs, userID) { if !containsInt(loginRecord.UserIDs, userID) {
// Jika user belum login hari ini, tambahkan ID pengguna ke dalam array user_ids // Jika user belum login hari ini, tambahkan ID pengguna ke dalam array user_ids
loginRecord.TotalUsers++
loginRecord.UserIDs = fmt.Sprintf("%s,%d", loginRecord.UserIDs, userID) loginRecord.UserIDs = fmt.Sprintf("%s,%d", loginRecord.UserIDs, userID)
initializers.DB.Save(&loginRecord) initializers.DB.Save(&loginRecord)
} }
@ -179,10 +179,13 @@ func updateLoginRecord(c *gin.Context, userID uint, date time.Time) {
// Update login record dengan pengguna yang login pada hari ini // Update login record dengan pengguna yang login pada hari ini
loginRecord.Users = users loginRecord.Users = users
// Update jumlah pengguna (TotalUsers) saat pengguna baru melakukan login
loginRecord.TotalUsers = len(users)
initializers.DB.Save(&loginRecord) initializers.DB.Save(&loginRecord)
// Update LastLoginAt pada tabel User jika dalam satu hari user melakukan login kembali
user := models.User{}
initializers.DB.First(&user, userID)
user.LastLoginAt = date
initializers.DB.Save(&user)
} }

BIN
go-crud.exe

Binary file not shown.

BIN
go-crud.exe~

Binary file not shown.

1
main.go

@ -23,6 +23,7 @@ func main() {
r.GET("/validate", middleware.RequireAuth, controllers.Validate) r.GET("/validate", middleware.RequireAuth, controllers.Validate)
r.Use(middleware.RequireAuth) r.Use(middleware.RequireAuth)
r.POST("/logout", controllers.LogOut)
r.POST("/posts", controllers.PostsCreate) r.POST("/posts", controllers.PostsCreate)
r.PUT("/posts/:id", controllers.PostsUpdate) r.PUT("/posts/:id", controllers.PostsUpdate)
r.GET("/posts", controllers.PostsIndex) r.GET("/posts", controllers.PostsIndex)

3
middleware/requireAuth.go

@ -52,6 +52,9 @@ func RequireAuth(c *gin.Context) {
var user models.User var user models.User
initializers.DB.First(&user, claims["sub"]) initializers.DB.First(&user, claims["sub"])
var recordData models.LoginRecord
initializers.DB.First(&recordData, claims["sub"])
var post models.Post var post models.Post
initializers.DB.First(&post, claims["sub"]) initializers.DB.First(&post, claims["sub"])

1
models/loginRecord.go → models/recordData.go

@ -9,7 +9,6 @@ import (
type LoginRecord struct { type LoginRecord struct {
gorm.Model gorm.Model
LoginDate time.Time LoginDate time.Time
TotalUsers int
UserIDs string `gorm:"type:text"` UserIDs string `gorm:"type:text"`
Users []User `json:"users" gorm:"-"` Users []User `json:"users" gorm:"-"`
} }
Loading…
Cancel
Save