diff --git a/packages/gorm/challenge-1-crud-operations/submissions/orsenthil/solution.go b/packages/gorm/challenge-1-crud-operations/submissions/orsenthil/solution.go new file mode 100644 index 00000000..9f7c2004 --- /dev/null +++ b/packages/gorm/challenge-1-crud-operations/submissions/orsenthil/solution.go @@ -0,0 +1,91 @@ +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) { + db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{}) + if err != nil { + return nil, err + } + + // Auto-migrate the User model + err = db.AutoMigrate(&User{}) + if err != nil { + return nil, err + } + + return db, nil +} + +// CreateUser creates a new user in the database +func CreateUser(db *gorm.DB, user *User) error { + result := db.Create(user) + return result.Error +} + +// GetUserByID retrieves a user by their ID +func GetUserByID(db *gorm.DB, id uint) (*User, error) { + 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) { + var users []User + result := db.Find(&users) + if result.Error != nil { + return nil, result.Error + } + return users, nil +} + +// UpdateUser updates an existing user's information +func UpdateUser(db *gorm.DB, user *User) error { + // First check if the user exists + var existingUser User + result := db.First(&existingUser, user.ID) + if result.Error != nil { + return result.Error + } + + // Now update the user + result = db.Save(user) + return result.Error +} + +// DeleteUser removes a user from the database +func DeleteUser(db *gorm.DB, id uint) error { + result := db.Delete(&User{}, id) + if result.Error != nil { + return result.Error + } + + // Check if any rows were affected + if result.RowsAffected == 0 { + return gorm.ErrRecordNotFound + } + + return nil +} + +