feat(medusa): Simplify the transaction base service (#2007)
**What** Simplify the transaction base service. **How** In fact, it does not need to be template and reduce the extensibility as the type is internally enforce. Now, the type is deduced by this which can be any derived class.
This commit is contained in:
@@ -4,7 +4,7 @@ import { TransactionBaseService } from "../transaction-base-service"
|
||||
|
||||
describe("TransactionBaseService", () => {
|
||||
it("should cloned the child class withTransaction", () => {
|
||||
class Child extends TransactionBaseService<Child> {
|
||||
class Child extends TransactionBaseService {
|
||||
protected manager_!: EntityManager
|
||||
protected transactionManager_!: EntityManager
|
||||
|
||||
|
||||
@@ -4,8 +4,7 @@ import { ProductExportBatchJob } from "../strategies/batch-jobs/product"
|
||||
import { BatchJobService } from "../services"
|
||||
import { BatchJob } from "../models"
|
||||
|
||||
export interface IBatchJobStrategy<T extends TransactionBaseService<never>>
|
||||
extends TransactionBaseService<T> {
|
||||
export interface IBatchJobStrategy extends TransactionBaseService {
|
||||
/**
|
||||
* Method for preparing a batch job for processing
|
||||
*/
|
||||
@@ -30,12 +29,9 @@ export interface IBatchJobStrategy<T extends TransactionBaseService<never>>
|
||||
buildTemplate(): Promise<string>
|
||||
}
|
||||
|
||||
export abstract class AbstractBatchJobStrategy<
|
||||
T extends TransactionBaseService<never, TContainer>,
|
||||
TContainer = unknown
|
||||
>
|
||||
extends TransactionBaseService<T, TContainer>
|
||||
implements IBatchJobStrategy<T>
|
||||
export abstract class AbstractBatchJobStrategy
|
||||
extends TransactionBaseService
|
||||
implements IBatchJobStrategy
|
||||
{
|
||||
static identifier: string
|
||||
static batchType: string
|
||||
@@ -113,6 +109,6 @@ export abstract class AbstractBatchJobStrategy<
|
||||
|
||||
export function isBatchJobStrategy(
|
||||
object: unknown
|
||||
): object is IBatchJobStrategy<never> {
|
||||
): object is IBatchJobStrategy {
|
||||
return object instanceof AbstractBatchJobStrategy
|
||||
}
|
||||
|
||||
@@ -30,8 +30,7 @@ export type UploadStreamDescriptorType = {
|
||||
[x: string]: unknown
|
||||
}
|
||||
|
||||
export interface IFileService<T extends TransactionBaseService<any>>
|
||||
extends TransactionBaseService<T> {
|
||||
export interface IFileService extends TransactionBaseService {
|
||||
/**
|
||||
* upload file to fileservice
|
||||
* @param file Multer file from express multipart/form-data
|
||||
@@ -69,9 +68,9 @@ export interface IFileService<T extends TransactionBaseService<any>>
|
||||
* */
|
||||
getPresignedDownloadUrl(fileData: GetUploadedFileType): Promise<string>
|
||||
}
|
||||
export abstract class AbstractFileService<T extends TransactionBaseService<any>>
|
||||
extends TransactionBaseService<T>
|
||||
implements IFileService<T>
|
||||
export abstract class AbstractFileService
|
||||
extends TransactionBaseService
|
||||
implements IFileService
|
||||
{
|
||||
abstract upload(
|
||||
fileData: Express.Multer.File
|
||||
|
||||
@@ -7,8 +7,7 @@ type ReturnedData = {
|
||||
data: Record<string, unknown>
|
||||
}
|
||||
|
||||
export interface INotificationService<T extends TransactionBaseService<never>>
|
||||
extends TransactionBaseService<T> {
|
||||
export interface INotificationService extends TransactionBaseService {
|
||||
sendNotification(
|
||||
event: string,
|
||||
data: unknown,
|
||||
@@ -22,11 +21,9 @@ export interface INotificationService<T extends TransactionBaseService<never>>
|
||||
): Promise<ReturnedData>
|
||||
}
|
||||
|
||||
export abstract class AbstractNotificationService<
|
||||
T extends TransactionBaseService<never>
|
||||
>
|
||||
extends TransactionBaseService<T>
|
||||
implements INotificationService<T>
|
||||
export abstract class AbstractNotificationService
|
||||
extends TransactionBaseService
|
||||
implements INotificationService
|
||||
{
|
||||
static identifier: string
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ export type Data = Record<string, unknown>
|
||||
export type PaymentData = Data
|
||||
export type PaymentSessionData = Data
|
||||
|
||||
export interface PaymentService<T extends TransactionBaseService<never>>
|
||||
extends TransactionBaseService<T> {
|
||||
export interface PaymentService<T extends TransactionBaseService>
|
||||
extends TransactionBaseService {
|
||||
getIdentifier(): string
|
||||
|
||||
getPaymentData(paymentSession: PaymentSession): Promise<PaymentData>
|
||||
@@ -50,10 +50,8 @@ export interface PaymentService<T extends TransactionBaseService<never>>
|
||||
getStatus(data: Data): Promise<PaymentSessionStatus>
|
||||
}
|
||||
|
||||
export abstract class AbstractPaymentService<
|
||||
T extends TransactionBaseService<never>
|
||||
>
|
||||
extends TransactionBaseService<T>
|
||||
export abstract class AbstractPaymentService<T extends TransactionBaseService>
|
||||
extends TransactionBaseService
|
||||
implements PaymentService<T>
|
||||
{
|
||||
protected constructor(container: unknown, config?: Record<string, unknown>) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { TransactionBaseService } from "./transaction-base-service"
|
||||
import { SearchService } from "medusa-interfaces"
|
||||
|
||||
export interface ISearchService<T extends TransactionBaseService<never>> {
|
||||
export interface ISearchService {
|
||||
options: Record<string, unknown>
|
||||
|
||||
/**
|
||||
@@ -72,11 +72,9 @@ export interface ISearchService<T extends TransactionBaseService<never>> {
|
||||
updateSettings(indexName: string, settings: unknown): unknown
|
||||
}
|
||||
|
||||
export abstract class AbstractSearchService<
|
||||
T extends TransactionBaseService<never>
|
||||
>
|
||||
extends TransactionBaseService<T>
|
||||
implements ISearchService<T>
|
||||
export abstract class AbstractSearchService
|
||||
extends TransactionBaseService
|
||||
implements ISearchService
|
||||
{
|
||||
abstract readonly isDefault
|
||||
protected readonly options_: Record<string, unknown>
|
||||
|
||||
@@ -1,34 +1,31 @@
|
||||
import { EntityManager } from "typeorm"
|
||||
import { IsolationLevel } from "typeorm/driver/types/IsolationLevel"
|
||||
|
||||
export abstract class TransactionBaseService<
|
||||
TChild extends TransactionBaseService<TChild, TContainer>,
|
||||
TContainer = unknown
|
||||
> {
|
||||
export abstract class TransactionBaseService {
|
||||
protected abstract manager_: EntityManager
|
||||
protected abstract transactionManager_: EntityManager | undefined
|
||||
|
||||
protected constructor(
|
||||
protected readonly container: TContainer,
|
||||
protected readonly configModule?: Record<string, unknown>
|
||||
protected readonly __container__: any,
|
||||
protected readonly __configModule__?: Record<string, unknown>
|
||||
) {}
|
||||
|
||||
withTransaction(transactionManager?: EntityManager): this | TChild {
|
||||
withTransaction(transactionManager?: EntityManager): this {
|
||||
if (!transactionManager) {
|
||||
return this
|
||||
}
|
||||
|
||||
const cloned = new (<any>this.constructor)(
|
||||
{
|
||||
...this.container,
|
||||
...this.__container__,
|
||||
manager: transactionManager,
|
||||
},
|
||||
this.configModule
|
||||
this.__configModule__
|
||||
)
|
||||
|
||||
cloned.transactionManager_ = transactionManager
|
||||
|
||||
return cloned as TChild
|
||||
return cloned
|
||||
}
|
||||
|
||||
protected shouldRetryTransaction_(
|
||||
|
||||
Reference in New Issue
Block a user