2024-01-16 16:13:06 +00:00
package mysqlkindboxreq
import (
"context"
2024-01-22 14:07:51 +00:00
"database/sql"
"errors"
2024-01-16 16:13:06 +00:00
"git.gocasts.ir/ebhomengo/niki/entity"
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
)
func ( d DB ) AddKindBoxReq ( ctx context . Context , kindBoxReq entity . KindBoxReq ) ( entity . KindBoxReq , error ) {
const op = "mysqlkindboxreq.AddKindBoxReq"
2024-05-17 20:16:28 +00:00
res , err := d . conn . Conn ( ) . ExecContext ( ctx , ` insert into kind_box_reqs(benefactor_id,kind_box_type,deliver_address_id,count_requested,deliver_refer_date,status) values (?,?,?,?,?,?) ` ,
2024-03-14 13:38:42 +00:00
kindBoxReq . BenefactorID , kindBoxReq . KindBoxType . String ( ) , kindBoxReq . DeliverAddressID , kindBoxReq . CountRequested , kindBoxReq . DeliverReferDate , kindBoxReq . Status . String ( ) )
2024-01-16 16:13:06 +00:00
if err != nil {
return entity . KindBoxReq { } , richerror . New ( op ) . WithErr ( err ) .
WithMessage ( errmsg . ErrorMsgNotFound ) . WithKind ( richerror . KindUnexpected )
}
//nolint
// err is always nil
id , _ := res . LastInsertId ( )
kindBoxReq . ID = uint ( id )
return kindBoxReq , nil
}
2024-01-22 08:14:57 +00:00
2024-02-03 05:03:58 +00:00
func ( d DB ) AcceptKindBoxReq ( ctx context . Context , kindBoxReqID , countAccepted uint ) error {
2024-01-22 08:14:57 +00:00
op := richerror . Op ( "mysqlkindboxreq.AcceptKindBoxReq" )
2024-02-03 05:03:58 +00:00
_ , err := d . conn . Conn ( ) . ExecContext ( ctx , ` update kind_box_reqs set count_accepted = ? , status = ? where id = ? ` ,
countAccepted , entity . KindBoxReqAcceptedStatus . String ( ) , kindBoxReqID )
2024-01-22 08:14:57 +00:00
if err != nil {
return richerror . New ( op ) . WithErr ( err ) .
WithMessage ( errmsg . ErrorMsgSomethingWentWrong ) . WithKind ( richerror . KindUnexpected )
}
return nil
}
2024-01-22 14:07:51 +00:00
func ( d DB ) GetByID ( ctx context . Context , id uint ) ( entity . KindBoxReq , error ) {
op := richerror . Op ( "mysqlkindboxreq.GetByID" )
2024-01-22 08:14:57 +00:00
row := d . conn . Conn ( ) . QueryRowContext ( ctx , ` select * from kind_box_reqs where id = ? ` , id )
k , err := scanKindBoxReq ( row )
if err != nil {
return entity . KindBoxReq { } , richerror . New ( op ) . WithErr ( err ) .
WithMessage ( errmsg . ErrorMsgCantScanQueryResult ) . WithKind ( richerror . KindUnexpected )
}
2024-01-22 14:07:51 +00:00
2024-01-22 08:14:57 +00:00
return k , nil
}
2024-01-22 14:07:51 +00:00
func ( d DB ) KindBoxRequestExist ( id uint ) ( bool , error ) {
op := richerror . Op ( "mysqlkindboxreq.KindBoxRequestExist" )
row := d . conn . Conn ( ) . QueryRow ( ` select * from kind_box_reqs where id = ? ` , id )
_ , sErr := scanKindBoxReq ( row )
if sErr != nil {
if errors . Is ( sErr , sql . ErrNoRows ) {
return false , nil
}
return false , richerror . New ( op ) . WithErr ( sErr ) . WithMessage ( errmsg . ErrorMsgCantScanQueryResult ) .
WithKind ( richerror . KindUnexpected ) . WithMeta ( map [ string ] any { "id" : id } )
}
return true , nil
}
2024-02-03 05:03:58 +00:00
func ( d DB ) RejectKindBoxReq ( ctx context . Context , kindBoxReqID uint , description string ) error {
2024-01-22 15:21:13 +00:00
op := richerror . Op ( "mysqlkindboxreq.RejectKindBoxReq" )
2024-02-03 05:03:58 +00:00
_ , err := d . conn . Conn ( ) . ExecContext ( ctx , ` update kind_box_reqs set description = ? , status = ? where id = ? ` ,
description , entity . KindBoxReqRejectedStatus . String ( ) , kindBoxReqID )
2024-01-22 15:21:13 +00:00
if err != nil {
return richerror . New ( op ) . WithErr ( err ) .
WithMessage ( errmsg . ErrorMsgSomethingWentWrong ) . WithKind ( richerror . KindUnexpected )
}
return nil
}
2024-01-25 15:15:53 +00:00
2024-02-03 05:03:58 +00:00
func ( d DB ) RollbackKindBoxRequestStatus ( ctx context . Context , id uint ) error {
2024-01-25 15:15:53 +00:00
op := richerror . Op ( "mysqlkindboxreq.RollbackKindBoxRequestStatus" )
2024-02-03 05:03:58 +00:00
_ , err := d . conn . Conn ( ) . ExecContext ( ctx , ` update kind_box_reqs set status = ? where id = ? ` , entity . KindBoxReqPendingStatus . String ( ) , id )
2024-01-25 15:15:53 +00:00
if err != nil {
return richerror . New ( op ) . WithErr ( err ) .
WithMessage ( errmsg . ErrorMsgSomethingWentWrong ) . WithKind ( richerror . KindUnexpected )
}
2024-01-25 17:59:18 +00:00
2024-01-25 15:15:53 +00:00
return nil
}
2024-02-19 13:45:55 +00:00
func ( d DB ) GetKindBoxReqByID ( ctx context . Context , kindBoxReqID , benefactorID uint ) ( entity . KindBoxReq , error ) {
op := richerror . Op ( "mysqlkindboxreq.GetKindBoxReqByID" )
row := d . conn . Conn ( ) . QueryRowContext ( ctx ,
"select kind_box_reqs.* from kind_box_reqs where kind_box_reqs.id = ? and kind_box_reqs.benefactor_id = ?" , kindBoxReqID , benefactorID ,
)
k , err := scanKindBoxReq ( row )
if err != nil {
2024-04-26 21:37:01 +00:00
if err == sql . ErrNoRows {
return entity . KindBoxReq { } , richerror . New ( op ) . WithErr ( err ) .
WithMessage ( errmsg . ErrorMsgNotFound ) . WithKind ( richerror . KindNotFound )
}
2024-02-19 13:45:55 +00:00
return entity . KindBoxReq { } , richerror . New ( op ) . WithErr ( err ) .
WithMessage ( errmsg . ErrorMsgCantScanQueryResult ) . WithKind ( richerror . KindUnexpected )
}
return k , nil
}