简述
在完成基本的数据集管理操作后,Sapphire需要实现用户对数据集的认领,也就是加入某个数据集开始标注任务的功能。这个功能允许用户参与到数据集的标注工作中,同时系统也需要提供相应的接口来管理用户与数据集之间的关系。
实现细节
实现用户认领数据集的功能涉及到几个方面:添加用户到数据集、移除用户从数据集、列出数据集的用户以及判断用户是否已经认领数据集。以下是相关代码的详细解释:
添加用户到数据集
用户可以通过调用接口加入某个数据集,成为该数据集的标注者。以下是代码的详细解释:
// AddUserToDataset 添加用户到数据集
func (d *Dataset) AddUserToDataset(userID uint, datasetID uint) error {
var err error
// 检查用户是否已经在数据集中
exist, err := dao.FindOne[DatasetUser]("user_id = ? and dataset_id = ?", userID, datasetID)
if err != nil {
return err
}
// 如果用户已经在数据集中,则直接返回
if exist != nil {
return nil
}
// 创建新的数据集用户记录
datasetUser := &DatasetUser{
UserID: userID,
DatasetID: datasetID,
}
// 保存记录到数据库
err = dao.Save(datasetUser)
if err != nil {
return err
}
// 发送加入数据集的通知消息
content := fmt.Sprintf("您已成功加入数据集 %d", datasetID)
messageDomain.SendMessage(content, "加入数据集", MessageTypeTREND, userID)
return nil
}
代码分析:
- 检查用户是否已经在数据集中:通过查询数据库验证用户是否已经加入了数据集。
- 创建新的数据集用户记录:如果用户未加入数据集,则创建一条新的记录。
- 保存记录到数据库:将新创建的记录保存到数据库中。
- 发送通知消息:通知用户成功加入数据集。
移除用户从数据集
用户可以选择退出某个数据集,系统需要相应地移除用户与数据集的关联。以下是代码的详细解释:
// RemoveUserFromDataset 移除用户从数据集
func (d *Dataset) RemoveUserFromDataset(userID uint, datasetID uint) error {
var err error
// 查找用户与数据集的关联记录
record, err := dao.First[DatasetUser]("user_id = ? and dataset_id = ?", userID, datasetID)
if err != nil {
return err
}
// 如果记录不存在,则直接返回
if record == nil {
return nil
}
// 删除记录
err = dao.Delete(record)
if err != nil {
return err
}
return nil
}
代码分析:
- 查找关联记录:通过用户ID和数据集ID查找用户与数据集的关联记录。
- 删除记录:如果找到记录,则将其从数据库中删除。
列出数据集的用户
系统需要提供接口列出某个数据集下的所有用户,便于管理和查看。以下是代码的详细解释:
// ListJoinedUserByDatasetID 列出数据集的用户
func (d *Dataset) ListJoinedUserByDatasetID(datasetID uint) ([]DatasetUser, error) {
// 查找所有与数据集关联的用户记录
res, err := dao.FindAll[DatasetUser]("dataset_id = ?", datasetID)
if err != nil {
return nil, err
}
return res, nil
}
代码分析:
- 查找关联记录:通过数据集ID查找所有与该数据集关联的用户记录。
- 返回结果:将查询结果返回给调用者。
判断用户是否已经认领数据集
系统需要提供接口判断某个用户是否已经认领了某个数据集。以下是代码的详细解释:
// IsUserClaimDataset 判断用户是否拥有数据集
func (d *Dataset) IsUserClaimDataset(userID uint, datasetID uint) bool {
// 查找用户与数据集的关联记录
record, err := dao.FindOne[DatasetUser]("user_id = ? and dataset_id = ?", userID, datasetID)
if err != nil {
return false
}
// 如果记录不存在,返回false
if record == nil {
return false
}
return true
}
代码分析:
- 查找关联记录:通过用户ID和数据集ID查找用户与数据集的关联记录。
- 返回判断结果:如果找到记录,则返回true,否则返回false。
总结
本文详细介绍了Sapphire系统中用户认领数据集功能的实现细节。我们从需求分析入手,逐步讲解了添加用户到数据集、移除用户从数据集、列出数据集的用户以及判断用户是否已经认领数据集的具体代码实现。