package db import ( "bytes" "amuz.es/gogs/infra/rooibos/enums" "database/sql" "strconv" "time" "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" ) var ( memberInsertQuery *sqlx.Stmt memberSelectByContactQuery *sqlx.Stmt memberSelectByIdQuery *sqlx.Stmt ) type member struct { In_Id uint64 `db:"id"` In_CreatedAt time.Time `db:"created_at"` In_UpdatedAt mysql.NullTime `db:"updated_at"` In_Contact string `db:"contact"` In_Name string `db:"name"` In_Password string `db:"password"` In_Status enums.MemberStatus `db:"status"` In_CompanySeq uint64 `db:"company_seq"` } func (member *member) Id() uint64 { return member.In_Id } func (member *member) CreatedAt() time.Time { return member.In_CreatedAt } func (member *member) UpdatedAt() *time.Time { if member.In_UpdatedAt.Valid { return &member.In_UpdatedAt.Time } else { return nil } } func (member *member) Contact() string { return member.In_Contact } func (member *member) Name() string { return member.In_Name } func (member *member) Status() enums.MemberStatus { return member.In_Status } func (member *member) CompanySeq() uint64 { return member.In_CompanySeq } func (member *member) String() string { var buffer bytes.Buffer buffer.WriteString("Member(") if member != nil { buffer.WriteString(strconv.FormatUint(member.In_Id, 10)) } else { buffer.WriteString("nil") } buffer.WriteString(")") return buffer.String() } func NewMember( id uint64, createdAt time.Time, updatedAt *time.Time, contact string, name string, password string, status enums.MemberStatus, companySeq uint64) (Member){ var updatedAtWrapped mysql.NullTime if updatedAt != nil{ updatedAtWrapped=mysql.NullTime{*updatedAt, true} } return &member{ id, createdAt, updatedAtWrapped, contact, name, password, status, companySeq, } } type Member interface { Id() uint64 CreatedAt() time.Time UpdatedAt() *time.Time Contact() string Name() string Status() enums.MemberStatus CompanySeq() uint64 String() string } func memberPrepare() { if err := tablecheck("member"); err != nil { panic(err) } if query, err := prepareSql( `INSERT INTO member ( created_at, contact, name, password, status, company_seq ) VALUES (NOW(), ?,?,?,?,?) `); err != nil { panic(err) } else { memberInsertQuery = query } if query, err := prepareSql(` select * from member where contact=? and status=? order by id desc limit 1`); err != nil { panic(err) } else { memberSelectByContactQuery = query } if query, err := prepareSql(`Select * from member where id=?`); err != nil { panic(err) } else { memberSelectByIdQuery = query } logger.Debug("Member query prepared") } func MemberFindByContactWithTx(tx *sqlx.Tx, contact string, status enums.MemberStatus) (Member, error) { obj := member{} if err := tx.Stmtx(memberSelectByContactQuery).Get(&obj, contact, status); err != nil { return nil, err } return &obj, nil } func MemberFindByContactOne(contact string, status enums.MemberStatus) (Member, error) { obj := member{} if err := memberSelectByContactQuery.Get(&obj, contact, status); err != nil { return nil, err } return &obj, nil } func MemberFindOneWithTx(tx *sqlx.Tx, pk uint64) (Member, error) { obj := member{} if err := tx.Stmtx(memberSelectByIdQuery).Get(&obj, pk); err != nil { return nil, err } return &obj, nil } func MemberFindOne(pk uint64) (Member, error) { obj := member{} if err := memberSelectByIdQuery.Get(&obj, pk); err != nil { return nil, err } return &obj, nil } func MemberInsertWithTx(tx *sqlx.Tx, contact string, name string, password string, status enums.MemberStatus, companySeq uint64) (uint64, error) { var ( err error result sql.Result pk int64 ) if result, err = tx.Stmtx(memberInsertQuery).Exec( contact, name, password, status, companySeq); err != nil { return 0, err } if pk, err = result.LastInsertId(); err != nil { return 0, err } return (uint64)(pk), nil } func MemberInsert(contact string, name string, password string, status enums.MemberStatus, companySeq uint64) (uint64, error) { var ( err error result sql.Result pk int64 ) if result, err = memberInsertQuery.Exec( contact, name, password, status, companySeq); err != nil { return 0, err } if pk, err = result.LastInsertId(); err != nil { return 0, err } return (uint64)(pk), nil }