168 lines
6.5 KiB
Go
168 lines
6.5 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"furtuna-be/internal/repository/branches"
|
|
mdtrns "furtuna-be/internal/repository/midtrans"
|
|
"furtuna-be/internal/repository/orders"
|
|
"furtuna-be/internal/repository/oss"
|
|
"furtuna-be/internal/repository/partners"
|
|
"furtuna-be/internal/repository/payment"
|
|
"furtuna-be/internal/repository/products"
|
|
"furtuna-be/internal/repository/sites"
|
|
"furtuna-be/internal/repository/studios"
|
|
"furtuna-be/internal/repository/trx"
|
|
"furtuna-be/internal/repository/users"
|
|
repository "furtuna-be/internal/repository/wallet"
|
|
"github.com/golang-jwt/jwt"
|
|
"gorm.io/gorm"
|
|
|
|
"furtuna-be/config"
|
|
"furtuna-be/internal/entity"
|
|
"furtuna-be/internal/repository/auth"
|
|
"furtuna-be/internal/repository/crypto"
|
|
event "furtuna-be/internal/repository/events"
|
|
)
|
|
|
|
type RepoManagerImpl struct {
|
|
Crypto Crypto
|
|
Auth Auth
|
|
Event Event
|
|
User User
|
|
Branch Branch
|
|
Studio Studio
|
|
Product Product
|
|
Order Order
|
|
OSS OSSRepository
|
|
Partner PartnerRepository
|
|
Site SiteRepository
|
|
Trx TransactionManager
|
|
Wallet WalletRepository
|
|
Midtrans Midtrans
|
|
Payment Payment
|
|
}
|
|
|
|
func NewRepoManagerImpl(db *gorm.DB, cfg *config.Config) *RepoManagerImpl {
|
|
return &RepoManagerImpl{
|
|
Crypto: crypto.NewCrypto(cfg.Auth()),
|
|
Auth: auth.NewAuthRepository(db),
|
|
Event: event.NewEventRepo(db),
|
|
User: users.NewUserRepository(db),
|
|
Branch: branches.NewBranchRepository(db),
|
|
Studio: studios.NewStudioRepository(db),
|
|
Product: products.NewProductRepository(db),
|
|
Order: orders.NewOrderRepository(db),
|
|
OSS: oss.NewOssRepositoryImpl(cfg.OSSConfig),
|
|
Partner: partners.NewPartnerRepository(db),
|
|
Site: sites.NewSiteRepository(db),
|
|
Trx: trx.NewGormTransactionManager(db),
|
|
Wallet: repository.NewWalletRepository(db),
|
|
Midtrans: mdtrns.New(&cfg.Midtrans),
|
|
Payment: payment.NewPaymentRepository(db),
|
|
}
|
|
}
|
|
|
|
type Auth interface {
|
|
CheckExistsUserAccount(ctx context.Context, email string) (*entity.UserDB, error)
|
|
}
|
|
|
|
type Event interface {
|
|
CreateEvent(ctx context.Context, event *entity.EventDB) (*entity.EventDB, error)
|
|
UpdateEvent(ctx context.Context, event *entity.EventDB) (*entity.EventDB, error)
|
|
GetEventByID(ctx context.Context, id int64) (*entity.EventDB, error)
|
|
GetAllEvents(ctx context.Context, nameFilter string, limit, offset int) (entity.EventList, int, error)
|
|
DeleteEvent(ctx context.Context, id int64) error
|
|
}
|
|
|
|
type Crypto interface {
|
|
CompareHashAndPassword(hash string, password string) bool
|
|
ValidateWT(tokenString string) (*jwt.Token, error)
|
|
GenerateJWT(user *entity.User) (string, error)
|
|
GenerateJWTOrder(order *entity.Order) (string, error)
|
|
ValidateJWTOrder(tokenString string) (int64, int64, error)
|
|
ParseAndValidateJWT(token string) (*entity.JWTAuthClaims, error)
|
|
}
|
|
|
|
type User interface {
|
|
Create(ctx context.Context, user *entity.UserDB) (*entity.UserDB, error)
|
|
CreateWithTx(ctx context.Context, tx *gorm.DB, user *entity.UserDB) (*entity.UserDB, error)
|
|
GetAllUsers(ctx context.Context, req entity.UserSearch) (entity.UserList, int, error)
|
|
GetUserByID(ctx context.Context, id int64) (*entity.UserDB, error)
|
|
GetUserByEmail(ctx context.Context, email string) (*entity.UserDB, error)
|
|
UpdateUser(ctx context.Context, user *entity.UserDB) (*entity.UserDB, error)
|
|
}
|
|
|
|
type Branch interface {
|
|
CreateBranch(ctx context.Context, branch *entity.BranchDB) (*entity.BranchDB, error)
|
|
UpdateBranch(ctx context.Context, branch *entity.BranchDB) (*entity.BranchDB, error)
|
|
GetBranchByID(ctx context.Context, id int64) (*entity.BranchDB, error)
|
|
GetAllBranches(ctx context.Context, req entity.BranchSearch) (entity.BranchList, int, error)
|
|
DeleteBranch(ctx context.Context, id int64) error
|
|
}
|
|
|
|
type Studio interface {
|
|
CreateStudio(ctx context.Context, studio *entity.StudioDB) (*entity.StudioDB, error)
|
|
UpdateStudio(ctx context.Context, studio *entity.StudioDB) (*entity.StudioDB, error)
|
|
GetStudioByID(ctx context.Context, id int64) (*entity.StudioDB, error)
|
|
SearchStudios(ctx context.Context, req entity.StudioSearch) (entity.StudioList, int, error)
|
|
}
|
|
|
|
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)
|
|
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)
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
type OSSRepository interface {
|
|
UploadFile(ctx context.Context, fileName string, fileContent []byte) (fileUrl string, err error)
|
|
GetPublicURL(fileName string) string
|
|
}
|
|
|
|
type PartnerRepository interface {
|
|
Create(ctx context.Context, branch *entity.PartnerDB) (*entity.PartnerDB, error)
|
|
CreateWithTx(ctx context.Context, tx *gorm.DB, Partner *entity.PartnerDB) (*entity.PartnerDB, error)
|
|
Update(ctx context.Context, branch *entity.PartnerDB) (*entity.PartnerDB, error)
|
|
GetByID(ctx context.Context, id int64) (*entity.PartnerDB, error)
|
|
GetAll(ctx context.Context, req entity.PartnerSearch) (entity.PartnerList, int, error)
|
|
Delete(ctx context.Context, id int64) error
|
|
}
|
|
|
|
type SiteRepository interface {
|
|
Upsert(ctx context.Context, site *entity.Site) (*entity.Site, error)
|
|
Create(ctx context.Context, branch *entity.SiteDB) (*entity.SiteDB, error)
|
|
Update(ctx context.Context, branch *entity.SiteDB) (*entity.SiteDB, error)
|
|
GetByID(ctx context.Context, id int64) (*entity.SiteDB, error)
|
|
GetAll(ctx context.Context, req entity.SiteSearch) (entity.SiteList, int, error)
|
|
Delete(ctx context.Context, id int64) error
|
|
}
|
|
|
|
type TransactionManager interface {
|
|
Begin(ctx context.Context, opts ...*sql.TxOptions) (*gorm.DB, error)
|
|
Commit(session *gorm.DB) *gorm.DB
|
|
Rollback(session *gorm.DB) *gorm.DB
|
|
}
|
|
|
|
type WalletRepository interface {
|
|
Create(ctx context.Context, tx *gorm.DB, wallet *entity.Wallet) (*entity.Wallet, error)
|
|
}
|
|
|
|
type Midtrans interface {
|
|
CreatePayment(order entity.MidtransRequest) (*entity.MidtransResponse, error)
|
|
}
|
|
|
|
type Payment interface {
|
|
Create(ctx context.Context, payment *entity.Payment) (*entity.Payment, error)
|
|
Update(ctx context.Context, payment *entity.Payment) (*entity.Payment, error)
|
|
FindByOrderAndPartnerID(ctx context.Context, orderID, partnerID int64) (*entity.Payment, error)
|
|
}
|