142 lines
3.2 KiB
TypeScript
142 lines
3.2 KiB
TypeScript
import Database from "@Common/databases/database";
|
|
import BaseRepository from "@Repositories/BaseRepository";
|
|
import { Service } from "typedi";
|
|
import { ESubscriptionType, Prisma, Subscriptions } from "@prisma/client";
|
|
import { Subscription } from "le-coffre-resources/dist/Admin";
|
|
|
|
@Service()
|
|
export default class SubscriptionsRepository extends BaseRepository {
|
|
constructor(private database: Database) {
|
|
super();
|
|
}
|
|
protected get model() {
|
|
return this.database.getClient().subscriptions;
|
|
}
|
|
protected get instanceDb() {
|
|
return this.database.getClient();
|
|
}
|
|
|
|
/**
|
|
* @description : Find many subscriptions
|
|
*/
|
|
public async findMany(query: Prisma.SubscriptionsFindManyArgs) {
|
|
query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows);
|
|
if (!query.include) return this.model.findMany({ ...query });
|
|
return this.model.findMany({ ...query });
|
|
}
|
|
|
|
/**
|
|
* @description : find unique subscription
|
|
*/
|
|
public async findOneByUid(uid: string, query?: Prisma.SubscriptionsInclude): Promise<Subscriptions | null> {
|
|
return this.model.findUnique({
|
|
where: {
|
|
uid: uid,
|
|
},
|
|
include: query,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* @description : Create a subscription
|
|
*/
|
|
public async create(subscription: Subscription): Promise<Subscriptions> {
|
|
if(subscription.type === "STANDARD")
|
|
{
|
|
const createArgs: Prisma.SubscriptionsCreateArgs = {
|
|
data: {
|
|
start_date: subscription.start_date,
|
|
end_date: subscription.end_date,
|
|
type: ESubscriptionType.STANDARD,
|
|
nb_seats: subscription.nb_seats!,
|
|
priceId: subscription.priceId,
|
|
office: {
|
|
connect: {
|
|
uid: subscription.office!.uid,
|
|
},
|
|
},
|
|
seats: {
|
|
create: subscription.seats!.map(seat => ({
|
|
user: {
|
|
connect: {
|
|
uid: seat.user!.uid,
|
|
},
|
|
},
|
|
})),
|
|
},
|
|
},
|
|
};
|
|
return this.model.create(createArgs);
|
|
}
|
|
else
|
|
{
|
|
const createArgs: Prisma.SubscriptionsCreateArgs = {
|
|
data: {
|
|
start_date: subscription.start_date,
|
|
end_date: subscription.end_date,
|
|
type: ESubscriptionType.UNLIMITED,
|
|
nb_seats: 0,
|
|
priceId: subscription.priceId,
|
|
office: {
|
|
connect: {
|
|
uid: subscription.office!.uid,
|
|
},
|
|
},
|
|
},
|
|
};
|
|
return this.model.create(createArgs);
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* @description : update given subscription
|
|
*/
|
|
public async update(uid: string, subscription: Subscription): Promise<Subscriptions> {
|
|
|
|
if(subscription.type === "STANDARD")
|
|
{
|
|
const updateArgs: Prisma.SubscriptionsUpdateArgs = {
|
|
where: {
|
|
uid: uid,
|
|
},
|
|
data: {
|
|
end_date: subscription.end_date,
|
|
type: ESubscriptionType.STANDARD,
|
|
nb_seats: subscription.nb_seats!,
|
|
seats: {
|
|
deleteMany: {},
|
|
create: subscription.seats!.map(seat => ({
|
|
user: {
|
|
connect: {
|
|
uid: seat.user!.uid,
|
|
},
|
|
},
|
|
})),
|
|
}
|
|
},
|
|
};
|
|
return this.model.update(updateArgs);
|
|
}
|
|
else
|
|
{
|
|
const updateArgs: Prisma.SubscriptionsUpdateArgs = {
|
|
where: {
|
|
uid: uid,
|
|
},
|
|
data: {
|
|
end_date: subscription.end_date,
|
|
type: ESubscriptionType.UNLIMITED,
|
|
nb_seats: 0,
|
|
seats: {
|
|
deleteMany: {},
|
|
},
|
|
},
|
|
};
|
|
return this.model.update(updateArgs);
|
|
}
|
|
}
|
|
|
|
|
|
}
|