chore: seeder for city and province
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
import { Logger } from "@nestjs/common";
|
||||
|
||||
import { connectionSource } from "./connection";
|
||||
import { seedAdmin } from "./seeders/admin.seeder";
|
||||
import { seedNotifSettings } from "./seeders/notif-setting.seeder";
|
||||
import { seedPaymentGateways } from "./seeders/payment-gateway.seeder";
|
||||
import { seedRole } from "./seeders/role.seeder";
|
||||
// import { seedAdmin } from "./seeders/admin.seeder";
|
||||
import { seedCityAndProvince } from "./seeders/iran-city.seeder";
|
||||
// import { seedNotifSettings } from "./seeders/notif-setting.seeder";
|
||||
// import { seedPaymentGateways } from "./seeders/payment-gateway.seeder";
|
||||
// import { seedRole } from "./seeders/role.seeder";
|
||||
|
||||
const logger = new Logger("Seeder");
|
||||
|
||||
@@ -12,10 +13,11 @@ export const runSeeder = async () => {
|
||||
await connectionSource.initialize();
|
||||
logger.log("start seeding database");
|
||||
//
|
||||
await seedRole(connectionSource, logger);
|
||||
await seedAdmin(connectionSource, logger);
|
||||
await seedNotifSettings(connectionSource, logger);
|
||||
await seedPaymentGateways(connectionSource, logger);
|
||||
// await seedRole(connectionSource, logger);
|
||||
// await seedAdmin(connectionSource, logger);
|
||||
// await seedNotifSettings(connectionSource, logger);
|
||||
// await seedPaymentGateways(connectionSource, logger);
|
||||
await seedCityAndProvince(connectionSource, logger);
|
||||
|
||||
logger.log("seeding completed");
|
||||
process.exit(0);
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
import { Logger } from "@nestjs/common";
|
||||
import { DataSource } from "typeorm";
|
||||
|
||||
import { City } from "../../src/modules/address/entities/city.entity";
|
||||
import { Province } from "../../src/modules/address/entities/province.entity";
|
||||
import provincesData from "../data/json/ostan.json";
|
||||
import citiesData from "../data/json/shahr.json";
|
||||
|
||||
export const seedCityAndProvince = async (dataSource: DataSource, logger: Logger) => {
|
||||
try {
|
||||
const provinceRepo = dataSource.getRepository(Province);
|
||||
const cityRepo = dataSource.getRepository(City);
|
||||
|
||||
for (const province of provincesData) {
|
||||
const newProvince = provinceRepo.create({ name: province.name });
|
||||
await provinceRepo.save(newProvince);
|
||||
}
|
||||
|
||||
for (const city of citiesData) {
|
||||
const province = await provinceRepo.findOne({ where: { id: city.ostan } });
|
||||
if (province) {
|
||||
const newCity = cityRepo.create({ name: city.name, province });
|
||||
await cityRepo.save(newCity);
|
||||
}
|
||||
}
|
||||
|
||||
logger.log("City and Province seeding completed");
|
||||
} catch (error) {
|
||||
logger.error("Error in seeding City and Province", error);
|
||||
process.exit(1);
|
||||
}
|
||||
};
|
||||
@@ -14,6 +14,7 @@ import { mailerConfig } from "./configs/mailer.config";
|
||||
import { rateLimitConfig } from "./configs/rateLimit.config";
|
||||
import { databaseConfigs } from "./configs/typeorm.config";
|
||||
import { HTTPLogger } from "./core/middlewares/logger.middleware";
|
||||
import { AddressModule } from "./modules/address/address.module";
|
||||
import { AdsModule } from "./modules/ads/ads.module";
|
||||
import { AnnouncementsModule } from "./modules/announcements/announcement.module";
|
||||
import { AuthModule } from "./modules/auth/auth.module";
|
||||
@@ -59,6 +60,7 @@ import { WalletsModule } from "./modules/wallets/wallets.module";
|
||||
LearningModule,
|
||||
DiscountModule,
|
||||
AdsModule,
|
||||
AddressModule,
|
||||
],
|
||||
controllers: [],
|
||||
providers: [],
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
import { Controller } from "@nestjs/common";
|
||||
|
||||
@Controller("address")
|
||||
export class AddressController {
|
||||
constructor() {}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import { Module } from "@nestjs/common";
|
||||
import { TypeOrmModule } from "@nestjs/typeorm";
|
||||
|
||||
import { AddressController } from "./address.controller";
|
||||
import { City } from "./entities/city.entity";
|
||||
import { Province } from "./entities/province.entity";
|
||||
import { AddressService } from "./providers/address.service";
|
||||
import { CityRepository } from "./repositories/city.repository";
|
||||
import { ProvinceRepository } from "./repositories/province.repository";
|
||||
|
||||
@Module({
|
||||
imports: [TypeOrmModule.forFeature([City, Province])],
|
||||
providers: [AddressService, CityRepository, ProvinceRepository],
|
||||
controllers: [AddressController],
|
||||
})
|
||||
export class AddressModule {}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
|
||||
|
||||
import { Province } from "./province.entity";
|
||||
|
||||
@Entity()
|
||||
export class City {
|
||||
@PrimaryGeneratedColumn()
|
||||
id: number;
|
||||
|
||||
@Column({ type: "varchar", length: 255 })
|
||||
name: string;
|
||||
|
||||
@ManyToOne(() => Province, (province) => province.cities, { nullable: false })
|
||||
province: Province;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm";
|
||||
|
||||
import { City } from "./city.entity";
|
||||
|
||||
@Entity()
|
||||
export class Province {
|
||||
@PrimaryGeneratedColumn()
|
||||
id: number;
|
||||
|
||||
@Column({ type: "varchar", length: 255 })
|
||||
name: string;
|
||||
|
||||
@OneToMany(() => City, (city) => city.province)
|
||||
cities: City[];
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
import { Injectable } from "@nestjs/common";
|
||||
|
||||
@Injectable()
|
||||
export class AddressService {
|
||||
constructor() {}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
import { Injectable } from "@nestjs/common";
|
||||
import { InjectRepository } from "@nestjs/typeorm";
|
||||
import { Repository } from "typeorm";
|
||||
|
||||
import { City } from "../entities/city.entity";
|
||||
|
||||
@Injectable()
|
||||
export class CityRepository extends Repository<City> {
|
||||
constructor(@InjectRepository(City) cityRepository: Repository<City>) {
|
||||
super(cityRepository.target, cityRepository.manager, cityRepository.queryRunner);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
import { Injectable } from "@nestjs/common";
|
||||
import { InjectRepository } from "@nestjs/typeorm";
|
||||
import { Repository } from "typeorm";
|
||||
|
||||
import { Province } from "../entities/province.entity";
|
||||
|
||||
@Injectable()
|
||||
export class ProvinceRepository extends Repository<Province> {
|
||||
constructor(@InjectRepository(Province) provinceRepository: Repository<Province>) {
|
||||
super(provinceRepository.target, provinceRepository.manager, provinceRepository.queryRunner);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Body, Controller, Get, Param, Post, Query } from "@nestjs/common";
|
||||
import { ApiOperation } from "@nestjs/swagger";
|
||||
|
||||
import { ApplyDiscountDto } from "./DTO/apply-discount-invoice.dto";
|
||||
import { CreateInvoiceDto } from "./DTO/create-invoice.dto";
|
||||
import { InvoicesSearchQueryDto, UserInvoicesSearchQueryDto } from "./DTO/invoices-search-query.dto";
|
||||
import { InvoicesService } from "./providers/invoices.service";
|
||||
@@ -48,4 +49,14 @@ export class InvoicesController {
|
||||
getInvoiceById(@Param() paramDto: ParamDto, @UserDec("role") role: RoleEnum, @UserDec("id") userId: string) {
|
||||
return this.invoiceService.getInvoiceById(paramDto.id, role, userId);
|
||||
}
|
||||
|
||||
@Post(":id/apply-discount")
|
||||
async applyDiscount(@Param() paramDto: ParamDto, @Body() applyDiscountDto: ApplyDiscountDto) {
|
||||
return this.invoiceService.applyDiscount(paramDto.id, applyDiscountDto);
|
||||
}
|
||||
|
||||
@Get(":id/final-price")
|
||||
async getFinalPrice(@Param() paramDto: ParamDto) {
|
||||
return this.invoiceService.calculateFinalPrice(paramDto.id);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user