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[]
|
||||
votes Votes[]
|
||||
user_notifications UserNotifications[]
|
||||
seats Seats[]
|
||||
|
||||
@@map("users")
|
||||
}
|
||||
@ -108,6 +109,7 @@ model Offices {
|
||||
office_folders OfficeFolders[]
|
||||
document_types DocumentTypes[]
|
||||
office_roles OfficeRoles[]
|
||||
subscriptions Subscriptions[]
|
||||
|
||||
@@map("offices")
|
||||
}
|
||||
@ -375,6 +377,26 @@ model TotpCodes {
|
||||
@@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 {
|
||||
LOGIN
|
||||
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