package model

import (
	"trading-go/common"
	"trading-go/response"
)

type Pic struct {
	Id   uint   `db:"id"`
	Name string `db:"name"`
	Url  string `db:"url"`
}

func (p *Pic) Save() error {
	db := common.DB
	sqlStr := "INSERT INTO pics(name, url) VALUES (:name, :url)"
	exec, err := db.NamedExec(sqlStr, p)
	if err != nil {
		return err
	}
	id, err := exec.LastInsertId()
	if err != nil {
		return err
	}
	p.Id = uint(id)
	return nil
}

func (p *Pic) GetAll() (pics []Pic, err error) {
	db := common.DB
	sqlStr := "SELECT * FROM pics"
	err = db.Select(&pics, sqlStr)
	return
}

func (p *Pic) Delete() error {
	db := common.DB
	sqlStr := "DELETE FROM pics WHERE id = ?"
	_, err := db.Exec(sqlStr)
	return err
}

func (p *Pic) GetPaged(page, pageSize int) (rsp response.PageResponse, err error) {
	var pics []Pic
	db := common.DB
	sqlStr := "SELECT * FROM pics LIMIT ?,?"
	rsp.Page = page
	rsp.PageSize = pageSize
	err = db.Select(&pics, sqlStr, (page-1)*pageSize, pageSize)
	rsp.Data = pics
	return
}

func (p *Pic) GetCnt() (cnt int, err error) {
	db := common.DB
	sqlStr := "SELECT COUNT(1) FROM pics"
	err = db.Get(&cnt, sqlStr)
	return
}