50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
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));
|
|
}
|