feat: add user created_at and last_login_at
This commit is contained in:
@@ -91,6 +91,7 @@ func Login(c *gin.Context) {
|
|||||||
|
|
||||||
// setup session & cookies and then return user info
|
// setup session & cookies and then return user info
|
||||||
func setupLogin(user *model.User, c *gin.Context) {
|
func setupLogin(user *model.User, c *gin.Context) {
|
||||||
|
model.UpdateUserLastLoginAt(user.Id)
|
||||||
session := sessions.Default(c)
|
session := sessions.Default(c)
|
||||||
session.Set("id", user.Id)
|
session.Set("id", user.Id)
|
||||||
session.Set("username", user.Username)
|
session.Set("username", user.Username)
|
||||||
|
|||||||
@@ -50,6 +50,8 @@ type User struct {
|
|||||||
Setting string `json:"setting" gorm:"type:text;column:setting"`
|
Setting string `json:"setting" gorm:"type:text;column:setting"`
|
||||||
Remark string `json:"remark,omitempty" gorm:"type:varchar(255)" validate:"max=255"`
|
Remark string `json:"remark,omitempty" gorm:"type:varchar(255)" validate:"max=255"`
|
||||||
StripeCustomer string `json:"stripe_customer" gorm:"type:varchar(64);column:stripe_customer;index"`
|
StripeCustomer string `json:"stripe_customer" gorm:"type:varchar(64);column:stripe_customer;index"`
|
||||||
|
CreatedAt int64 `json:"created_at" gorm:"autoCreateTime;column:created_at"`
|
||||||
|
LastLoginAt int64 `json:"last_login_at" gorm:"default:0;column:last_login_at"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) ToBaseUser() *UserBase {
|
func (user *User) ToBaseUser() *UserBase {
|
||||||
@@ -951,6 +953,12 @@ func GetRootUser() (user *User) {
|
|||||||
return user
|
return user
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func UpdateUserLastLoginAt(id int) {
|
||||||
|
if err := DB.Model(&User{}).Where("id = ?", id).Update("last_login_at", common.GetTimestamp()).Error; err != nil {
|
||||||
|
common.SysLog("failed to update user last_login_at: " + err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func UpdateUserUsedQuotaAndRequestCount(id int, quota int) {
|
func UpdateUserUsedQuotaAndRequestCount(id int, quota int) {
|
||||||
if common.BatchUpdateEnabled {
|
if common.BatchUpdateEnabled {
|
||||||
addNewRecord(BatchUpdateTypeUsedQuota, id, quota)
|
addNewRecord(BatchUpdateTypeUsedQuota, id, quota)
|
||||||
|
|||||||
@@ -29,7 +29,14 @@ import {
|
|||||||
Dropdown,
|
Dropdown,
|
||||||
} from '@douyinfe/semi-ui';
|
} from '@douyinfe/semi-ui';
|
||||||
import { IconMore } from '@douyinfe/semi-icons';
|
import { IconMore } from '@douyinfe/semi-icons';
|
||||||
import { renderGroup, renderNumber, renderQuota } from '../../../helpers';
|
import {
|
||||||
|
renderGroup,
|
||||||
|
renderNumber,
|
||||||
|
renderQuota,
|
||||||
|
timestamp2string,
|
||||||
|
} from '../../../helpers';
|
||||||
|
|
||||||
|
const renderTimestamp = (text) => (text ? timestamp2string(text) : '-');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render user role
|
* Render user role
|
||||||
@@ -350,6 +357,16 @@ export const getUsersColumns = ({
|
|||||||
dataIndex: 'invite',
|
dataIndex: 'invite',
|
||||||
render: (text, record, index) => renderInviteInfo(text, record, t),
|
render: (text, record, index) => renderInviteInfo(text, record, t),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: t('创建时间'),
|
||||||
|
dataIndex: 'created_at',
|
||||||
|
render: renderTimestamp,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t('最后登录'),
|
||||||
|
dataIndex: 'last_login_at',
|
||||||
|
render: renderTimestamp,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: '',
|
title: '',
|
||||||
dataIndex: 'operate',
|
dataIndex: 'operate',
|
||||||
|
|||||||
Reference in New Issue
Block a user