Add callback and update user role

This commit is contained in:
aditya.siregar
2024-06-05 00:24:53 +07:00
parent 4d402e32c9
commit 04a89c5508
27 changed files with 388 additions and 49 deletions
+1 -1
View File
@@ -26,7 +26,7 @@ func (r *AuthRepository) CheckExistsUserAccount(ctx context.Context, email strin
err := r.db.
Table("users").
Select("users.*, user_roles.role_id, user_roles.partner_id, roles.role_name, partners.name as partner_name, partners.status as partner_status").
Select("users.*, user_roles.role_id, user_roles.partner_id, user_roles.site_id, roles.role_name, partners.name as partner_name, partners.status as partner_status").
Where("users.email = ?", email).
Joins("left join user_roles on users.id = user_roles.user_id").
Joins("left join roles on user_roles.role_id = roles.role_id").
+6
View File
@@ -51,6 +51,11 @@ func (c *CryptoImpl) GenerateJWT(user *entity.User) (string, error) {
partnerID = *user.PartnerID
}
siteID := int64(0)
if user.SiteID != nil {
siteID = *user.SiteID
}
claims := &entity.JWTAuthClaims{
StandardClaims: jwt.StandardClaims{
Subject: strconv.FormatInt(user.ID, 10),
@@ -63,6 +68,7 @@ func (c *CryptoImpl) GenerateJWT(user *entity.User) (string, error) {
Email: user.Email,
Role: int(user.RoleID),
PartnerID: partnerID,
SiteID: siteID,
}
token, err := jwt.
+25 -2
View File
@@ -24,7 +24,7 @@ func (r *OrderRepository) Create(ctx context.Context, order *entity.Order) (*ent
logger.ContextLogger(ctx).Error("error when creating order", zap.Error(err))
return nil, err
}
return order, nil
return r.FindByID(ctx, order.ID)
}
func (r *OrderRepository) UpdateStatus(ctx context.Context, orderID int64, status string) (*entity.Order, error) {
@@ -43,13 +43,36 @@ func (r *OrderRepository) UpdateStatus(ctx context.Context, orderID int64, statu
func (r *OrderRepository) FindByID(ctx context.Context, id int64) (*entity.Order, error) {
var order entity.Order
if err := r.db.WithContext(ctx).Preload("OrderItems").First(&order, id).Error; err != nil {
err := r.db.WithContext(ctx).Preload("OrderItems", func(db *gorm.DB) *gorm.DB {
return db.Preload("Product")
}).First(&order, id).Error
if err != nil {
logger.ContextLogger(ctx).Error("error when finding order by ID", zap.Error(err))
return nil, err
}
return &order, nil
}
func (r *OrderRepository) SetOrderStatus(ctx context.Context, db *gorm.DB, orderID int64, status string) error {
var order entity.Order
if err := db.WithContext(ctx).Preload("OrderItems").First(&order, orderID).Error; err != nil {
logger.ContextLogger(ctx).Error("error when finding order by ID", zap.Error(err))
return err
}
order.Status = status
if err := db.WithContext(ctx).Save(&order).Error; err != nil {
logger.ContextLogger(ctx).Error("error when updating order status", zap.Error(err))
return err
}
return nil
}
func (r *OrderRepository) Update(ctx context.Context, order *entity.Order) (*entity.Order, error) {
if err := r.db.WithContext(ctx).Save(order).Error; err != nil {
logger.ContextLogger(ctx).Error("error when updating order", zap.Error(err))
+10 -2
View File
@@ -38,6 +38,14 @@ func (r *PaymentRepository) Update(ctx context.Context, payment *entity.Payment)
return payment, nil
}
func (r *PaymentRepository) UpdateWithTx(ctx context.Context, tx *gorm.DB, payment *entity.Payment) (*entity.Payment, error) {
if err := tx.WithContext(ctx).Save(payment).Error; err != nil {
logger.ContextLogger(ctx).Error("error when updating payment", zap.Error(err))
return nil, err
}
return payment, nil
}
// FindByID retrieves a payment record by its ID
func (r *PaymentRepository) FindByID(ctx context.Context, id uuid.UUID) (*entity.Payment, error) {
payment := new(entity.Payment)
@@ -62,9 +70,9 @@ func (r *PaymentRepository) FindByOrderAndPartnerID(ctx context.Context, orderID
}
// FindByReferenceID retrieves a payment record by its reference ID
func (r *PaymentRepository) FindByReferenceID(ctx context.Context, referenceID string) (*entity.Payment, error) {
func (r *PaymentRepository) FindByReferenceID(ctx context.Context, db *gorm.DB, referenceID string) (*entity.Payment, error) {
payment := new(entity.Payment)
if err := r.db.WithContext(ctx).Where("reference_id = ?", referenceID).First(payment).Error; err != nil {
if err := db.WithContext(ctx).Where("reference_id = ?", referenceID).First(payment).Error; err != nil {
logger.ContextLogger(ctx).Error("error when finding payment by reference ID", zap.Error(err))
return nil, err
}
+10
View File
@@ -45,6 +45,16 @@ func (b *ProductRepository) GetProductByID(ctx context.Context, id int64) (*enti
return product, nil
}
func (b *ProductRepository) GetProductByPartnerIDAndSiteID(ctx context.Context, partnerID, siteID int64) (entity.ProductList, error) {
var products []*entity.ProductDB
if err := b.db.WithContext(ctx).Where("partner_id = ? AND site_id = ?", partnerID, siteID).Find(&products).Error; err != nil {
logger.ContextLogger(ctx).Error("error when finding product by partner ID and site id", zap.Error(err))
return nil, err
}
return products, nil
}
func (b *ProductRepository) GetAllProducts(ctx context.Context, req entity.ProductSearch) (entity.ProductList, int, error) {
var products []*entity.ProductDB
var total int64
+6
View File
@@ -112,6 +112,7 @@ type Product interface {
CreateProduct(ctx context.Context, product *entity.ProductDB) (*entity.ProductDB, error)
UpdateProduct(ctx context.Context, product *entity.ProductDB) (*entity.ProductDB, error)
GetProductByID(ctx context.Context, id int64) (*entity.ProductDB, error)
GetProductByPartnerIDAndSiteID(ctx context.Context, partnerID, siteID int64) (entity.ProductList, error)
GetAllProducts(ctx context.Context, req entity.ProductSearch) (entity.ProductList, int, error)
DeleteProduct(ctx context.Context, id int64) error
GetProductsByIDs(ctx context.Context, ids []int64, partnerID int64) ([]*entity.ProductDB, error)
@@ -121,6 +122,7 @@ type Order interface {
Create(ctx context.Context, order *entity.Order) (*entity.Order, error)
FindByID(ctx context.Context, id int64) (*entity.Order, error)
Update(ctx context.Context, order *entity.Order) (*entity.Order, error)
SetOrderStatus(ctx context.Context, db *gorm.DB, orderID int64, status string) error
}
type OSSRepository interface {
@@ -154,6 +156,8 @@ type TransactionManager interface {
type WalletRepository interface {
Create(ctx context.Context, tx *gorm.DB, wallet *entity.Wallet) (*entity.Wallet, error)
Update(ctx context.Context, db *gorm.DB, wallet *entity.Wallet) (*entity.Wallet, error)
GetByPartnerID(ctx context.Context, db *gorm.DB, partnerID int64) (*entity.Wallet, error)
}
type Midtrans interface {
@@ -163,5 +167,7 @@ type Midtrans interface {
type Payment interface {
Create(ctx context.Context, payment *entity.Payment) (*entity.Payment, error)
Update(ctx context.Context, payment *entity.Payment) (*entity.Payment, error)
UpdateWithTx(ctx context.Context, tx *gorm.DB, payment *entity.Payment) (*entity.Payment, error)
FindByOrderAndPartnerID(ctx context.Context, orderID, partnerID int64) (*entity.Payment, error)
FindByReferenceID(ctx context.Context, db *gorm.DB, referenceID string) (*entity.Payment, error)
}
+11 -2
View File
@@ -28,14 +28,23 @@ func (r *WalletRepository) Create(ctx context.Context, tx *gorm.DB, wallet *enti
return wallet, nil
}
func (r *WalletRepository) Update(ctx context.Context, wallet *entity.Wallet) (*entity.Wallet, error) {
if err := r.db.Save(wallet).Error; err != nil {
func (r *WalletRepository) Update(ctx context.Context, db *gorm.DB, wallet *entity.Wallet) (*entity.Wallet, error) {
if err := db.Save(wallet).Error; err != nil {
logger.ContextLogger(ctx).Error("error when updating wallet", zap.Error(err))
return nil, err
}
return wallet, nil
}
func (r *WalletRepository) GetByPartnerID(ctx context.Context, db *gorm.DB, partnerID int64) (*entity.Wallet, error) {
wallet := new(entity.Wallet)
if err := db.WithContext(ctx).Where("partner_id = ?", partnerID).First(wallet).Error; err != nil {
logger.ContextLogger(ctx).Error("error when finding wallet by partner ID", zap.Error(err))
return nil, err
}
return wallet, nil
}
func (r *WalletRepository) GetByID(ctx context.Context, id int64) (*entity.Wallet, error) {
wallet := new(entity.Wallet)
if err := r.db.First(wallet, id).Error; err != nil {