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:
Adrien de Peretti
2022-08-12 09:17:39 +00:00
committed by GitHub
parent cbe2b7f687
commit 79acc38a57
46 changed files with 82 additions and 115 deletions
@@ -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_(