chore: seeder for city and province

This commit is contained in:
Matin
2025-02-17 10:37:58 +03:30
parent 20d6c5b294
commit 7f09e92abb
11 changed files with 137 additions and 8 deletions
+10 -8
View File
@@ -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);
+32
View File
@@ -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);
}
};
+2
View File
@@ -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() {}
}
+16
View File
@@ -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);
}
}