| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- package controllers
- import (
- "fmt"
- "io"
- "github.com/gogf/gf/v2/net/ghttp"
- "yx-dataset-server/app/bll"
- "yx-dataset-server/app/errors"
- "yx-dataset-server/app/schema"
- "yx-dataset-server/library/gplus"
- )
- type DatasetFile struct {
- DatasetFileBll bll.IDatasetFile
- }
- func NewDatasetFile(bDatasetFile bll.IDatasetFile) *DatasetFile {
- return &DatasetFile{
- DatasetFileBll: bDatasetFile,
- }
- }
- // Query 查询数据
- func (a *DatasetFile) Query(r *ghttp.Request) {
- switch r.Get("q").String() {
- case "page":
- a.QueryPage(r)
- case "list":
- a.QueryList(r)
- default:
- gplus.ResError(r, errors.ErrUnknownQuery)
- }
- }
- // QueryPage 查询分页数据
- // @Tags
- // @Summary 查询分页数据
- // @Param Authorization header string false "Bearer 用户令牌"
- // @Param current query int true "分页索引" 1
- // @Param pageSize query int true "分页大小" 10
- // @Success 200 []schema.DatasetFile "查询结果:{list:列表数据,pagination:{current:页索引,pageSize:页大小,total:总数量}}"
- // @Failure 400 schema.HTTPError "{error:{code:0,message:未知的查询类型}}"
- // @Failure 401 schema.HTTPError "{error:{code:0,message:未授权}}"
- // @Failure 500 schema.HTTPError "{error:{code:0,message:服务器错误}}"
- // @Router GET /web/v1/dataset_files?q=page
- func (a *DatasetFile) QueryPage(r *ghttp.Request) {
- ctx := gplus.NewContext(r)
- var params schema.DatasetFileQueryParam
- params.DatasetId = r.Get("dataset_id").String()
- result, err := a.DatasetFileBll.Query(ctx, params, schema.DatasetFileQueryOptions{
- PageParam: &schema.PaginationParam{
- PageIndex: gplus.GetPageIndex(r),
- PageSize: gplus.GetPageSize(r),
- },
- })
- if err != nil {
- gplus.ResError(r, err)
- }
- ResPage(r, result.Data, result.PageResult)
- }
- // QueryList 查询列表数据
- // @Tags
- // @Summary 查询列表数据
- // @Param Authorization header string false "Bearer 用户令牌"
- // @Success 200 []schema.DatasetFile "查询结果:{list:列表数据}"
- // @Failure 400 schema.HTTPError "{error:{code:0,message:未知的查询类型}}"
- // @Failure 401 schema.HTTPError "{error:{code:0,message:未授权}}"
- // @Failure 500 schema.HTTPError "{error:{code:0,message:服务器错误}}"
- // @Router GET /web/v1/dataset_files?q=list
- func (a *DatasetFile) QueryList(r *ghttp.Request) {
- ctx := gplus.NewContext(r)
- var params schema.DatasetFileQueryParam
- params.DatasetId = r.Get("dataset_id").String()
- result, err := a.DatasetFileBll.Query(ctx, params)
- if err != nil {
- gplus.ResError(r, err)
- }
- ResSuccess(r, result.Data)
- }
- // Get 获取数据
- // @Summary 获取数据
- // @Param id path string true "记录ID"
- // @Success 200 schema.DatasetFile
- // @Failure 400 schema.HTTPError "{error:{code:0,message:无效的请求参数}}"
- // @Failure 401 schema.HTTPError "{error:{code:0,message:未授权}}"
- // @Failure 500 schema.HTTPError "{error:{code:0,message:服务器错误}}"
- // @Router /web/v1/dataset_file/{id}
- func (a *DatasetFile) Get(r *ghttp.Request) {
- ctx := gplus.NewContext(r)
- result, err := a.DatasetFileBll.Get(ctx, r.Get("id").String())
- if err != nil {
- gplus.ResError(r, err)
- }
- ResSuccess(r, result)
- }
- // Create 创建数据
- // @Tags API-DatasetFile
- // @Summary 创建数据
- // @Param body schema.DatasetFile true "提交的数据"
- // @Success 200 schema.DatasetFile
- // @Failure 400 schema.HTTPError "{error:{code:0,message:无效的请求参数}}"
- // @Failure 401 schema.HTTPError "{error:{code:0,message:未授权}}"
- // @Failure 500 schema.HTTPError "{error:{code:0,message:服务器错误}}"
- // @Router /web/v1/dataset_files/ [post]
- func (a *DatasetFile) Create(r *ghttp.Request) {
- var data schema.DatasetFile
- if err := gplus.ParseJson(r, &data); err != nil {
- gplus.ResError(r, err)
- }
- ctx := gplus.NewContext(r)
- err := a.DatasetFileBll.Create(ctx, data)
- if err != nil {
- gplus.ResError(r, err)
- }
- ResSuccess(r, nil)
- }
- func (a *DatasetFile) BatchCreate(r *ghttp.Request) {
- var data schema.DatasetFiles
- if err := gplus.ParseJson(r, &data); err != nil {
- gplus.ResError(r, err)
- }
- ctx := gplus.NewContext(r)
- err := a.DatasetFileBll.BatchCreate(ctx, data)
- if err != nil {
- gplus.ResError(r, err)
- }
- ResSuccess(r, nil)
- }
- // Update 更新数据
- // @Summary 更新数据
- // @Param body schema.DatasetFile true "更新数据"
- // @Success 200 schema.DatasetFile
- // @Failure 400 schema.HTTPError "{error:{code:0,message:无效的请求参数}}"
- // @Failure 401 schema.HTTPError "{error:{code:0,message:未授权}}"
- // @Failure 500 schema.HTTPError "{error:{code:0,message:服务器错误}}"
- // @Router /web/v1/dataset_files/{id}
- func (a *DatasetFile) Update(r *ghttp.Request) {
- var data schema.DatasetFile
- if err := gplus.ParseJson(r, &data); err != nil {
- gplus.ResError(r, err)
- }
- ctx := gplus.NewContext(r)
- err := a.DatasetFileBll.Update(ctx, r.Get("id").String(), data)
- if err != nil {
- gplus.ResError(r, err)
- }
- ResSuccess(r, nil)
- }
- // Delete 删除数据
- // @Summary 删除数据
- // @Param id path string true "记录ID"
- // @Success 200 schema.HTTPStatus "{status:OK}"
- // @Failure 400 schema.HTTPError "{error:{code:0,message:无效的请求参数}}"
- // @Failure 401 schema.HTTPError "{error:{code:0,message:未授权}}"
- // @Failure 500 schema.HTTPError "{error:{code:0,message:服务器错误}}"
- // @Router /web/v1/dataset_file/{id}
- func (a *DatasetFile) Delete(r *ghttp.Request) {
- ctx := gplus.NewContext(r)
- err := a.DatasetFileBll.Delete(ctx, r.Get("id").String())
- if err != nil {
- gplus.ResError(r, err)
- }
- ResSuccess(r, nil)
- }
- func (a *DatasetFile) BatchDelete(r *ghttp.Request) {
- var Ids schema.DeleteIds
- if err := gplus.ParseJson(r, &Ids); err != nil {
- gplus.ResError(r, err)
- }
- ctx := gplus.NewContext(r)
- err := a.DatasetFileBll.BatchDelete(ctx, Ids.Ids)
- if err != nil {
- gplus.ResError(r, err)
- }
- ResSuccess(r, nil)
- }
- func (a *DatasetFile) Enabled(r *ghttp.Request) {
- ctx := gplus.NewContext(r)
- err := a.DatasetFileBll.UpdateEnabled(ctx, r.Get("id").String(), true)
- if err != nil {
- gplus.ResError(r, err)
- }
- ResSuccess(r, nil)
- }
- func (a *DatasetFile) Disabled(r *ghttp.Request) {
- ctx := gplus.NewContext(r)
- err := a.DatasetFileBll.UpdateEnabled(ctx, r.Get("id").String(), false)
- if err != nil {
- gplus.ResError(r, err)
- }
- ResSuccess(r, nil)
- }
- // CreateV2 上传本地文件(V2版本,直接上传到RagFlow,不再上传Minio)
- // @Summary 上传本地文件到知识库(V2)
- // @Description 接收文件上传,直接上传到RagFlow,不再上传Minio
- // @Param Authorization header string false "Bearer 用户令牌"
- // @Param file formData file true "文件"
- // @Param dataset_id formData string true "知识库ID"
- // @Success 200 schema.HTTPStatus "{status:OK}"
- // @Failure 400 schema.HTTPError "{error:{code:0,message:无效的请求参数}}"
- // @Failure 401 schema.HTTPError "{error:{code:0,message:未授权}}"
- // @Failure 500 schema.HTTPError "{error:{code:0,message:服务器错误}}"
- // @Router POST /web/v1/dataset_files/upload
- func (a *DatasetFile) CreateV2(r *ghttp.Request) {
- ctx := gplus.NewContext(r)
- datasetId := r.Get("dataset_id").String()
- if datasetId == "" {
- gplus.ResError(r, errors.New400Response("dataset_id 不能为空"))
- return
- }
- file, header, err := r.Request.FormFile("file")
- if err != nil {
- gplus.ResError(r, errors.New400Response("请选择要上传的文件"))
- return
- }
- defer file.Close()
- // 直接读入内存后交给 BLL,避免落盘临时文件
- fileData, err := io.ReadAll(file)
- if err != nil {
- gplus.ResError(r, errors.New400Response("读取文件内容失败"))
- return
- }
- if err := a.DatasetFileBll.CreateV2(ctx, schema.UpdateFileParam{
- FileName: header.Filename,
- FileData: fileData,
- FileSize: header.Size,
- DatasetId: datasetId,
- CreatorId: gplus.GetUserId(r),
- }); err != nil {
- gplus.ResError(r, err)
- return
- }
- ResSuccess(r, nil)
- }
- // BatchCreate2 批量上传多个文件到知识库(multipart form-data, 字段名 files)
- // @Summary 批量上传文件到知识库
- // @Param Authorization header string false "Bearer 用户令牌"
- // @Param files formData file true "多文件,表单字段名为 files"
- // @Param dataset_id formData string true "知识库ID"
- // @Success 200 schema.HTTPStatus "{status:OK}"
- // @Failure 400 schema.HTTPError "{error:{code:0,message:无效的请求参数}}"
- // @Router POST /web/v1/dataset_files/batch2
- func (a *DatasetFile) BatchCreateV2(r *ghttp.Request) {
- ctx := gplus.NewContext(r)
- datasetId := r.Get("dataset_id").String()
- if datasetId == "" {
- gplus.ResError(r, errors.New400Response("dataset_id 不能为空"))
- return
- }
- uploads := r.GetUploadFiles("file")
- if len(uploads) == 0 {
- gplus.ResError(r, errors.New400Response("请选择要上传的文件"))
- return
- }
- creatorId := gplus.GetUserId(r)
- params := make([]schema.UpdateFileParam, 0, len(uploads))
- for _, uf := range uploads {
- f, err := uf.Open()
- if err != nil {
- gplus.ResError(r, errors.New400Response(fmt.Sprintf("打开文件【%s】失败", uf.Filename)))
- return
- }
- data, err := io.ReadAll(f)
- _ = f.Close()
- if err != nil {
- gplus.ResError(r, errors.New400Response(fmt.Sprintf("读取文件【%s】失败", uf.Filename)))
- return
- }
- params = append(params, schema.UpdateFileParam{
- FileName: uf.Filename,
- FileData: data,
- FileSize: uf.Size,
- DatasetId: datasetId,
- CreatorId: creatorId,
- })
- }
- if err := a.DatasetFileBll.BatchCreateV2(ctx, datasetId, params); err != nil {
- gplus.ResError(r, err)
- return
- }
- ResSuccess(r, nil)
- }
|