Skip to content

Commit

Permalink
timing of reduce stock and testing
Browse files Browse the repository at this point in the history
  • Loading branch information
WhatACotton committed May 24, 2024
1 parent c58850d commit 92c9011
Show file tree
Hide file tree
Showing 9 changed files with 59 additions and 56 deletions.
9 changes: 1 addition & 8 deletions internal/transaction/stripe_webhooks.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@ package transaction
import (
firebase "firebase.google.com/go/v4"
"github.com/charisworks/charisworks-backend/internal/cash"
"github.com/charisworks/charisworks-backend/internal/items"
)

type Webhook struct {
StripeUtils cash.IUtils
TransactionRepository IRepository
ItemUpdater items.IUpdater
App *firebase.App
}

Expand All @@ -25,12 +23,7 @@ func (r Webhook) PurchaseComplete(stripeTransactionId string) (transactionDetail
return transactionDetails, err
}
}
for _, i := range transactionDetails.Items {
err = r.ItemUpdater.ReduceStock(i.ItemId, i.Quantity)
if err != nil {
return transactionDetails, err
}
}

err = r.TransactionRepository.StatusUpdate(stripeTransactionId, map[string]interface{}{"status": Complete})
if err != nil {
return transactionDetails, err
Expand Down
6 changes: 6 additions & 0 deletions internal/transaction/transaction_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"time"

"github.com/charisworks/charisworks-backend/internal/cart"
"github.com/charisworks/charisworks-backend/internal/items"
"github.com/charisworks/charisworks-backend/internal/users"
"github.com/charisworks/charisworks-backend/internal/utils"
"gorm.io/gorm"
Expand All @@ -14,6 +15,7 @@ import (
type Repository struct {
DB *gorm.DB
UserRepository users.IRepository
ItemUpdater items.IUpdater
}

func (r Repository) GetList(userId string) (transactionPreviewList map[string]TransactionPreview, err error) {
Expand Down Expand Up @@ -146,6 +148,10 @@ func (r Repository) Register(userId string, email string, transactionId string,
transactionItemList = append(transactionItemList, transactionItem)
totalPrice += i.Item.Price * i.Cart.Quantity
totalAmount += i.Cart.Quantity
err = r.ItemUpdater.ReduceStock(i.Cart.ItemId, i.Cart.Quantity)
if err != nil {
return err
}
}
user, err := r.UserRepository.Get(userId)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion internal/transaction/transaction_repository_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func Test_Transaction_Repository(t *testing.T) {
manufacturerRequests := manufacturer.Requests{ManufacturerItemRepository: manufacturer.Repository{DB: db}, ManufacturerInspectPayloadUtils: manufacturer.ManufacturerUtils{}, ItemRepository: items.ItemRepository{DB: db}}
manufacturerRepository := manufacturer.Repository{DB: db, Crud: R2Conns}
cartRequests := cart.Requests{CartRepository: cart.Repository{DB: db}, CartUtils: cart.Utils{}, ItemGetStatus: items.GetStatus{DB: db}}
transactionRepository := Repository{DB: db, UserRepository: UserRepository}
transactionRepository := Repository{DB: db, UserRepository: UserRepository, ItemUpdater: items.Updater{DB: db}}
cartRepository := cart.Repository{DB: db}
Items := []manufacturer.RegisterPayload{
{
Expand Down
8 changes: 4 additions & 4 deletions internal/transaction/transaction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ func Test_Transaction(t *testing.T) {
userRequests := users.Requests{UserRepository: UserRepository, UserUtils: users.UserUtils{}}
manufacturerRequests := manufacturer.Requests{ManufacturerItemRepository: manufacturer.Repository{DB: db}, ManufacturerInspectPayloadUtils: manufacturer.ManufacturerUtils{}, ItemRepository: items.ItemRepository{DB: db}}
cartRequests := cart.Requests{CartRepository: cart.Repository{DB: db}, CartUtils: cart.Utils{}, ItemGetStatus: items.GetStatus{DB: db}}
transactionRequests := TransactionRequests{TransactionRepository: Repository{DB: db, UserRepository: UserRepository}, CartRepository: cartRequests.CartRepository, CartUtils: cartRequests.CartUtils, StripeRequests: cash.Requests{}, StripeUtils: cash.Utils{}}
webhook := Webhook{StripeUtils: cash.Utils{}, TransactionRepository: Repository{DB: db, UserRepository: UserRepository}, ItemUpdater: items.Updater{DB: db}}
transactionRequests := TransactionRequests{TransactionRepository: Repository{DB: db, UserRepository: UserRepository, ItemUpdater: items.Updater{DB: db}}, CartRepository: cartRequests.CartRepository, CartUtils: cartRequests.CartUtils, StripeRequests: cash.Requests{}, StripeUtils: cash.Utils{}}
webhook := Webhook{StripeUtils: cash.Utils{}, TransactionRepository: Repository{DB: db, UserRepository: UserRepository}}
user_data := []struct {
userId string
profile users.UserProfile
Expand Down Expand Up @@ -407,8 +407,8 @@ func Test_Transaction_Cancelled(t *testing.T) {
userRequests := users.Requests{UserRepository: UserRepository, UserUtils: users.UserUtils{}}
manufacturerRequests := manufacturer.Requests{ManufacturerItemRepository: manufacturer.Repository{DB: db}, ManufacturerInspectPayloadUtils: manufacturer.ManufacturerUtils{}, ItemRepository: items.ItemRepository{DB: db}}
cartRequests := cart.Requests{CartRepository: cart.Repository{DB: db}, CartUtils: cart.Utils{}, ItemGetStatus: items.GetStatus{DB: db}}
transactionRequests := TransactionRequests{TransactionRepository: Repository{DB: db, UserRepository: UserRepository}, CartRepository: cartRequests.CartRepository, CartUtils: cartRequests.CartUtils, StripeRequests: cash.Requests{}, StripeUtils: cash.Utils{}}
webhook := Webhook{StripeUtils: cash.Utils{}, TransactionRepository: Repository{DB: db, UserRepository: UserRepository}, ItemUpdater: items.Updater{DB: db}}
transactionRequests := TransactionRequests{TransactionRepository: Repository{DB: db, UserRepository: UserRepository, ItemUpdater: items.Updater{DB: db}}, CartRepository: cartRequests.CartRepository, CartUtils: cartRequests.CartUtils, StripeRequests: cash.Requests{}, StripeUtils: cash.Utils{}}
webhook := Webhook{StripeUtils: cash.Utils{}, TransactionRepository: Repository{DB: db, UserRepository: UserRepository}}
user_data := []struct {
userId string
profile users.UserProfile
Expand Down
5 changes: 2 additions & 3 deletions internal/users/user_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,10 @@ func (r UserRepository) RegisterAddress(UserId string, payload AddressRegisterPa
s := new(utils.Shipping)
if err := r.DB.Table("shippings").Where("id = ?", UserId).First(&s).Error; err != nil {
log.Print("DB error: ", err)
if err.Error() != string(utils.InternalErrorNotFound) {
if err.Error() != "record not found" {
log.Print("DB error: ", err)
return &utils.InternalError{Message: utils.InternalErrorDB}
}
} else {
return &utils.InternalError{Message: utils.InternalErrorInvalidUserRequest}
}
Shipping := new(utils.Shipping)
Shipping.Id = UserId
Expand Down
42 changes: 12 additions & 30 deletions internal/users/user_repository_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ func Test_UserDB_Update_Profile(t *testing.T) {
},
}
for _, tt := range Cases {
After(t)

t.Run(tt.name, func(t *testing.T) {
err := UserDB.Create(tt.userId)
if err != nil {
Expand All @@ -51,9 +53,9 @@ func Test_UserDB_Update_Profile(t *testing.T) {
if err != nil {
t.Errorf(err.Error())
}
tt.want.UserProfile.CreatedAt = User.UserProfile.CreatedAt

log.Print("got: ", User, "want: ", tt.want)
if CompareUser(User, tt.want) {
if !reflect.DeepEqual(User, tt.want) {
t.Errorf("%v,got,%v,want%v", tt.name, User, tt.want)
}
err = UserDB.UpdateProfile(tt.userId, tt.payload)
Expand All @@ -65,10 +67,9 @@ func Test_UserDB_Update_Profile(t *testing.T) {
if err != nil {
t.Errorf(err.Error())
}
tt.wantUpdated.UserProfile.CreatedAt = User.UserProfile.CreatedAt

log.Print("got: ", User, "want: ", tt.wantUpdated)

if CompareUser(User, tt.wantUpdated) {
if !reflect.DeepEqual(User, tt.wantUpdated) {
t.Errorf("%v,got,%v,want%v", tt.name, User, tt.wantUpdated)
}
err = UserDB.Delete(tt.userId)
Expand Down Expand Up @@ -147,6 +148,7 @@ func Test_UserDB_Register_Update_Address(t *testing.T) {
ZipCode: "000-0000",
Address1: "abc",
Address2: "def",
Address3: "",
PhoneNumber: "000-0000-0000",
FirstName: "適当",
FirstNameKana: "テキトウ",
Expand Down Expand Up @@ -232,6 +234,7 @@ func Test_UserDB_Register_Update_Address(t *testing.T) {
},
}
for _, tt := range Cases {
After(t)
t.Run(tt.name, func(t *testing.T) {
err := UserDB.Create(tt.userId)
if err != nil {
Expand All @@ -246,7 +249,8 @@ func Test_UserDB_Register_Update_Address(t *testing.T) {
if err != nil {
t.Errorf(err.Error())
}
if CompareUser(User, tt.want) {
tt.want.UserProfile.CreatedAt = User.UserProfile.CreatedAt
if !reflect.DeepEqual(User, tt.want) {
t.Errorf("%v,got,%v,want%v", tt.name, User, tt.want)
}
err = UserDB.UpdateAddress(tt.userId, tt.updatePayload)
Expand All @@ -258,7 +262,8 @@ func Test_UserDB_Register_Update_Address(t *testing.T) {
if err != nil {
t.Errorf(err.Error())
}
if CompareUser(User, tt.wantUpdated) {
tt.wantUpdated.UserProfile.CreatedAt = User.UserProfile.CreatedAt
if !reflect.DeepEqual(User, tt.wantUpdated) {
t.Errorf("%v,got,%v,want%v", tt.name, User, tt.wantUpdated)
}
err = UserDB.Delete(tt.userId)
Expand All @@ -269,26 +274,3 @@ func Test_UserDB_Register_Update_Address(t *testing.T) {
})
}
}

func CompareUser(got User, want User) bool {
gotUser := User{
UserId: got.UserId,
UserProfile: UserProfile{
DisplayName: got.UserProfile.DisplayName,
Description: got.UserProfile.Description,
StripeAccountId: got.UserProfile.Description,
},
UserAddress: got.UserAddress,
}
wantUser := User{
UserId: want.UserId,
UserProfile: UserProfile{
DisplayName: want.UserProfile.DisplayName,
Description: want.UserProfile.Description,
StripeAccountId: want.UserProfile.Description,
},
UserAddress: want.UserAddress,
}

return !reflect.DeepEqual(gotUser, wantUser)
}
35 changes: 29 additions & 6 deletions internal/users/user_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package users

import (
"log"
"reflect"
"testing"

"github.com/charisworks/charisworks-backend/internal/utils"
Expand Down Expand Up @@ -146,8 +148,9 @@ func TestUserCRUD(t *testing.T) {
},
},
updateAddress: UserAddress{
ZipCode: "000-0000",
Address1: "updated",
ZipCode: "000-0000",
PhoneNumber: "000-0000-0000",
Address1: "updated",
},
wantAddressUpdated: User{
UserId: "test",
Expand Down Expand Up @@ -311,6 +314,8 @@ func TestUserCRUD(t *testing.T) {
},
}
for _, tt := range Cases {
After(t)

t.Run(tt.name, func(t *testing.T) {
// create
err := UserRequests.Create(tt.userId)
Expand All @@ -324,7 +329,7 @@ func TestUserCRUD(t *testing.T) {
}

tt.want.UserProfile.CreatedAt = user.UserProfile.CreatedAt
if CompareUser(user, tt.want) {
if !reflect.DeepEqual(user, tt.want) {
t.Errorf("got: %v, want: %v", user, tt.want)
}
// update
Expand All @@ -336,7 +341,8 @@ func TestUserCRUD(t *testing.T) {
if err != nil {
t.Errorf("error")
}
if CompareUser(user, tt.wantProfileUpdated) {
tt.wantProfileUpdated.UserProfile.CreatedAt = user.UserProfile.CreatedAt
if !reflect.DeepEqual(user, tt.wantProfileUpdated) {
t.Errorf("got: %v, want: %v", user, tt.wantProfileUpdated)
}
err = UserRequests.AddressRegister(tt.userId, tt.registerAddress)
Expand All @@ -347,7 +353,8 @@ func TestUserCRUD(t *testing.T) {
if err != nil {
t.Errorf("error")
}
if CompareUser(user, tt.wantAddressRegistered) {
tt.wantAddressRegistered.UserProfile.CreatedAt = user.UserProfile.CreatedAt
if !reflect.DeepEqual(user, tt.wantAddressRegistered) {
t.Errorf("got: %v, want: %v", user, tt.wantAddressRegistered)
}
err = UserRequests.AddressUpdate(tt.userId, tt.updateAddress)
Expand All @@ -358,7 +365,9 @@ func TestUserCRUD(t *testing.T) {
if err != nil {
t.Errorf("error")
}
if CompareUser(user, tt.wantAddressUpdated) {
tt.wantAddressUpdated.UserProfile.CreatedAt = user.UserProfile.CreatedAt
log.Print(user.UserAddress.PhoneNumber)
if !reflect.DeepEqual(user, tt.wantAddressUpdated) {
t.Errorf("got: %v, want: %v", user, tt.wantAddressUpdated)
}

Expand All @@ -371,3 +380,17 @@ func TestUserCRUD(t *testing.T) {
})
}
}
func After(t *testing.T) {
db, err := utils.DBInitTest()
if err != nil {
t.Errorf("error")
}

db.Table("transactions").Where("1=1").Delete(utils.Transaction{})
db.Table("transaction_items").Where("1=1").Delete(utils.TransactionItem{})
db.Table("users").Where("1=1").Delete(utils.User{})
db.Table("shippings").Where("1=1").Delete(utils.Shipping{})
db.Table("items").Where("1=1").Delete(utils.Item{})
db.Table("carts").Where("1=1").Delete(utils.Cart{})

}
4 changes: 2 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ func main() {
userRequests := users.Requests{UserUtils: users.UserUtils{}, UserRepository: users.UserRepository{DB: db}}
manufacturerRequests := manufacturer.Requests{ManufacturerItemRepository: manufacturer.Repository{DB: db, Crud: R2Conns}, ManufacturerInspectPayloadUtils: manufacturer.ManufacturerUtils{}, ItemRepository: items.ItemRepository{DB: db}}
stripeRequests := cash.Requests{CartRequests: cartRequests, UserRequests: userRequests}
transactionRequests := transaction.TransactionRequests{TransactionRepository: transaction.Repository{DB: trdb, UserRepository: users.UserRepository{DB: db}}, CartRepository: cart.Repository{DB: db}, CartUtils: cart.Utils{}, StripeRequests: cash.Requests{CartRequests: cartRequests, UserRequests: userRequests}, StripeUtils: cash.Utils{}}
webhookRequests := transaction.Webhook{StripeUtils: cash.Utils{}, TransactionRepository: transaction.Repository{DB: trdb}, ItemUpdater: items.Updater{DB: db}, App: app.App}
transactionRequests := transaction.TransactionRequests{TransactionRepository: transaction.Repository{DB: trdb, UserRepository: users.UserRepository{DB: db}, ItemUpdater: items.Updater{DB: db}}, CartRepository: cart.Repository{DB: db}, CartUtils: cart.Utils{}, StripeRequests: cash.Requests{CartRequests: cartRequests, UserRequests: userRequests}, StripeUtils: cash.Utils{}}
webhookRequests := transaction.Webhook{StripeUtils: cash.Utils{}, TransactionRepository: transaction.Repository{DB: trdb, ItemUpdater: items.Updater{DB: db}}, App: app.App}
h.SetupRoutesForWebhook(webhookRequests, app)
h.SetupRoutesForItem(itemRequests)
h.SetupRoutesForUser(app, userRequests)
Expand Down
4 changes: 2 additions & 2 deletions test/frontE2E_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,8 +197,8 @@ func TestE2EforAfterPurchase(t *testing.T) {
userRequests := users.Requests{UserRepository: UserRepository, UserUtils: users.UserUtils{}}
manufacturerRequests := manufacturer.Requests{ManufacturerItemRepository: manufacturer.Repository{DB: db}, ManufacturerInspectPayloadUtils: manufacturer.ManufacturerUtils{}, ItemRepository: items.ItemRepository{DB: db}}
cartRequests := cart.Requests{CartRepository: cart.Repository{DB: db}, CartUtils: cart.Utils{}, ItemGetStatus: items.GetStatus{DB: db}}
transactionRequests := transaction.TransactionRequests{TransactionRepository: transaction.Repository{DB: db, UserRepository: UserRepository}, CartRepository: cart.Repository{DB: db}, CartUtils: cart.Utils{}, StripeRequests: cash.Requests{CartRequests: cartRequests, UserRequests: userRequests}, StripeUtils: cash.Utils{}}
webhook := transaction.Webhook{StripeUtils: cash.Utils{}, TransactionRepository: transaction.Repository{DB: db, UserRepository: UserRepository}, ItemUpdater: items.Updater{DB: db}}
transactionRequests := transaction.TransactionRequests{TransactionRepository: transaction.Repository{DB: db, UserRepository: UserRepository, ItemUpdater: items.Updater{DB: db}}, CartRepository: cart.Repository{DB: db}, CartUtils: cart.Utils{}, StripeRequests: cash.Requests{CartRequests: cartRequests, UserRequests: userRequests}, StripeUtils: cash.Utils{}}
webhook := transaction.Webhook{StripeUtils: cash.Utils{}, TransactionRepository: transaction.Repository{DB: db, UserRepository: UserRepository}}

user_data := []struct {
userId string
Expand Down

0 comments on commit 92c9011

Please sign in to comment.