package models import ( "log" "main/configs" ) type Tag struct { ID int `json:"id"` Name string `json:"name"` CreatedAt string `json:"created_at"` UpdatedAt string `json:"updated_at"` } func (tag *Tag) Create(name string) error { db, err := configs.GetDB() if err != nil { log.Println(err) return err } defer db.Close() stmt, err := db.Prepare("INSERT INTO tags(name, created_at, updated_at) values(?, ?, ?)") if err != nil { log.Println(err) return err } defer stmt.Close() result, err := stmt.Exec(name, tag.CreatedAt, tag.UpdatedAt) if err != nil { log.Println(err) return err } id, err := result.LastInsertId() if err != nil { return err } tag.ID = int(id) return nil } func (tag *Tag) Delete() error { db, err := configs.GetDB() if err != nil { log.Println(err) return err } defer db.Close() stmt, err := db.Prepare("DELETE FROM tags WHERE id = ?") if err != nil { log.Println(err) return err } defer stmt.Close() _, err = stmt.Exec(tag.ID) if err != nil { log.Println(err) return err } return nil } func (tag *Tag) Update(name string) error { db, err := configs.GetDB() if err != nil { log.Println(err) return err } defer db.Close() stmt, err := db.Prepare("UPDATE tags SET name = ?, updated_at = ? WHERE id = ?") if err != nil { log.Println(err) return err } defer stmt.Close() _, err = stmt.Exec(name, tag.UpdatedAt, tag.ID) if err != nil { log.Println(err) return err } return nil } func (tag *Tag) Get() error { db, err := configs.GetDB() if err != nil { log.Println(err) return err } defer db.Close() err = db.QueryRow("SELECT * FROM tags WHERE id = ?", tag.ID).Scan(&tag.ID, &tag.Name, &tag.CreatedAt, &tag.UpdatedAt) if err != nil { log.Println(err) return err } return nil } func GetTags() ([]Tag, error) { db, err := configs.GetDB() if err != nil { log.Println(err) return nil, err } defer db.Close() rows, err := db.Query("SELECT * FROM tags") if err != nil { log.Println(err) return nil, err } defer rows.Close() var tags []Tag for rows.Next() { var tag Tag err := rows.Scan(&tag.ID, &tag.Name, &tag.CreatedAt, &tag.UpdatedAt) if err != nil { log.Println(err) return nil, err } tags = append(tags, tag) } return tags, nil } func GetTag(id int) (*Tag, error) { db, err := configs.GetDB() if err != nil { log.Println(err) return nil, err } defer db.Close() row := db.QueryRow("SELECT * FROM tags WHERE id = ?", id) var tag Tag err = row.Scan(&tag.ID, &tag.Name, &tag.CreatedAt, &tag.UpdatedAt) if err != nil { log.Println(err) return nil, err } return &tag, nil } func GetTagByName(name string) (*Tag, error) { db, err := configs.GetDB() if err != nil { log.Println(err) return nil, err } defer db.Close() row := db.QueryRow("SELECT * FROM tags WHERE name = ?", name) var tag Tag err = row.Scan(&tag.ID, &tag.Name, &tag.CreatedAt, &tag.UpdatedAt) if err != nil { log.Println(err) return nil, err } return &tag, nil } func QueryTags(page, pagesize int) (list []interface{}) { db, err := configs.GetDB() if err != nil { log.Println(err) return nil } defer db.Close() rows, err := db.Query("SELECT * FROM tags LIMIT ?, ?", page, pagesize) if err != nil { log.Println(err) return nil } defer rows.Close() for rows.Next() { var tag Tag err := rows.Scan(&tag.ID, &tag.Name, &tag.CreatedAt, &tag.UpdatedAt) if err != nil { log.Println(err) return nil } list = append(list, tag) } return list } func CountTags() (count int) { db, err := configs.GetDB() if err != nil { log.Println(err) return 0 } defer db.Close() row := db.QueryRow("SELECT COUNT(*) FROM tags") err = row.Scan(&count) if err != nil { log.Println(err) return 0 } return count }