WIP
This commit is contained in:
parent
1bcb1dca6f
commit
0c8cee8b4c
47
src/app/api/admin/SubscriptionsController.ts
Normal file
47
src/app/api/admin/SubscriptionsController.ts
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import { Controller, Get } from "@ControllerPattern/index";
|
||||||
|
import { Response, Request } from "express";
|
||||||
|
import ApiController from "@Common/system/controller-pattern/ApiController";
|
||||||
|
import { Service } from "typedi";
|
||||||
|
import authHandler from "@App/middlewares/AuthHandler";
|
||||||
|
import roleHandler from "@App/middlewares/RolesHandler";
|
||||||
|
import ruleHandler from "@App/middlewares/RulesHandler";
|
||||||
|
import { Prisma } from "@prisma/client";
|
||||||
|
import SubscriptionsService from "@Services/admin/SubscriptionsService/SubscriptionsService.ts";
|
||||||
|
|
||||||
|
@Controller()
|
||||||
|
@Service()
|
||||||
|
export default class SubscriptionsController extends ApiController {
|
||||||
|
constructor(private subscriptionsService: SubscriptionsService) {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description Get all subscriptions
|
||||||
|
*/
|
||||||
|
@Get("/api/v1/admin/subscriptions", [authHandler, roleHandler, ruleHandler])
|
||||||
|
protected async get(req: Request, response: Response) {
|
||||||
|
try {
|
||||||
|
//get query
|
||||||
|
let query: Prisma.SubscriptionsFindManyArgs = {};
|
||||||
|
if (req.query["q"]) {
|
||||||
|
query = JSON.parse(req.query["q"] as string);
|
||||||
|
if (query.where?.uid) {
|
||||||
|
this.httpBadRequest(response, "You can't filter by uid");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//call service to get prisma entity
|
||||||
|
const subscriptionsEntities = await this.subscriptionsService.get(query);
|
||||||
|
|
||||||
|
//Hydrate ressource with prisma entity
|
||||||
|
// const subscriptions = Subscription.hydrateArray<Subscription>(subscriptionsEntities, { strategy: "excludeAll" });
|
||||||
|
|
||||||
|
//success
|
||||||
|
this.httpSuccess(response);
|
||||||
|
} catch (error) {
|
||||||
|
this.httpInternalError(response, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "subscriptions" (
|
||||||
|
"uid" TEXT NOT NULL,
|
||||||
|
"start_date" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"end_date" TIMESTAMP(3),
|
||||||
|
"nb_seats" INTEGER NOT NULL,
|
||||||
|
"office_uid" VARCHAR(255) NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "subscriptions_pkey" PRIMARY KEY ("uid")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "seats" (
|
||||||
|
"uid" TEXT NOT NULL,
|
||||||
|
"subscription_uid" VARCHAR(255) NOT NULL,
|
||||||
|
"user_uid" VARCHAR(255) NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "seats_pkey" PRIMARY KEY ("uid")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "subscriptions_uid_key" ON "subscriptions"("uid");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "seats_uid_key" ON "seats"("uid");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "subscriptions" ADD CONSTRAINT "subscriptions_office_uid_fkey" FOREIGN KEY ("office_uid") REFERENCES "offices"("uid") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "seats" ADD CONSTRAINT "seats_subscription_uid_fkey" FOREIGN KEY ("subscription_uid") REFERENCES "subscriptions"("uid") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "seats" ADD CONSTRAINT "seats_user_uid_fkey" FOREIGN KEY ("user_uid") REFERENCES "users"("uid") ON DELETE CASCADE ON UPDATE CASCADE;
|
@ -68,6 +68,7 @@ model Users {
|
|||||||
appointment Appointments[]
|
appointment Appointments[]
|
||||||
votes Votes[]
|
votes Votes[]
|
||||||
user_notifications UserNotifications[]
|
user_notifications UserNotifications[]
|
||||||
|
seats Seats[]
|
||||||
|
|
||||||
@@map("users")
|
@@map("users")
|
||||||
}
|
}
|
||||||
@ -108,6 +109,7 @@ model Offices {
|
|||||||
office_folders OfficeFolders[]
|
office_folders OfficeFolders[]
|
||||||
document_types DocumentTypes[]
|
document_types DocumentTypes[]
|
||||||
office_roles OfficeRoles[]
|
office_roles OfficeRoles[]
|
||||||
|
subscriptions Subscriptions[]
|
||||||
|
|
||||||
@@map("offices")
|
@@map("offices")
|
||||||
}
|
}
|
||||||
@ -375,6 +377,26 @@ model TotpCodes {
|
|||||||
@@map("totp_codes")
|
@@map("totp_codes")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model Subscriptions {
|
||||||
|
uid String @id @unique @default(uuid())
|
||||||
|
start_date DateTime? @default(now())
|
||||||
|
end_date DateTime?
|
||||||
|
nb_seats Int
|
||||||
|
office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade)
|
||||||
|
office_uid String @db.VarChar(255)
|
||||||
|
seats Seats[]
|
||||||
|
@@map("subscriptions")
|
||||||
|
}
|
||||||
|
|
||||||
|
model Seats {
|
||||||
|
uid String @id @unique @default(uuid())
|
||||||
|
subscription Subscriptions @relation(fields: [subscription_uid], references: [uid], onDelete: Cascade)
|
||||||
|
subscription_uid String @db.VarChar(255)
|
||||||
|
user Users @relation(fields: [user_uid], references: [uid], onDelete: Cascade)
|
||||||
|
user_uid String @db.VarChar(255)
|
||||||
|
@@map("seats")
|
||||||
|
}
|
||||||
|
|
||||||
enum TotpCodesReasons {
|
enum TotpCodesReasons {
|
||||||
LOGIN
|
LOGIN
|
||||||
RESET_PASSWORD
|
RESET_PASSWORD
|
||||||
|
28
src/common/repositories/SubscriptionsRepository.ts
Normal file
28
src/common/repositories/SubscriptionsRepository.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import Database from "@Common/databases/database";
|
||||||
|
import BaseRepository from "@Repositories/BaseRepository";
|
||||||
|
import { Service } from "typedi";
|
||||||
|
import { Prisma } from "@prisma/client";
|
||||||
|
|
||||||
|
@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 totp codes
|
||||||
|
*/
|
||||||
|
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 });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
import BaseService from "@Services/BaseService";
|
||||||
|
import "reflect-metadata";
|
||||||
|
import { Service } from "typedi";
|
||||||
|
import { Prisma } from "@prisma/client";
|
||||||
|
import SubscriptionsRepository from "@Repositories/SubscriptionsRepository";
|
||||||
|
|
||||||
|
@Service()
|
||||||
|
export default class SubscriptionsService extends BaseService {
|
||||||
|
constructor(private subscriptionsRepository: SubscriptionsRepository) {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : Get all subscriptions
|
||||||
|
* @throws {Error} If subscriptions cannot be get
|
||||||
|
*/
|
||||||
|
public get(query: Prisma.SubscriptionsFindManyArgs) {
|
||||||
|
return this.subscriptionsRepository.findMany(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user