Skip to content

Commit

Permalink
app up
Browse files Browse the repository at this point in the history
  • Loading branch information
prophet7821 committed Sep 13, 2024
1 parent 860f55d commit d1d0d37
Show file tree
Hide file tree
Showing 17 changed files with 212 additions and 215 deletions.
5 changes: 0 additions & 5 deletions .env.example

This file was deleted.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"@nestjs/common": "^9.0.0",
"@nestjs/config": "^3.1.1",
"@nestjs/core": "^9.0.0",
"@nestjs/event-emitter": "^2.0.3",
"@nestjs/jwt": "^10.1.0",
"@nestjs/mapped-types": "^2.0.2",
"@nestjs/mongoose": "^10.0.1",
Expand Down
7 changes: 7 additions & 0 deletions src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,20 @@ import { ConfigModule, ConfigService } from "@nestjs/config";
import * as cors from "cors";
// import { OrderModule } from "./order/order.module";
import { StripeModule } from "./stripe/stripe.module";
import { OrderModule } from "./order/order.module";
import { EventEmitterModule } from "@nestjs/event-emitter";

@Module({
imports: [
CarsModule,
AuthModule,
PaymentsModule,
OrderModule,
ConfigModule.forRoot(),
EventEmitterModule.forRoot({
wildcard: true,
delimiter: ".",
}),
MongooseModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
Expand Down
9 changes: 2 additions & 7 deletions src/auth/auth.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import {
UseInterceptors,
} from "@nestjs/common";
import { AuthService } from "./auth.service";
import { UsersService } from "../users/users.service";
import { User } from "../users/users.schema";
import MongooseClassSerializerInterceptor from "../interceptors/mongooseClassSerializer.interceptor";
import { JwtAuthGuard } from "../guards/auth.guard";
Expand All @@ -19,13 +18,9 @@ import { User as UserDecorator } from "../decorator/user.decorator";
path: "auth",
version: "1",
})

@UseInterceptors(MongooseClassSerializerInterceptor(User))
export class AuthController {
constructor(
private authService: AuthService,
private usersService: UsersService
) {}
constructor(private authService: AuthService) {}

@Post("login")
async login(@Body() loginData: { email: string; password: string }) {
Expand All @@ -39,7 +34,7 @@ export class AuthController {

@Post("signup")
async signUp(@Body() userData: User) {
return await this.usersService.createUser(userData);
return await this.authService.createUser(userData);
}

@Get("profile")
Expand Down
6 changes: 5 additions & 1 deletion src/auth/auth.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Injectable } from "@nestjs/common";
import { JwtService } from "@nestjs/jwt";
import { UsersService } from "../users/users.service";
import * as bcrypt from "bcryptjs";
import { UserDocument } from "../users/users.schema";
import { User, UserDocument } from "../users/users.schema";

@Injectable()
export class AuthService {
Expand All @@ -26,4 +26,8 @@ export class AuthService {
token: this.jwtService.sign(payload),
};
}

async createUser(userData: User) {
return await this.userService.createUser(userData);
}
}
8 changes: 4 additions & 4 deletions src/cars/cars.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ export class CarsService {

// Fetches a car by its ID.
async getCarById(id: string): Promise<Car> {
const car = await this.carModel.findById(id).exec();
if (!car) {
throw new NotFoundException(`Car with ID ${id} not found.`);
try {
return await this.carModel.findById(id).exec();
} catch (e) {
throw new NotFoundException("No Car Exists with that ID");
}
return car;
}

async getCarsBySearch(searchString: string, page = 0, limit = 10) {
Expand Down
6 changes: 4 additions & 2 deletions src/main.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";
import { VersioningType } from "@nestjs/common";
import { INestApplication, VersioningType } from "@nestjs/common";

async function bootstrap() {
const app = await NestFactory.create(AppModule);
const app = await NestFactory.create<INestApplication>(AppModule, {
rawBody: true,
});
app.enableVersioning({
type: VersioningType.URI,
});
Expand Down
51 changes: 20 additions & 31 deletions src/order/order.controller.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,20 @@
// import { Body, Controller, Get, Post, UseGuards } from "@nestjs/common";
// import { JwtAuthGuard } from "../guards/auth.guard";
// import { createOrderDto } from "../types/createOrder.dto";
// import { User as UserDecorator } from "../decorator/user.decorator";
// import { User } from "../users/users.schema";
// import { OrderService } from "./order.service";
//
// @Controller({
// path: "order",
// version: "1",
// })
// export class OrderController {
// constructor(private readonly orderService: OrderService) {}
//
// @Get("/getOrders")
// @UseGuards(JwtAuthGuard)
// async getOrders(@UserDecorator() user: User) {
// return this.orderService.getOrders(user);
// }
//
// @Post("/createOrder")
// @UseGuards(JwtAuthGuard)
// async create(
// @Body() createOrderDto: createOrderDto,
// @UserDecorator() user: User
// ) {
// const car = createOrderDto["car"];
// const paymentIntent = createOrderDto["paymentIntent"];
// return this.orderService.create(car, paymentIntent, user);
// }
// }
import { Body, Controller, Get, Post, UseGuards } from "@nestjs/common";
import { JwtAuthGuard } from "../guards/auth.guard";
import { User as UserDecorator } from "../decorator/user.decorator";
import { User } from "../users/users.schema";
import { OrderService } from "./order.service";
import { Stripe } from "stripe";

@Controller({
path: "order",
version: "1",
})
export class OrderController {
constructor(private readonly orderService: OrderService) {}

@Get("/getOrders")
@UseGuards(JwtAuthGuard)
async getOrders(@UserDecorator() user: User) {
return this.orderService.getOrders(user);
}
}
40 changes: 21 additions & 19 deletions src/order/order.module.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
// //cars.module.ts
// import { Module } from "@nestjs/common";
// import { MongooseModule } from "@nestjs/mongoose";
// import { Order, OrderSchema } from "./order.schema";
// import { OrderController } from "./order.controller";
// import { CarsModule } from "../cars/cars.module";
// import { OrderService } from "./order.service";
// import { PaymentsModule } from "../payments/payments.module";
//
// @Module({
// imports: [
// MongooseModule.forFeature([{ name: Order.name, schema: OrderSchema }]),
// CarsModule,
// PaymentsModule,
// ],
// controllers: [OrderController],
// providers: [OrderService],
// })
// export class OrderModule {}
//cars.module.ts
import { Module } from "@nestjs/common";
import { MongooseModule } from "@nestjs/mongoose";
import { Order, OrderSchema } from "./order.schema";
import { OrderController } from "./order.controller";
import { CarsModule } from "../cars/cars.module";
import { OrderService } from "./order.service";
import { PaymentsModule } from "../payments/payments.module";
import { StripeModule } from "../stripe/stripe.module";

@Module({
imports: [
MongooseModule.forFeature([{ name: Order.name, schema: OrderSchema }]),
CarsModule,
PaymentsModule,
StripeModule,
],
controllers: [OrderController],
providers: [OrderService],
})
export class OrderModule {}
70 changes: 35 additions & 35 deletions src/order/order.schema.ts
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
// import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
// import { HydratedDocument, Schema as mongooseSchema } from "mongoose";
// import { Car } from "../cars/cars.schema";
// import { User } from "../users/users.schema";
//
// export type OrdersDocument = HydratedDocument<Order>;
//
// @Schema({ collection: "order" })
// export class Order {
// @Prop({ type: mongooseSchema.Types.ObjectId, ref: "Car", required: true })
// car: Car;
//
// @Prop({ type: mongooseSchema.Types.ObjectId, ref: "User", required: true })
// user: User;
//
// @Prop({ type: String, required: true })
// paymentIntent: string;
//
// @Prop({ type: String, required: true })
// paymentMethod: string;
//
// @Prop({ type: Number, required: true })
// amount: number;
//
// @Prop({ type: String, required: true })
// currency: string;
//
// @Prop({ type: Date, default: Date.now() })
// createdOn: Date;
//
// @Prop({ type: Date })
// deliveredOn: Date;
// }
//
// export const OrderSchema = SchemaFactory.createForClass(Order);
import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import { HydratedDocument, Schema as mongooseSchema } from "mongoose";
import { Car } from "../cars/cars.schema";
import { User } from "../users/users.schema";

export type OrdersDocument = HydratedDocument<Order>;

@Schema({ collection: "order" })
export class Order {
@Prop({ type: mongooseSchema.Types.ObjectId, ref: "Car", required: true })
car: Car;

@Prop({ type: mongooseSchema.Types.ObjectId, ref: "User", required: true })
user: User;

@Prop({ type: String, required: true })
paymentIntent: string;

@Prop({ type: String, required: true })
paymentMethod: string;

@Prop({ type: Number, required: true })
amount: number;

@Prop({ type: String, required: true })
currency: string;

@Prop({ type: Date, default: Date.now() })
createdOn: Date;

@Prop({ type: Date })
deliveredOn: Date;
}

export const OrderSchema = SchemaFactory.createForClass(Order);
73 changes: 20 additions & 53 deletions src/order/order.service.ts
Original file line number Diff line number Diff line change
@@ -1,53 +1,20 @@
// import { InjectModel } from "@nestjs/mongoose";
// import { Order } from "./order.schema";
// import { Model } from "mongoose";
// import {
// Injectable,
// NotAcceptableException,
// NotFoundException,
// } from "@nestjs/common";
// import { User } from "../users/users.schema";
// import { CarsService } from "../cars/cars.service";
// import { PaymentsService } from "../payments/payments.service";
//
// @Injectable()
// export class OrderService {
// constructor(
// @InjectModel(Order.name) private orderModel: Model<Order>,
// private carsService: CarsService,
// private paymentsService: PaymentsService
// ) {}
//
// async getOrders(user: User) {
// return this.orderModel.find({ user: user["_id"] }).populate("car").exec();
// }
//
// async create(car: string, paymentIntent: string, user: User) {
// const [carData, paymentIntentData] = await Promise.all([
// this.carsService.getCarById(car),
// this.paymentsService.retrievePaymentIntent(paymentIntent),
// ]);
//
// if (!carData || !paymentIntentData) {
// throw new NotFoundException("Car or payment intent not found");
// }
//
// const existingOrder = await this.orderModel.findOne({
// paymentIntent: paymentIntent,
// });
// if (existingOrder) {
// throw new NotAcceptableException("Order already exists");
// }
//
// const order = new this.orderModel({
// car: car,
// user: user["_id"],
// paymentIntent: paymentIntent,
// paymentMethod: paymentIntentData["payment_method"],
// amount: paymentIntentData["amount"],
// currency: paymentIntentData["currency"],
// });
//
// return order.save();
// }
// }
import { InjectModel } from "@nestjs/mongoose";
import { Order } from "./order.schema";
import { Model } from "mongoose";
import { Injectable } from "@nestjs/common";
import { User } from "../users/users.schema";
import { CarsService } from "../cars/cars.service";
import { PaymentsService } from "../payments/payments.service";

@Injectable()
export class OrderService {
constructor(
@InjectModel(Order.name) private orderModel: Model<Order>,
private carsService: CarsService,
private paymentsService: PaymentsService
) {}

async getOrders(user: User) {
return this.orderModel.find({ user: user["_id"] }).populate("car").exec();
}
}
Loading

0 comments on commit d1d0d37

Please sign in to comment.