add auth and payment api
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
import { Controller } from "@/common/controller";
|
||||
import { ormMiddleware } from "@/common/middlewares/orm.middleware";
|
||||
import { createOrmContextMiddleware } from "@/common/middlewares/create-orm-context.middleware";
|
||||
import { isAdminMiddleware } from "@/common/middlewares/is-admin.middleware";
|
||||
import { paginationQuerySchema } from "@/common/schemas";
|
||||
import type { AbstractFileStorage } from "@/common/services/file-storage/abstract.file-storage";
|
||||
import type { AbstractJwtService } from "@/common/services/jwt-service/abstract.jwt-service";
|
||||
import type {
|
||||
ErrorResponse,
|
||||
ListResponse,
|
||||
@@ -22,6 +24,7 @@ import {
|
||||
import { PackageItinerary } from "@/database/entities/package-itinerary.entity";
|
||||
import { Package } from "@/database/entities/package.entity";
|
||||
import { TransportationClass } from "@/database/entities/transportation-class.entity";
|
||||
import { AdminPermission } from "@/database/enums/admin-permission.enum";
|
||||
import { PackageItineraryWidgetType } from "@/database/enums/package-itinerary-widget-type.enum";
|
||||
import { orm } from "@/database/orm";
|
||||
import type { PackageMapper } from "@/modules/package/package.mapper";
|
||||
@@ -43,6 +46,7 @@ export class PackageController extends Controller {
|
||||
public constructor(
|
||||
private readonly mapper: PackageMapper,
|
||||
private readonly fileStorage: AbstractFileStorage,
|
||||
private readonly jwtService: AbstractJwtService,
|
||||
) {
|
||||
super();
|
||||
}
|
||||
@@ -61,8 +65,8 @@ export class PackageController extends Controller {
|
||||
const package_ = orm.em.create(Package, {
|
||||
id: ulid(),
|
||||
name: body.name,
|
||||
type: this.mapper.mapPackageType(body.type),
|
||||
class: this.mapper.mapPackageClass(body.class),
|
||||
type: body.type,
|
||||
class: body.class,
|
||||
thumbnail: thumbnailFile.name,
|
||||
useFastTrain: body.use_fast_train,
|
||||
createdAt: new Date(),
|
||||
@@ -177,8 +181,8 @@ export class PackageController extends Controller {
|
||||
);
|
||||
|
||||
package_.name = body.name;
|
||||
package_.type = this.mapper.mapPackageType(body.type);
|
||||
package_.class = this.mapper.mapPackageClass(body.class);
|
||||
package_.type = body.type;
|
||||
package_.class = body.class;
|
||||
package_.useFastTrain = body.use_fast_train;
|
||||
package_.updatedAt = new Date();
|
||||
|
||||
@@ -1330,26 +1334,52 @@ export class PackageController extends Controller {
|
||||
|
||||
public buildRouter(): Router {
|
||||
const router = Router();
|
||||
router.post("/", ormMiddleware, this.create.bind(this));
|
||||
router.get("/", ormMiddleware, this.list.bind(this));
|
||||
router.get("/:id", ormMiddleware, this.view.bind(this));
|
||||
router.put("/:id", ormMiddleware, this.update.bind(this));
|
||||
router.delete("/:id", ormMiddleware, this.delete.bind(this));
|
||||
router.post("/:id/details", ormMiddleware, this.createDetail.bind(this));
|
||||
router.get("/:id/details", ormMiddleware, this.listDetails.bind(this));
|
||||
router.post(
|
||||
"/",
|
||||
createOrmContextMiddleware,
|
||||
isAdminMiddleware(this.jwtService, [AdminPermission.createPackage]),
|
||||
this.create.bind(this),
|
||||
);
|
||||
router.get("/", createOrmContextMiddleware, this.list.bind(this));
|
||||
router.get("/:id", createOrmContextMiddleware, this.view.bind(this));
|
||||
router.put(
|
||||
"/:id",
|
||||
createOrmContextMiddleware,
|
||||
isAdminMiddleware(this.jwtService, [AdminPermission.updatePackage]),
|
||||
this.update.bind(this),
|
||||
);
|
||||
router.delete(
|
||||
"/:id",
|
||||
createOrmContextMiddleware,
|
||||
isAdminMiddleware(this.jwtService, [AdminPermission.deletePackage]),
|
||||
this.delete.bind(this),
|
||||
);
|
||||
router.post(
|
||||
"/:id/details",
|
||||
createOrmContextMiddleware,
|
||||
isAdminMiddleware(this.jwtService, [AdminPermission.createPackageDetail]),
|
||||
this.createDetail.bind(this),
|
||||
);
|
||||
router.get(
|
||||
"/:id/details",
|
||||
createOrmContextMiddleware,
|
||||
this.listDetails.bind(this),
|
||||
);
|
||||
router.get(
|
||||
"/:package_id/details/:id",
|
||||
ormMiddleware,
|
||||
createOrmContextMiddleware,
|
||||
this.viewDetail.bind(this),
|
||||
);
|
||||
router.put(
|
||||
"/:package_id/details/:id",
|
||||
ormMiddleware,
|
||||
createOrmContextMiddleware,
|
||||
isAdminMiddleware(this.jwtService, [AdminPermission.updatePackageDetail]),
|
||||
this.updateDetail.bind(this),
|
||||
);
|
||||
router.delete(
|
||||
"/:package_id/details/:id",
|
||||
ormMiddleware,
|
||||
createOrmContextMiddleware,
|
||||
isAdminMiddleware(this.jwtService, [AdminPermission.deletePackageDetail]),
|
||||
this.deleteDetail.bind(this),
|
||||
);
|
||||
|
||||
|
||||
@@ -10,9 +10,7 @@ import type {
|
||||
} from "@/database/entities/package-itinerary-widget.entity";
|
||||
import type { PackageItinerary } from "@/database/entities/package-itinerary.entity";
|
||||
import type { Package } from "@/database/entities/package.entity";
|
||||
import { PackageClass } from "@/database/enums/package-class.enum";
|
||||
import { PackageItineraryWidgetType } from "@/database/enums/package-itinerary-widget-type.enum";
|
||||
import { PackageType } from "@/database/enums/package-type.enum";
|
||||
import type { FlightMapper } from "@/modules/flight/flight.mapper";
|
||||
import type { FlightClassResponse } from "@/modules/flight/flight.types";
|
||||
import type { HotelMapper } from "@/modules/hotel/hotel.mapper";
|
||||
@@ -22,7 +20,6 @@ import type {
|
||||
PackageItineraryDayResponse,
|
||||
PackageItineraryResponse,
|
||||
PackageItineraryWidgetResponse,
|
||||
PackageRequest,
|
||||
PackageResponse,
|
||||
} from "@/modules/package/package.types";
|
||||
import type { TransportationMapper } from "@/modules/transportation/transportation.mapper";
|
||||
@@ -35,26 +32,6 @@ export class PackageMapper {
|
||||
private readonly transportationMapper: TransportationMapper,
|
||||
) {}
|
||||
|
||||
public mapPackageType(packageType: PackageRequest["type"]): PackageType {
|
||||
switch (packageType) {
|
||||
case "reguler":
|
||||
return PackageType.reguler;
|
||||
case "plus":
|
||||
return PackageType.plus;
|
||||
}
|
||||
}
|
||||
|
||||
public mapPackageClass(packageClass: PackageRequest["class"]): PackageClass {
|
||||
switch (packageClass) {
|
||||
case "silver":
|
||||
return PackageClass.silver;
|
||||
case "gold":
|
||||
return PackageClass.gold;
|
||||
case "platinum":
|
||||
return PackageClass.platinum;
|
||||
}
|
||||
}
|
||||
|
||||
public mapEntityToResponse(package_: Package): PackageResponse {
|
||||
return {
|
||||
id: package_.id,
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import { dateSchema, timeSchema } from "@/common/schemas";
|
||||
import { PackageClass } from "@/database/enums/package-class.enum";
|
||||
import { PackageType } from "@/database/enums/package-type.enum";
|
||||
import z from "zod";
|
||||
|
||||
export const packageRequestSchema = z.object({
|
||||
@@ -6,9 +8,9 @@ export const packageRequestSchema = z.object({
|
||||
.string("Must be string.")
|
||||
.nonempty("Must not empty.")
|
||||
.max(100, "Max 100 characters."),
|
||||
type: z.enum(["reguler", "plus"], "Must be either 'reguler' or 'plus'."),
|
||||
type: z.enum(PackageType, "Must be either 'reguler' or 'plus'."),
|
||||
class: z.enum(
|
||||
["silver", "gold", "platinum"],
|
||||
PackageClass,
|
||||
"Must be either 'silver', 'gold', or 'platinum'.",
|
||||
),
|
||||
thumbnail: z.base64("Must be base64 string.").nonempty("Must not empty."),
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import type { PackageClass } from "@/database/enums/package-class.enum";
|
||||
import type { PackageType } from "@/database/enums/package-type.enum";
|
||||
import type { FlightClassResponse } from "@/modules/flight/flight.types";
|
||||
import type { HotelResponse } from "@/modules/hotel/hotel.types";
|
||||
import type {
|
||||
@@ -20,8 +22,8 @@ export type PackageDetailParams = z.infer<typeof packageDetailParamsSchema>;
|
||||
export type PackageResponse = {
|
||||
id: string;
|
||||
name: string;
|
||||
type: "reguler" | "plus";
|
||||
class: "silver" | "gold" | "platinum";
|
||||
type: PackageType;
|
||||
class: PackageClass;
|
||||
thumbnail: string;
|
||||
use_fast_train: boolean;
|
||||
created_at: Date;
|
||||
|
||||
Reference in New Issue
Block a user