import { int, mysqlTable } from 'drizzle-orm/mysql-core'; import { user } from './user.ts'; import { team } from './team.ts'; import type { MySql2Database } from 'drizzle-orm/mysql2'; import { eq } from 'drizzle-orm'; type Database = MySql2Database<{ teamMember: typeof teamMember }>; export const teamMember = mysqlTable('team_member', { teamId: int('team_id') .notNull() .references(() => team.id), userId: int('user_id') .notNull() .references(() => user.id) }); export type AddTeamMemberReq = { teamId: number; userId: number; }; export type DeleteTeamMemberByTeamIdReq = { teamId: number; }; export type GetTeamMembersByTeamIdReq = { teamId: number; }; export async function addTeamMember(db: Database, values: AddTeamMemberReq) { const teamMemberIds = await db.insert(teamMember).values(values).$returningId(); return teamMemberIds[0]; } export async function deleteTeamMemberByTeamId(db: Database, values: DeleteTeamMemberByTeamIdReq) { await db.delete(teamMember).where(eq(teamMember.teamId, values.teamId)); } export async function getTeamMembersByTeamId(db: Database, values: GetTeamMembersByTeamIdReq) { return db .select({ user: user }) .from(teamMember) .innerJoin(user, eq(teamMember.userId, user.id)) .where(eq(teamMember.teamId, values.teamId)); }