1
0
Fork 0
api_skeleton/subsys/db/member.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
}