Skip to content

Commit 78da162

Browse files
committed
shitty solution for empty string values
1 parent 3d28257 commit 78da162

6 files changed

Lines changed: 62 additions & 31 deletions

File tree

src/datasources/db/salaries.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@ import { integer, pgTable, text, uuid } from "drizzle-orm/pg-core";
33
import { createInsertSchema, createSelectSchema } from "drizzle-zod";
44

55
import { companiesSchema } from "./companies";
6-
import { createdAndUpdatedAtFields, genderOptions } from "./shared";
6+
import {
7+
createdAndUpdatedAtFields,
8+
GenderOptionsEnum,
9+
TypescriptEnumAsDBEnumOptions,
10+
} from "./shared";
711
import { usersSchema } from "./users";
812
import { workEmailSchema } from "./workEmail";
913
import { workSeniorityAndRoleSchema } from "./workSeniorityAndRole";
@@ -26,7 +30,7 @@ export const salariesSchema = pgTable("salaries", {
2630
workEmailId: uuid("work_email_id").references(() => workEmailSchema.id),
2731
yearsOfExperience: integer("years_of_experience").notNull(),
2832
gender: text("gender", {
29-
enum: genderOptions,
33+
enum: TypescriptEnumAsDBEnumOptions(GenderOptionsEnum),
3034
}),
3135
genderOtherText: text("gender_other_text"),
3236
countryCode: text("country_code").notNull(),

src/datasources/db/shared.ts

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,20 @@ export const createdAndUpdatedAtFieldsSelectZodSchema = {
1313
deletedAt: z.date().optional(),
1414
};
1515

16-
export const genderOptions = [
17-
"male",
18-
"female",
19-
"transgender_male",
20-
"transgender_female",
21-
"non_binary",
22-
"genderqueer",
23-
"genderfluid",
24-
"agender",
25-
"two_spirit",
26-
"other",
27-
"prefer_not_to_say",
28-
] as const;
16+
export enum GenderOptionsEnum {
17+
Male = "male",
18+
Female = "female",
19+
TransgenderMale = "transgender_male",
20+
TransgenderFemale = "transgender_female",
21+
NonBinary = "non_binary",
22+
Genderqueer = "genderqueer",
23+
Genderfluid = "genderfluid",
24+
Agender = "agender",
25+
TwoSpirit = "two_spirit",
26+
Other = "other",
27+
PreferNotToSay = "prefer_not_to_say",
28+
empty = "",
29+
}
2930

3031
export const statusEnumOptions = ["pending", "confirmed", "rejected"] as const;
3132

src/datasources/db/users.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,23 @@ import {
1010
} from "./schema";
1111
import {
1212
createdAndUpdatedAtFields,
13-
genderOptions,
13+
GenderOptionsEnum,
1414
TypescriptEnumAsDBEnumOptions,
1515
} from "./shared";
1616

1717
export enum UserStatusEnum {
1818
active = "active",
1919
inactive = "inactive",
2020
blocked = "blocked",
21+
empty = "",
2122
}
2223

2324
export enum PronounsEnum {
2425
heHim = "él/ellos",
2526
sheHer = "ella/ellas",
2627
theyThem = "elle/elles",
2728
other = "otro",
29+
empty = "",
2830
}
2931

3032
// USERS
@@ -36,7 +38,7 @@ export const usersSchema = pgTable("users", {
3638
bio: text("bio").default(""),
3739
email: text("email").unique().notNull(),
3840
gender: text("gender", {
39-
enum: genderOptions,
41+
enum: TypescriptEnumAsDBEnumOptions(GenderOptionsEnum),
4042
}),
4143
pronouns: text("pronouns", {
4244
enum: TypescriptEnumAsDBEnumOptions(PronounsEnum),
@@ -74,3 +76,21 @@ export const updateUsersSchema = insertUsersSchema
7476
username: true,
7577
})
7678
.partial();
79+
80+
export const allowedUserUpdateForAuth = insertUsersSchema
81+
.pick({
82+
name: true,
83+
lastName: true,
84+
bio: true,
85+
pronouns: true,
86+
// gender: true,
87+
// genderOtherText: true,
88+
username: true,
89+
externalId: true,
90+
imageUrl: true,
91+
isEmailVerified: true,
92+
publicMetadata: true,
93+
updatedAt: true,
94+
status: true,
95+
})
96+
.partial();

src/datasources/queries/users.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import { z } from "zod";
44

55
import { ORM_TYPE } from "~/datasources/db";
66
import {
7+
allowedUserUpdateForAuth,
78
insertUsersSchema,
89
selectUsersSchema,
10+
updateUsersSchema,
911
usersSchema,
1012
UserStatusEnum,
1113
} from "~/datasources/db/schema";
@@ -55,17 +57,17 @@ export const updateUserProfileInfo = async (
5557
} else {
5658
logger.info("User found — updating user");
5759
// we update the user
60+
const updateData = allowedUserUpdateForAuth.parse({
61+
externalId: parsedProfileInfo.externalId,
62+
name: parsedProfileInfo.name,
63+
imageUrl: parsedProfileInfo.imageUrl,
64+
isEmailVerified: parsedProfileInfo.isEmailVerified,
65+
publicMetadata: parsedProfileInfo.publicMetadata ?? {},
66+
status: UserStatusEnum.active,
67+
});
5868
const updatedUsers = await db
5969
.update(usersSchema)
60-
.set({
61-
externalId: parsedProfileInfo.externalId,
62-
name: parsedProfileInfo.name,
63-
imageUrl: parsedProfileInfo.imageUrl,
64-
isEmailVerified: parsedProfileInfo.isEmailVerified,
65-
publicMetadata: parsedProfileInfo.publicMetadata ?? {},
66-
updatedAt: sql`current_timestamp`,
67-
status: UserStatusEnum.active,
68-
})
70+
.set(updateData)
6971
.where(eq(usersSchema.email, parsedProfileInfo.email))
7072
.returning();
7173
const updatedUser = updatedUsers?.[0];
@@ -75,6 +77,8 @@ export const updateUserProfileInfo = async (
7577
throw new Error("Could not update user");
7678
}
7779

80+
logger.info("User updated");
81+
7882
return selectUsersSchema.parse(updatedUser);
7983
}
8084
};

src/schema/shared/enums.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { builder } from "~/builder";
2-
import { genderOptions } from "~/datasources/db/shared";
2+
import { GenderOptionsEnum } from "~/datasources/db/shared";
33

4-
export const GenderEnum = builder.enumType("Gender", {
5-
values: genderOptions,
4+
export const GenderEnum = builder.enumType(GenderOptionsEnum, {
5+
name: "Gender",
66
});

src/tests/fixtures/index.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ import {
8888
PronounsEnum,
8989
UserStatusEnum,
9090
} from "~/datasources/db/schema";
91-
import { genderOptions } from "~/datasources/db/shared";
9291
import {
9392
insertTicketPriceSchema,
9493
selectTicketPriceSchema,
@@ -100,6 +99,7 @@ import {
10099
} from "~/generated/types";
101100
import { defaultLogger } from "~/logging";
102101
import { schema } from "~/schema";
102+
import { GenderEnum } from "~/schema/shared/enums";
103103
import { getTestDB } from "~/tests/fixtures/databaseHelper";
104104

105105
const insertUserRequest = insertUsersSchema.deepPartial();
@@ -737,7 +737,9 @@ export const insertSalary = async (
737737
partialInput?.workMetodology ??
738738
faker.helpers.arrayElement(["remote", "office", "hybrid"] as const),
739739
yearsOfExperience: partialInput?.yearsOfExperience ?? faker.number.int(),
740-
gender: partialInput?.gender ?? faker.helpers.arrayElement(genderOptions),
740+
gender:
741+
partialInput?.gender ??
742+
faker.helpers.arrayElement(Object.values(GenderEnum)),
741743
genderOtherText: partialInput?.genderOtherText,
742744
companyId: partialInput?.companyId,
743745
workEmailId: partialInput?.workEmailId,

0 commit comments

Comments
 (0)