feat(pricing, types, utils, medusa-sdk): Pricing Module Setup + Currency (#4860)

What:

- Setups the skeleton for pricing module
- Creates service/model/repository for currency model
- Setups types
- Setups DB
- Moved some utils to a common place

RESOLVES CORE-1477
RESOLVES CORE-1476
This commit is contained in:
Riqwan Thamir
2023-08-29 21:58:34 +00:00
committed by GitHub
parent 470379e631
commit 460161a69f
70 changed files with 3022 additions and 75 deletions
@@ -0,0 +1,141 @@
import {
Context,
DAL,
FindConfig,
InternalModuleDeclaration,
JoinerServiceConfig,
PricingTypes,
} from "@medusajs/types"
import { Currency } from "@models"
import { CurrencyService } from "@services"
import {
InjectManager,
InjectTransactionManager,
MedusaContext,
} from "@medusajs/utils"
import { shouldForceTransaction } from "@medusajs/utils"
import { joinerConfig } from "../joiner-config"
type InjectedDependencies = {
baseRepository: DAL.RepositoryService
currencyService: CurrencyService<any>
}
export default class PricingModuleService<TCurrency extends Currency = Currency>
implements PricingTypes.IPricingModuleService
{
protected baseRepository_: DAL.RepositoryService
protected readonly currencyService_: CurrencyService<TCurrency>
constructor(
{ baseRepository, currencyService }: InjectedDependencies,
protected readonly moduleDeclaration: InternalModuleDeclaration
) {
this.baseRepository_ = baseRepository
this.currencyService_ = currencyService
}
__joinerConfig(): JoinerServiceConfig {
return joinerConfig
}
@InjectManager("baseRepository_")
async retrieveCurrency(
code: string,
config: FindConfig<PricingTypes.CurrencyDTO> = {},
@MedusaContext() sharedContext: Context = {}
): Promise<PricingTypes.CurrencyDTO> {
const currency = await this.currencyService_.retrieve(
code,
config,
sharedContext
)
return this.baseRepository_.serialize<PricingTypes.CurrencyDTO>(currency, {
populate: true,
})
}
@InjectManager("baseRepository_")
async listCurrencies(
filters: PricingTypes.FilterableCurrencyProps = {},
config: FindConfig<PricingTypes.CurrencyDTO> = {},
@MedusaContext() sharedContext: Context = {}
): Promise<PricingTypes.CurrencyDTO[]> {
const currencies = await this.currencyService_.list(
filters,
config,
sharedContext
)
return this.baseRepository_.serialize<PricingTypes.CurrencyDTO[]>(
currencies,
{
populate: true,
}
)
}
@InjectManager("baseRepository_")
async listAndCountCurrencies(
filters: PricingTypes.FilterableCurrencyProps = {},
config: FindConfig<PricingTypes.CurrencyDTO> = {},
@MedusaContext() sharedContext: Context = {}
): Promise<[PricingTypes.CurrencyDTO[], number]> {
const [currencies, count] = await this.currencyService_.listAndCount(
filters,
config,
sharedContext
)
return [
await this.baseRepository_.serialize<PricingTypes.CurrencyDTO[]>(
currencies,
{
populate: true,
}
),
count,
]
}
@InjectTransactionManager(shouldForceTransaction, "baseRepository_")
async createCurrencies(
data: PricingTypes.CreateCurrencyDTO[],
@MedusaContext() sharedContext: Context = {}
) {
const currencies = await this.currencyService_.create(data, sharedContext)
return this.baseRepository_.serialize<PricingTypes.CurrencyDTO[]>(
currencies,
{
populate: true,
}
)
}
@InjectTransactionManager(shouldForceTransaction, "baseRepository_")
async updateCurrencies(
data: PricingTypes.UpdateCurrencyDTO[],
@MedusaContext() sharedContext: Context = {}
) {
const currencies = await this.currencyService_.update(data, sharedContext)
return this.baseRepository_.serialize<PricingTypes.CurrencyDTO[]>(
currencies,
{
populate: true,
}
)
}
@InjectTransactionManager(shouldForceTransaction, "baseRepository_")
async deleteCurrencies(
currencyCodes: string[],
@MedusaContext() sharedContext: Context = {}
): Promise<void> {
await this.currencyService_.delete(currencyCodes, sharedContext)
}
}