Checkin time data column, checkin module

Signed-off-by: Asai Neko <sugar@sne.moe>
This commit is contained in:
2025-12-25 02:17:28 +08:00
parent ca08c997c8
commit 396ab10469
6 changed files with 22 additions and 9 deletions

View File

@@ -1,6 +1,10 @@
package data package data
import "github.com/google/uuid" import (
"time"
"github.com/google/uuid"
)
type User struct { type User struct {
Id uint `json:"id" gorm:"primarykey;autoincrement"` Id uint `json:"id" gorm:"primarykey;autoincrement"`
@@ -11,7 +15,7 @@ type User struct {
Nickname string `json:"nickname"` Nickname string `json:"nickname"`
Subtitle string `json:"subtitle"` Subtitle string `json:"subtitle"`
Avatar string `json:"avatar"` Avatar string `json:"avatar"`
Checkin bool `json:"checkin" gorm:"not null;default:false"` Checkin time.Time `json:"checkin"`
} }
func (self *User) GetByEmail(email string) error { func (self *User) GetByEmail(email string) error {
@@ -28,11 +32,11 @@ func (self *User) GetByUserId(userId string) error {
return nil return nil
} }
func (self *User) SetCheckinState(userId uuid.UUID, state bool) error { func (self *User) SetCheckinState(userId uuid.UUID, time time.Time) error {
if err := Database.Where("user_id = ?", userId).First(&self).Error; err != nil { if err := Database.Where("user_id = ?", userId).First(&self).Error; err != nil {
return err return err
} }
self.Checkin = state self.Checkin = time
Database.Save(&self) Database.Save(&self)
return nil return nil
} }

View File

@@ -62,7 +62,7 @@ func JWTAuth() gin.HandlerFunc {
} }
func GenerateToken(userID uuid.UUID, application string) (string, error) { func GenerateToken(userID uuid.UUID, application string) (string, error) {
var JwtSecret = []byte(viper.GetString("server.jwt_secret")) var JwtSecret = []byte(viper.GetString("secrets.jwt_secret"))
claims := Claims{ claims := Claims{
UserID: userID, UserID: userID,
RegisteredClaims: jwt.RegisteredClaims{ RegisteredClaims: jwt.RegisteredClaims{

View File

@@ -2,6 +2,7 @@ package server
import ( import (
"nixcn-cms/service/auth" "nixcn-cms/service/auth"
"nixcn-cms/service/checkin"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
@@ -10,4 +11,5 @@ func Router(e *gin.Engine) {
// API Services // API Services
api := e.Group("/api/v1") api := e.Group("/api/v1")
auth.Handler(api.Group("/auth")) auth.Handler(api.Group("/auth"))
checkin.Handler(api.Group("/checkin"))
} }

View File

@@ -1,12 +1,13 @@
package auth package auth
import ( import (
"net/http"
"net/url" "net/url"
"nixcn-cms/data"
"nixcn-cms/internal/crypto/jwt" "nixcn-cms/internal/crypto/jwt"
"nixcn-cms/pkgs/magiclink" "nixcn-cms/pkgs/magiclink"
"nixcn-cms/pkgs/turnstile" "nixcn-cms/pkgs/turnstile"
"github.com/google/uuid"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@@ -68,8 +69,12 @@ func VerifyMagicLink(c *gin.Context) {
} }
// Generate jwt // Generate jwt
uuid, _ := uuid.NewUUID() userInfo := new(data.User)
jwtToken, _ := jwt.GenerateToken(uuid, "application") err := userInfo.GetByEmail(email)
if err != nil {
c.JSON(http.StatusUnauthorized, gin.H{"status": "user not found"})
}
jwtToken, _ := jwt.GenerateToken(userInfo.UserId, "application")
c.JSON(200, gin.H{ c.JSON(200, gin.H{
"jwt_token": jwtToken, "jwt_token": jwtToken,

View File

@@ -3,6 +3,7 @@ package checkin
import ( import (
"net/http" "net/http"
"nixcn-cms/data" "nixcn-cms/data"
"time"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/google/uuid" "github.com/google/uuid"
@@ -17,7 +18,7 @@ func Checkin(ctx *gin.Context) {
}) })
return return
} }
data.SetCheckinState(userId.(uuid.UUID), true) data.SetCheckinState(userId.(uuid.UUID), time.Now())
ctx.JSON(http.StatusOK, gin.H{ ctx.JSON(http.StatusOK, gin.H{
"status": "success", "status": "success",
}) })

View File

@@ -8,4 +8,5 @@ import (
func Handler(r *gin.RouterGroup) { func Handler(r *gin.RouterGroup) {
r.Use(jwt.JWTAuth()) r.Use(jwt.JWTAuth())
r.POST("", Checkin)
} }