seed users
This commit is contained in:
@@ -1,13 +1,9 @@
|
||||
import { Entity, Property, OneToOne, OneToMany, Collection, Cascade } from '@mikro-orm/core';
|
||||
import { Entity, Property, OneToMany, Collection, Cascade } from '@mikro-orm/core';
|
||||
import { BaseEntity } from '../../../common/entities/base.entity';
|
||||
import { Restaurant } from '../../restaurants/entities/restaurant.entity';
|
||||
import { UserAddress } from './user-address.entity';
|
||||
|
||||
@Entity({ tableName: 'users' })
|
||||
export class User extends BaseEntity {
|
||||
@OneToOne(() => Restaurant, { owner: true })
|
||||
restaurant!: Restaurant;
|
||||
|
||||
@Property()
|
||||
firstName!: string;
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@ export class UserService {
|
||||
const offset = (page - 1) * limit;
|
||||
|
||||
// 2. Build the 'where' filter query
|
||||
const where: FilterQuery<User> = { restaurant: { id: restId } };
|
||||
const where: FilterQuery<User> = {};
|
||||
|
||||
// 4. Add 'search' logic (case-insensitive)
|
||||
if (search) {
|
||||
|
||||
@@ -53,6 +53,6 @@ export class DatabaseSeeder extends Seeder {
|
||||
|
||||
// 10. Create Users
|
||||
const usersSeeder = new UsersSeeder();
|
||||
await usersSeeder.run(em, restaurantsMap);
|
||||
await usersSeeder.run(em);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
export interface UserAddressData {
|
||||
userPhone: string;
|
||||
title: string;
|
||||
address: string;
|
||||
city: string;
|
||||
province?: string;
|
||||
postalCode?: string;
|
||||
latitude: number;
|
||||
longitude: number;
|
||||
phone?: string;
|
||||
isDefault: boolean;
|
||||
}
|
||||
|
||||
export const userAddressesData: UserAddressData[] = [
|
||||
{
|
||||
userPhone: '09362532122',
|
||||
title: 'خانه',
|
||||
address: 'خیابان ولیعصر، پلاک 123',
|
||||
city: 'تهران',
|
||||
province: 'تهران',
|
||||
postalCode: '1234567890',
|
||||
latitude: 35.6892,
|
||||
longitude: 51.3890,
|
||||
phone: '09362532122',
|
||||
isDefault: true,
|
||||
},
|
||||
{
|
||||
userPhone: '09185290775',
|
||||
title: 'خانه',
|
||||
address: 'خیابان انقلاب، پلاک 456',
|
||||
city: 'تهران',
|
||||
province: 'تهران',
|
||||
postalCode: '1234567891',
|
||||
latitude: 35.6900,
|
||||
longitude: 51.3900,
|
||||
phone: '09185290775',
|
||||
isDefault: true,
|
||||
},
|
||||
{
|
||||
userPhone: '09129283395',
|
||||
title: 'خانه',
|
||||
address: 'خیابان آزادی، پلاک 789',
|
||||
city: 'تهران',
|
||||
province: 'تهران',
|
||||
postalCode: '1234567892',
|
||||
latitude: 35.6910,
|
||||
longitude: 51.3910,
|
||||
phone: '09129283395',
|
||||
isDefault: true,
|
||||
},
|
||||
{
|
||||
userPhone: '09184317567',
|
||||
title: 'خانه',
|
||||
address: 'خیابان جمهوری، پلاک 321',
|
||||
city: 'تهران',
|
||||
province: 'تهران',
|
||||
postalCode: '1234567893',
|
||||
latitude: 35.6920,
|
||||
longitude: 51.3920,
|
||||
phone: '09184317567',
|
||||
isDefault: true,
|
||||
},
|
||||
];
|
||||
|
||||
@@ -27,7 +27,7 @@ export const usersData: UserData[] = [
|
||||
{
|
||||
phone: '09185290775',
|
||||
firstName: 'حمید',
|
||||
lastName: 'زرگامی',
|
||||
lastName: 'ضرغامی',
|
||||
restaurantSlug: 'boote',
|
||||
birthDate: '1992-01-01',
|
||||
marriageDate: '2017-01-01',
|
||||
@@ -36,5 +36,28 @@ export const usersData: UserData[] = [
|
||||
wallet: 0,
|
||||
points: 0,
|
||||
},
|
||||
{
|
||||
phone: '09129283395',
|
||||
firstName: 'مهرداد',
|
||||
lastName: 'مظفری',
|
||||
restaurantSlug: 'zhivan',
|
||||
birthDate: '1988-01-01',
|
||||
marriageDate: '2014-01-01',
|
||||
isActive: true,
|
||||
gender: true,
|
||||
wallet: 0,
|
||||
points: 0,
|
||||
},
|
||||
{
|
||||
phone: '09184317567',
|
||||
firstName: 'مارال',
|
||||
lastName: 'صادقی',
|
||||
restaurantSlug: 'boote',
|
||||
birthDate: '1995-01-01',
|
||||
marriageDate: '2020-01-01',
|
||||
isActive: true,
|
||||
gender: false,
|
||||
wallet: 0,
|
||||
points: 0,
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
+55
-11
@@ -1,22 +1,21 @@
|
||||
import type { EntityManager } from '@mikro-orm/core';
|
||||
import { User } from '../modules/users/entities/user.entity';
|
||||
import { Restaurant } from '../modules/restaurants/entities/restaurant.entity';
|
||||
import { UserAddress } from '../modules/users/entities/user-address.entity';
|
||||
import { usersData } from './data/users.data';
|
||||
import { userAddressesData } from './data/user-addresses.data';
|
||||
|
||||
export class UsersSeeder {
|
||||
async run(em: EntityManager, restaurantsMap: Map<string, Restaurant>): Promise<void> {
|
||||
async run(em: EntityManager): Promise<Map<string, User>> {
|
||||
const usersMap = new Map<string, User>();
|
||||
|
||||
// Create users
|
||||
for (const userData of usersData) {
|
||||
const existingUser = await em.findOne(User, { phone: userData.phone });
|
||||
if (existingUser) continue;
|
||||
|
||||
const restaurant = restaurantsMap.get(userData.restaurantSlug);
|
||||
if (!restaurant) continue;
|
||||
|
||||
const user = em.create(User, {
|
||||
let user = await em.findOne(User, { phone: userData.phone });
|
||||
if (!user) {
|
||||
user = em.create(User, {
|
||||
phone: userData.phone,
|
||||
firstName: userData.firstName,
|
||||
lastName: userData.lastName,
|
||||
restaurant,
|
||||
birthDate: new Date(userData.birthDate),
|
||||
marriageDate: new Date(userData.marriageDate),
|
||||
isActive: userData.isActive,
|
||||
@@ -26,8 +25,53 @@ export class UsersSeeder {
|
||||
});
|
||||
em.persist(user);
|
||||
}
|
||||
usersMap.set(userData.phone, user);
|
||||
}
|
||||
|
||||
await em.flush();
|
||||
|
||||
// Create addresses for users
|
||||
for (const addressData of userAddressesData) {
|
||||
const user = usersMap.get(addressData.userPhone);
|
||||
if (!user) continue;
|
||||
|
||||
// Check if address already exists for this user
|
||||
const existingAddress = await em.findOne(UserAddress, {
|
||||
user: { id: user.id },
|
||||
title: addressData.title,
|
||||
address: addressData.address,
|
||||
});
|
||||
|
||||
if (!existingAddress) {
|
||||
// If setting as default, unset other default addresses for this user
|
||||
if (addressData.isDefault) {
|
||||
const existingDefaultAddresses = await em.find(UserAddress, {
|
||||
user: { id: user.id },
|
||||
isDefault: true,
|
||||
});
|
||||
for (const defaultAddress of existingDefaultAddresses) {
|
||||
defaultAddress.isDefault = false;
|
||||
em.persist(defaultAddress);
|
||||
}
|
||||
}
|
||||
|
||||
const address = em.create(UserAddress, {
|
||||
user,
|
||||
title: addressData.title,
|
||||
address: addressData.address,
|
||||
city: addressData.city,
|
||||
province: addressData.province,
|
||||
postalCode: addressData.postalCode,
|
||||
latitude: addressData.latitude,
|
||||
longitude: addressData.longitude,
|
||||
phone: addressData.phone,
|
||||
isDefault: addressData.isDefault,
|
||||
});
|
||||
em.persist(address);
|
||||
}
|
||||
}
|
||||
|
||||
await em.flush();
|
||||
return usersMap;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user