package dal import ( "eai_agentplatform/backend/internal/model" ) // Certificate 证书仓库。 type CertificateDAO struct{ *QueryBuilder } // GetByExamRecord 按考试记录取证书。 // // 颁发幂等的依据:同一份 exam_record 只发一张证书。 // (此前这里叫 GetByUserAndExam、按不存在的 exam_id 列查,一调即 SQL 报错; // 表上只有 exam_record_id,且颁发幂等本来就该按考试记录而不是按用户+考试。) func (r CertificateDAO) GetByExamRecord(examRecordID uint) (model.Certificate, bool) { var c model.Certificate if r.Type(&c).Where("exam_record_id = ?", examRecordID).First(&c) { return c, true } return model.Certificate{}, false } // ListAll 取全部证书(issued_at 倒序,管理端全员视图)。 func (r CertificateDAO) ListAll() []model.Certificate { var items []model.Certificate if r.Type(&items).Order("issued_at DESC").Find(&items) { return items } return nil } // ListByUser 获取某用户的证书列表。 func (r CertificateDAO) ListByUser(userID uint) []model.Certificate { var items []model.Certificate if r.Type(&items).Where("user_id = ?", userID).Order("issued_at DESC").Find(&items) { return items } return nil } // GetByID 按 ID 获取。 func (r CertificateDAO) GetByID(id uint) (model.Certificate, bool) { var c model.Certificate if r.Type(&c).Where("id = ?", id).First(&c) { return c, true } return model.Certificate{}, false } // Insert 创建证书。 func (r CertificateDAO) Insert(c *model.Certificate) bool { return r.QueryBuilder.Insert(c) } // CountByUser 统计某用户的证书数。 func (r CertificateDAO) CountByUser(userID uint) int64 { var c int64 r.Inner().Model(&model.Certificate{}).Where("user_id = ?", userID).Count(&c) return c }