feat(user): add createdAt field to user model
- Add createdAt field to User struct and database schema - Update all user queries to include createdAt field - Document new field in API documentation - Fix server online status flag timing
This commit is contained in:
+15
-13
@@ -14,10 +14,11 @@ import (
|
||||
var db *sql.DB
|
||||
|
||||
type User struct {
|
||||
UserID int
|
||||
Username string
|
||||
Passwd string
|
||||
Type string
|
||||
UserID int
|
||||
Username string
|
||||
Passwd string
|
||||
Type string
|
||||
CreatedAt string
|
||||
}
|
||||
|
||||
func InitDatabase(dbPath string) error {
|
||||
@@ -85,7 +86,7 @@ func AddUser(username, passwd, userType string) (int, error) { // New user regis
|
||||
return int(lastID), nil
|
||||
}
|
||||
|
||||
func RemoveUser (userID int) error {
|
||||
func RemoveUser(userID int) error {
|
||||
if !isValidInput(strconv.Itoa(userID)) {
|
||||
return errors.New("invalid input: contains illegal characters")
|
||||
}
|
||||
@@ -113,8 +114,8 @@ func GetUserByUsername(username string) (*User, error) {
|
||||
}
|
||||
|
||||
var user User
|
||||
err := db.QueryRow("SELECT userID, username, passwd, type FROM userLogin WHERE username = ?", username).
|
||||
Scan(&user.UserID, &user.Username, &user.Passwd, &user.Type)
|
||||
err := db.QueryRow("SELECT userID, username, passwd, type, createdAt FROM userLogin WHERE username = ?", username).
|
||||
Scan(&user.UserID, &user.Username, &user.Passwd, &user.Type, &user.CreatedAt)
|
||||
if err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return nil, errors.New("user not found")
|
||||
@@ -127,8 +128,8 @@ func GetUserByUsername(username string) (*User, error) {
|
||||
|
||||
func GetUserByID(userID int) (*User, error) {
|
||||
var user User
|
||||
err := db.QueryRow("SELECT userID, username, passwd, type FROM userLogin WHERE userID = ?", userID).
|
||||
Scan(&user.UserID, &user.Username, &user.Passwd, &user.Type)
|
||||
err := db.QueryRow("SELECT userID, username, passwd, type, createdAt FROM userLogin WHERE userID = ?", userID).
|
||||
Scan(&user.UserID, &user.Username, &user.Passwd, &user.Type, &user.CreatedAt)
|
||||
if err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return nil, errors.New("user not found")
|
||||
@@ -280,7 +281,8 @@ func InitUserDatabase(dbPath string) error {
|
||||
userID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
username TEXT UNIQUE NOT NULL,
|
||||
passwd TEXT NOT NULL,
|
||||
type TEXT NOT NULL DEFAULT 'visitor'
|
||||
type TEXT NOT NULL DEFAULT 'visitor',
|
||||
createdAt TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
`
|
||||
_, err = db.Exec(createTableSQL)
|
||||
@@ -292,7 +294,7 @@ func InitUserDatabase(dbPath string) error {
|
||||
}
|
||||
|
||||
func DBQueryUsers() ([]User, error) { // List all users
|
||||
rows, err := db.Query("SELECT userID, username, type FROM userLogin")
|
||||
rows, err := db.Query("SELECT userID, username, type, createdAt FROM userLogin")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to query users: %w", err)
|
||||
}
|
||||
@@ -300,7 +302,7 @@ func DBQueryUsers() ([]User, error) { // List all users
|
||||
var users []User
|
||||
for rows.Next() {
|
||||
var user User
|
||||
if err := rows.Scan(&user.UserID, &user.Username, &user.Type); err != nil {
|
||||
if err := rows.Scan(&user.UserID, &user.Username, &user.Type, &user.CreatedAt); err != nil {
|
||||
return nil, fmt.Errorf("failed to scan user: %w", err)
|
||||
}
|
||||
users = append(users, user)
|
||||
@@ -315,7 +317,7 @@ func DBQueryUsers() ([]User, error) { // List all users
|
||||
|
||||
func DBQuerySpecificUser(userID int) (User, error) { // Query user by ID
|
||||
var user User
|
||||
err := db.QueryRow("SELECT userID, username, type FROM userLogin WHERE userID = ?", userID).Scan(&user.UserID, &user.Username, &user.Type)
|
||||
err := db.QueryRow("SELECT userID, username, type, createdAt FROM userLogin WHERE userID = ?", userID).Scan(&user.UserID, &user.Username, &user.Type, &user.CreatedAt)
|
||||
if err != nil {
|
||||
return user, fmt.Errorf("failed to query user: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user