package main

import (
	"fmt"
	"gorm.io/gorm"
	"log"
)
import "gorm.io/driver/mysql"

type User struct {
	gorm.Model
	Name  string
	Posts []Post `gorm:"foreignkey:UserID"` //一对多
}

type Post struct {
	gorm.Model
	Title   string
	Content string
	UserID  uint
}

func createUserAndPosts(db *gorm.DB) {
	user := User{
		Name: "John Doe",
		Posts: []Post{
			{Title: "Post 1", Content: "This is the first post."},
			{Title: "Post 2", Content: "This is the second post."},
		},
	}
	result := db.Create(&user)
	if result.Error != nil {
		log.Fatal("Failed to create user and posts:", result.Error)
	}

	fmt.Println("User and posts created successfully!")
}
func queryUserAndPosts(db *gorm.DB) {
	var user User
	result := db.Preload("Posts").Take(&user, 1)
	if result.Error != nil {
		log.Fatal("Failed to query user and posts:", result.Error)
	}
	fmt.Println("User:", user)
	for _, post := range user.Posts {
		fmt.Println(post)
	}
}
func updatePost(db *gorm.DB) {
	var post Post
	db.First(&post, "user_id = ?", 1)
	post.Title = "Go From start to Ends"
	post.Content = "Go From end to start to Endsssss"
	//db.Model(&post).Update("Title", post.Title)
	//db.Model(&post).Update("Content", post.Content)
	db.Debug().Select("Title", "Content").Save(&post)
}
func main() {
	dsn := mysql.Open("root:123456@tcp(127.0.0.1:3306)/mybatis_learn?charset=utf8&parseTime=True&loc=Local")
	db, err := gorm.Open(dsn, &gorm.Config{})
	if err != nil {
		log.Println(err)
		return
	}
	err = db.AutoMigrate(&User{}, &Post{})
	if err != nil {
		log.Fatalln("Failed to migrate tables: ", err)
	}
	fmt.Println("Database migrated")
	updatePost(db)
}