diff --git a/app/controllers/api/v1/projects/datasets_controller.rb b/app/controllers/api/v1/projects/datasets_controller.rb new file mode 100644 index 000000000..a3d3a54b3 --- /dev/null +++ b/app/controllers/api/v1/projects/datasets_controller.rb @@ -0,0 +1,38 @@ +class Api::V1::Projects::DatasetsController < Api::V1::BaseController + before_action :require_public_and_member_above + before_action :find_dataset, only: [:update, :show] + + def create + return render_error('该项目下已存在数据集!') if @project.project_dataset.present? + @project_dataset = ProjectDataset.new(dataset_params.merge!(project_id: @project.id)) + if @project_dataset.save! + render_ok + else + render_error('创建数据集失败!') + end + end + + def update + @project_dataset.attributes = dataset_params + if @project_dataset.save! + render_ok + else + render_error("更新数据集失败!") + end + end + + def show + @attachments = @project_dataset.attachments.includes(:author) + end + + private + def dataset_params + params.permit(:title, :description) + end + + def find_dataset + @project_dataset = @project.project_dataset + return render_not_found unless @project_dataset.present? + end + +end \ No newline at end of file diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index ecc4760b5..46810007b 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -95,6 +95,9 @@ class AttachmentsController < ApplicationController @attachment.disk_directory = month_folder @attachment.cloud_url = remote_path @attachment.uuid = SecureRandom.uuid + @attachment.description = params[:description] + @attachment.container_id = params[:container_id] + @attachment.container_type = params[:container_type] @attachment.save! else logger.info "文件已存在,id = #{@attachment.id}, filename = #{@attachment.filename}" diff --git a/app/models/project_dataset.rb b/app/models/project_dataset.rb index 1de935529..a7e3f4c30 100644 --- a/app/models/project_dataset.rb +++ b/app/models/project_dataset.rb @@ -17,5 +17,6 @@ class ProjectDataset < ApplicationRecord belongs_to :project - + has_many :attachments, as: :container, dependent: :destroy + end diff --git a/app/views/api/v1/attachments/_detail.json.jbuilder b/app/views/api/v1/attachments/_detail.json.jbuilder new file mode 100644 index 000000000..7998812f4 --- /dev/null +++ b/app/views/api/v1/attachments/_detail.json.jbuilder @@ -0,0 +1,11 @@ +json.id attachment.uuid +json.title attachment.title +json.description attachment.description +json.filesize number_to_human_size(attachment.filesize) +json.is_pdf attachment.is_pdf? +json.url attachment.is_pdf? ? download_url(attachment,disposition:"inline") : download_url(attachment) +json.created_on attachment.created_on.strftime("%Y-%m-%d %H:%M:%S") +json.content_type attachment.content_type +json.creator do + json.partial! "api/v1/users/simple_user", locals: {user: attachment.author} +end \ No newline at end of file diff --git a/app/views/api/v1/attachments/_simple_detail.json.jbuilder b/app/views/api/v1/attachments/_simple_detail.json.jbuilder index 3d56eb82f..78e727035 100644 --- a/app/views/api/v1/attachments/_simple_detail.json.jbuilder +++ b/app/views/api/v1/attachments/_simple_detail.json.jbuilder @@ -1,7 +1,8 @@ -json.id attachment.id +json.id attachment.uuid json.title attachment.title +json.description attachment.description json.filesize number_to_human_size(attachment.filesize) json.is_pdf attachment.is_pdf? json.url attachment.is_pdf? ? download_url(attachment,disposition:"inline") : download_url(attachment) -json.created_on attachment.created_on.strftime("%Y-%m-%d %H:%M") +json.created_on attachment.created_on.strftime("%Y-%m-%d %H:%M:%S") json.content_type attachment.content_type diff --git a/app/views/api/v1/projects/datasets/show.json.jbuilder b/app/views/api/v1/projects/datasets/show.json.jbuilder new file mode 100644 index 000000000..fe4c74dcf --- /dev/null +++ b/app/views/api/v1/projects/datasets/show.json.jbuilder @@ -0,0 +1,4 @@ +json.(@project_dataset, :id, :title, :description) +json.attachments @attachments do |at| + json.partial! "api/v1/attachments/detail", locals: {attachment: at} +end \ No newline at end of file diff --git a/config/routes/api.rb b/config/routes/api.rb index dde85fe3c..ed1ea9b42 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -78,6 +78,7 @@ defaults format: :json do # projects文件夹下的 scope module: :projects do + resource :dataset, only: [:create, :update, :show] resources :actions, module: 'actions' do collection do post :disable