192 lines
4.5 KiB
Go
192 lines
4.5 KiB
Go
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
|
|
}
|