122 lines
2.9 KiB
JavaScript
122 lines
2.9 KiB
JavaScript
import { supabaseService } from '@/hooks/supabaseService';
|
|
|
|
export const useTeams = () => {
|
|
// 获取团队列表
|
|
const fetchTeams = async (params = {}) => {
|
|
try {
|
|
const result = await supabaseService.select('teams', {
|
|
select: `
|
|
id,
|
|
name,
|
|
description,
|
|
attributes,
|
|
created_at,
|
|
updated_at,
|
|
avatar_url,
|
|
team_membership!inner (
|
|
id,
|
|
user_id,
|
|
role,
|
|
is_creator,
|
|
users (
|
|
id,
|
|
email
|
|
)
|
|
)
|
|
`,
|
|
filter: {
|
|
deleted_at: { is: null },
|
|
...(params.search ? { name: { ilike: `%${params.search}%` } } : {})
|
|
},
|
|
order: {
|
|
column: params.field || 'created_at',
|
|
ascending: params.order === 'ascend'
|
|
},
|
|
page: params.current || 1,
|
|
pageSize: params.pageSize || 10
|
|
});
|
|
return result;
|
|
} catch (error) {
|
|
console.error('获取团队列表失败:', error);
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
// 创建团队前检查类型是否已存在
|
|
const checkTeamTypeExists = async (type) => {
|
|
try {
|
|
const {data} = await supabaseService.select('teams', {
|
|
filter: {
|
|
deleted_at: { is: null },
|
|
'attributes->>type': { eq: type }
|
|
}
|
|
});
|
|
return data.length > 0;
|
|
} catch (error) {
|
|
console.error('检查团队类型失败:', error);
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
// 创建团队
|
|
const createTeam = async (values) => {
|
|
try {
|
|
if (values.type) {
|
|
const result = await checkTeamTypeExists(values.type);
|
|
if (result) {
|
|
throw new Error(`团队类型 "${values.type}" 已存在,请使用其他类型名称`);
|
|
}
|
|
}
|
|
const newTeam = await supabaseService.insert('teams', {
|
|
name: values.name,
|
|
description: values.description,
|
|
attributes: { type: values.type }
|
|
});
|
|
|
|
// 创建团队成员关系
|
|
await supabaseService.insert('team_membership', {
|
|
team_id: newTeam[0].id,
|
|
user_id: values.userId,
|
|
role: 'OWNER',
|
|
is_creator: true,
|
|
id: newTeam[0].id
|
|
});
|
|
|
|
return newTeam[0];
|
|
} catch (error) {
|
|
console.error('创建团队失败:', error);
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
// 更新团队
|
|
const updateTeam = async (id, values) => {
|
|
try {
|
|
const result = await supabaseService.update('teams',
|
|
{ id },
|
|
values
|
|
);
|
|
return result[0];
|
|
} catch (error) {
|
|
console.error('更新团队失败:', error);
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
// 删除团队
|
|
const deleteTeam = async (id) => {
|
|
try {
|
|
await supabaseService.delete('teams', { id });
|
|
} catch (error) {
|
|
console.error('删除团队失败:', error);
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
return {
|
|
fetchTeams,
|
|
createTeam,
|
|
updateTeam,
|
|
deleteTeam,
|
|
};
|
|
}; |