Skip to content

Commit

Permalink
feat(libs/db): initialize database schemas
Browse files Browse the repository at this point in the history
  • Loading branch information
JowiAoun committed Oct 6, 2024
1 parent 18dacda commit 3da1278
Show file tree
Hide file tree
Showing 11 changed files with 142 additions and 9 deletions.
9 changes: 8 additions & 1 deletion libs/db/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,12 @@ export const db = drizzle(sql, {
logger: envWebsiteDb.NODE_ENV === 'development',
})

export * from './schema/user'
export * from './schema/emergencyContact'
export * from './schema/program'
export * from './schema/resume'
export * from './schema/school'
export * from './schema/session'
export * from './schema/socialMedia'
export * from './schema/team'
export * from './schema/user'
export * from './schema/userPreferences'
11 changes: 11 additions & 0 deletions libs/db/src/schema/emergencyContact.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { boolean, pgEnum, pgTable, serial, varchar } from 'drizzle-orm/pg-core'

export const relationshipEnum = pgEnum('relationship', ['mother', 'father', 'sibling', 'friend', 'relative', 'other'])

export const emergencyContact = pgTable('emergencyContact', {
id: serial('id').primaryKey(),
name: varchar('name', { length: 32 }),
relationship: relationshipEnum('relationship'),
phoneNumber: varchar('phoneNumber', { length: 16 }).unique(),
isPhoneNumberVerified: boolean('isPhoneNumberVerified').default(false),
})
9 changes: 8 additions & 1 deletion libs/db/src/schema/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,9 @@
export * from './user'
export * from './emergencyContact'
export * from './program'
export * from './resume'
export * from './school'
export * from './session'
export * from './socialMedia'
export * from './team'
export * from './user'
export * from './userPreferences'
11 changes: 11 additions & 0 deletions libs/db/src/schema/program.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { integer, pgEnum, pgTable, serial, varchar } from 'drizzle-orm/pg-core'
import { school } from './school'

export const programTypeEnum = pgEnum('programType', ['bachelor', 'master', 'diploma', 'certificate'])

export const program = pgTable('program', {
id: serial('id').primaryKey(),
name: varchar('name', { length: 128 }),
schoolId: integer('schoolId').references(() => school.id),
programType: programTypeEnum('programType'),
})
8 changes: 8 additions & 0 deletions libs/db/src/schema/resume.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { boolean, pgTable, serial, timestamp, varchar } from 'drizzle-orm/pg-core'

export const resume = pgTable('resume', {
id: serial('id').primaryKey(),
fileLink: varchar('fileLink', { length: 128 }),
hasPrivacyToggle: boolean('hasPrivacyToggle').default(false),
uploadedAt: timestamp('uploadedAt').defaultNow(),
})
9 changes: 9 additions & 0 deletions libs/db/src/schema/school.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { pgEnum, pgTable, serial, varchar } from 'drizzle-orm/pg-core'

export const levelOfStudyEnum = pgEnum('levelOfStudy', ['graduateSchool', 'highSchool'])

export const school = pgTable('school', {
id: serial('id').primaryKey(),
name: varchar('name', { length: 128 }),
levelOfStudy: levelOfStudyEnum('levelOfStudy'),
})
4 changes: 2 additions & 2 deletions libs/db/src/schema/session.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import { user } from './user'

