diff --git a/packages/gorm/challenge-1-crud-operations/submissions/22-7-co/solution.go b/packages/gorm/challenge-1-crud-operations/submissions/22-7-co/solution.go new file mode 100644 index 00000000..89237473 --- /dev/null +++ b/packages/gorm/challenge-1-crud-operations/submissions/22-7-co/solution.go @@ -0,0 +1,84 @@ +package main + +import ( + "time" + + "gorm.io/driver/sqlite" + "gorm.io/gorm" +) + +// User represents a user in the system +type User struct { + ID uint `gorm:"primaryKey"` + Name string `gorm:"not null"` + Email string `gorm:"unique;not null"` + Age int `gorm:"check:age > 0"` + CreatedAt time.Time + UpdatedAt time.Time +} + +// ConnectDB establishes a connection to the SQLite database +func ConnectDB() (*gorm.DB, error) { + // TODO: Implement database connection + db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) + if err != nil { + return nil, err + } + err = db.AutoMigrate(&User{}) //自动迁移功能 + return db, err +} + +// CreateUser creates a new user in the database +func CreateUser(db *gorm.DB, user *User) error { + // TODO: Implement user creation + result := db.Create(user) + return result.Error +} + +// GetUserByID retrieves a user by their ID +func GetUserByID(db *gorm.DB, id uint) (*User, error) { + // TODO: Implement user retrieval by ID + var user User + result := db.First(&user, id) + if result.Error != nil { + return nil, result.Error + } + return &user, nil +} + +// GetAllUsers retrieves all users from the database +func GetAllUsers(db *gorm.DB) ([]User, error) { + // TODO: Implement retrieval of all users + var users []User + result := db.Find(&users) + return users, result.Error +} + +// UpdateUser updates an existing user's information +func UpdateUser(db *gorm.DB, user *User) error { + // Only update mutable fields; return error if user not found + res := db.Model(&User{}).Where("id = ?", user.ID).Updates(map[string]interface{}{ + "name": user.Name, + "age": user.Age, + }) + if res.Error != nil { + return res.Error + } + if res.RowsAffected == 0 { + return gorm.ErrRecordNotFound + } + return nil +} + +// DeleteUser removes a user from the database +func DeleteUser(db *gorm.DB, id uint) error { + // TODO: Implement user deletion + result := db.Delete(&User{}, id) + if result.Error != nil { + return result.Error + } + if result.RowsAffected == 0 { + return gorm.ErrRecordNotFound + } + return result.Error +}