mirror of
https://github.com/CompassConnections/Compass.git
synced 2026-02-18 23:06:40 -05:00
100 lines
3.0 KiB
TypeScript
100 lines
3.0 KiB
TypeScript
import {insert} from "../../../backend/shared/lib/supabase/utils";
|
|
import {PrivateUser} from "../../../common/lib/user";
|
|
import {getDefaultNotificationPreferences} from "../../../common/lib/user-notification-preferences";
|
|
import {randomString} from "../../../common/lib/util/random";
|
|
import UserAccountInformation from "../backend/utils/userInformation";
|
|
import {cleanUsername} from "common/lib/util/clean-username";
|
|
|
|
/**
|
|
* Function used to populate the database with profiles.
|
|
*
|
|
* @param pg - Supabase client used to access the database.
|
|
* @param userInfo - Class object containing information to create a user account generated by `fakerjs`.
|
|
* @param profileType - Optional param used to signify how much information is used in the account generation.
|
|
*/
|
|
export async function seedDatabase(pg: any, userInfo: UserAccountInformation, profileType?: string) {
|
|
|
|
const userId = userInfo.user_id
|
|
const deviceToken = randomString()
|
|
const bio = {
|
|
"type": "doc",
|
|
"content": [
|
|
{
|
|
"type": "paragraph",
|
|
"content": [
|
|
{
|
|
"text": userInfo.bio,
|
|
"type": "text"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
const basicProfile = {
|
|
user_id: userId,
|
|
bio_length: userInfo.bio.length,
|
|
bio: bio,
|
|
age: userInfo.age,
|
|
born_in_location: userInfo.born_in_location,
|
|
company: userInfo.company,
|
|
}
|
|
|
|
const mediumProfile = {
|
|
...basicProfile,
|
|
drinks_per_month: userInfo.drinks_per_month,
|
|
diet: [userInfo.randomElement(userInfo.diet)],
|
|
education_level: userInfo.randomElement(userInfo.education_level),
|
|
ethnicity: [userInfo.randomElement(userInfo.ethnicity)],
|
|
gender: userInfo.randomElement(userInfo.gender),
|
|
height_in_inches: userInfo.height_in_inches,
|
|
pref_gender: [userInfo.randomElement(userInfo.pref_gender)],
|
|
pref_age_min: userInfo.pref_age.min,
|
|
pref_age_max: userInfo.pref_age.max,
|
|
}
|
|
|
|
const fullProfile = {
|
|
...mediumProfile,
|
|
occupation_title: userInfo.occupation_title,
|
|
political_beliefs: [userInfo.randomElement(userInfo.political_beliefs)],
|
|
pref_relation_styles: [userInfo.randomElement(userInfo.pref_relation_styles)],
|
|
religion: [userInfo.randomElement(userInfo.religion)],
|
|
}
|
|
|
|
const profileData = profileType === 'basic' ? basicProfile
|
|
: profileType === 'medium' ? mediumProfile
|
|
: fullProfile
|
|
|
|
const user = {
|
|
// avatarUrl,
|
|
isBannedFromPosting: false,
|
|
link: {},
|
|
}
|
|
|
|
const privateUser: PrivateUser = {
|
|
id: userId,
|
|
email: userInfo.email,
|
|
initialIpAddress: userInfo.ip,
|
|
initialDeviceToken: deviceToken,
|
|
notificationPreferences: getDefaultNotificationPreferences(),
|
|
blockedUserIds: [],
|
|
blockedByUserIds: [],
|
|
}
|
|
|
|
await pg.tx(async (tx: any) => {
|
|
|
|
await insert(tx, 'users', {
|
|
id: userId,
|
|
name: userInfo.name,
|
|
username: cleanUsername(userInfo.name),
|
|
data: user,
|
|
})
|
|
|
|
await insert(tx, 'private_users', {
|
|
id: userId,
|
|
data: privateUser,
|
|
})
|
|
|
|
await insert(tx, 'profiles', profileData)
|
|
|
|
})
|
|
}; |