export const session = pgTable('session', {
id: text('id').primaryKey(),
userId: text('user_id')
userId: text('userId')
.notNull()
.references(() => user.id),
expiresAt: timestamp('expires_at', {
expiresAt: timestamp('expiresAt', {
withTimezone: true,
mode: 'date',
}).notNull(),
Expand Down
11 changes: 11 additions & 0 deletions libs/db/src/schema/socialMedia.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { integer, pgTable, serial, varchar } from 'drizzle-orm/pg-core'

import { user } from './user'

export const socialMedia = pgTable('socialMedia', {
id: serial('id').primaryKey(),
userId: integer('userId')
.references(() => user.id),
platformName: varchar('platformName', { length: 16 }),
profileUrl: varchar('profileUrl', { length: 128 }),
})
13 changes: 13 additions & 0 deletions libs/db/src/schema/team.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { boolean, integer, pgTable, serial, varchar } from 'drizzle-orm/pg-core'

export const team = pgTable('team', {
id: serial('id').primaryKey(),
name: varchar('name', { length: 64 }),
profileImageUrl: varchar('profileImageUrl', { length: 128 }),
projectLinkUrl: varchar('projectLinkUrl', { length: 256 }),
teamOwnerId: integer('teamOwnerId'),
hasSubmitted: boolean('hasSubmitted').default(false),
teamProfileImageUrl: varchar('teamProfileImageUrl', {
length: 128,
}),
})
38 changes: 33 additions & 5 deletions libs/db/src/schema/user.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,36 @@
import { pgTable, text } from 'drizzle-orm/pg-core'
import { boolean, date, integer, pgEnum, pgTable, serial, smallint, text, varchar } from 'drizzle-orm/pg-core'
import { resume } from './resume'
import { school } from './school'
import { emergencyContact } from './emergencyContact'
import { team } from './team'

export const genderEnum = pgEnum('gender', ['male', 'female', 'other'])
export const phoneNumberCountryCodeEnum = pgEnum('phoneNumberCountryCode', ['+1'])
export const ethnicityEnum = pgEnum('ethnicity', ['black', 'white', 'asian', 'hispanic', 'middle-eastern'])

export const user = pgTable('user', {
id: text('id').primaryKey(),
name: text('name'),
email: text('email').notNull(),
avatarUrl: text('avatar_url'),
id: serial('id').primaryKey(),
firstName: varchar('firstName', { length: 32 }).notNull(),
middleName: varchar('middleName', { length: 32 }),
lastName: varchar('lastName', { length: 32 }).notNull(),
preferredName: varchar('preferredName', { length: 32 }),
email: varchar('email', { length: 64 }).unique().notNull(),
isEmailVerified: boolean('isEmailVerified').default(false),
avatarUrl: varchar('avatarUrl', { length: 128 }),
profileDescription: text('profileDescription'),
dateOfBirth: date('dateOfBirth'),
gender: genderEnum('gender'),
phoneNumberCountryCode: phoneNumberCountryCodeEnum('phoneNumberCountryCode'),
phoneNumber: varchar('phoneNumber', { length: 16 }).unique(),
isPhoneNumberVerified: boolean('isPhoneNumberVerified').default(false),
numHackathonsAttended: smallint('numHackathonsAttended').default(0),
anyOtherComments: text('anyOtherComments'),
isDomestic: boolean('isDomestic'),
ethnicity: ethnicityEnum('ethnicity'),
estimatedGradYear: integer('estimatedGradYear'),
agreeToMlhReqs: boolean('agreeToMlhReqs').default(false),
resumeId: integer('resumeId').references(() => resume.id),
schoolId: integer('schoolId').references(() => school.id),
emergencyContactId: integer('emergencyContactId').references(() => emergencyContact.id),
teamId: integer('teamId').references(() => team.id),
})
28 changes: 28 additions & 0 deletions libs/db/src/schema/userPreferences.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { boolean, integer, pgEnum, pgTable, serial } from 'drizzle-orm/pg-core'
import { user } from './user'

export const preferredLanguageEnum = pgEnum('preferredLanguage', ['EN'])
export const eventPreferencesEnum = pgEnum('eventPreferences', ['hardware', 'software'])
export const shirtSizeEnum = pgEnum('shirtSize', ['XS', 'S', 'M', 'L', 'XL', 'XXL'])
export const pronounsEnum = pgEnum('pronouns', ['he/him', 'she/her', 'they/them', 'other'])
export const dietRestrictionsEnum = pgEnum('dietRestrictions', ['allergies', 'vegan', 'none'])
export const trackPreferencesEnum = pgEnum('trackPreferences', ['hardware', 'software'])
export const interestsEnum = pgEnum('interests', ['languages'])
export const disabilitiesEnum = pgEnum('disabilities', ['mobility', 'visual', 'hearing', 'cognitive', 'mental'])
export const applicableSkillsEnum = pgEnum('applicableSkills', ['JavaScript', 'TypeScript', 'Python', 'Java'])

export const userPreferences = pgTable('userPreferences', {
id: serial('id').primaryKey(),
userId: integer('userId').references(() => user.id),
preferredLanguage: preferredLanguageEnum('preferredLanguage').default('EN'),
eventPreferences: eventPreferencesEnum('eventPreferences'),
privacyMode: boolean('privacyMode').default(false),
isSubscribedToNewsletter: boolean('isSubscribedToNewsletter').default(false),
shirtSize: shirtSizeEnum('shirtSize'),
pronouns: pronounsEnum('pronouns'),
dietRestrictions: dietRestrictionsEnum('dietRestrictions').array(),
trackPreferences: trackPreferencesEnum('trackPreferences').array(),
interests: interestsEnum('interests').array(),
disabilities: disabilitiesEnum('disabilities').array(),
applicableSkills: applicableSkillsEnum('applicableSkills').array(),
})

0 comments on commit 3da1278

Please sign in to comment.