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() 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(tag.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() 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(tag.Name, tag.UpdatedAt, tag.ID) 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 }