このコミットが含まれているのは:
2026-06-26 00:49:18 +09:00
コミット daf9e7e6fa
12個のファイルの変更368行の追加46行の削除
+22 -14
ファイルの表示
@@ -1,13 +1,13 @@
require 'digest'
class MaterialSyncRunner
Result = Struct.new(:imported, :updated, :suppressed, :failed, :errors, keyword_init: true)
Result = Struct.new(:imported, :updated, :unchanged, :suppressed, :failed,
:errors, keyword_init: true)
def self.sync_enabled!
results = MaterialSyncSource.enabled.order(:id).map { |source| new(source).sync! }
Result.new(imported: results.sum(&:imported),
updated: results.sum(&:updated),
unchanged: results.sum(&:unchanged),
suppressed: results.sum(&:suppressed),
failed: results.sum(&:failed),
errors: results.flat_map(&:errors))
@@ -18,9 +18,12 @@ class MaterialSyncRunner
end
def sync!
result = Result.new(imported: 0, updated: 0, suppressed: 0, failed: 0, errors: [])
result = Result.new(imported: 0, updated: 0, unchanged: 0,
suppressed: 0, failed: 0, errors: [])
candidates.each do |candidate|
next if candidate.blank?
sync_candidate!(candidate, result)
end
@@ -108,8 +111,10 @@ class MaterialSyncRunner
end
def google_drive_file_candidate
build_google_drive_candidate(drive_client.fetch_material_file(google_drive_file_id),
single_file: true)
entry = drive_client.fetch_material_file(google_drive_file_id)
return nil unless entry
build_google_drive_candidate(entry, single_file: true)
end
def build_google_drive_candidate entry, single_file: false
@@ -124,10 +129,6 @@ class MaterialSyncRunner
relative_path:,
filename: entry[:name],
source_file_id: entry[:id])
tempfile =
drive_client.download_to_tempfile(entry[:id], filename: entry[:name])
file_sha256 = Digest::SHA256.file(tempfile.path).hexdigest
tempfile.rewind
{ source_kind: 'google_drive_file',
source_uri: entry[:web_view_link] || google_drive_file_url(entry[:id]),
@@ -135,8 +136,10 @@ class MaterialSyncRunner
source_file_id: entry[:id],
filename: entry[:name],
content_type: entry[:mime_type],
file_tempfile: tempfile,
file_sha256:,
file_downloader: lambda {
drive_client.download_to_tempfile(entry[:id], filename: entry[:name])
},
file_sha256: entry[:sha256_checksum],
export_path:,
profile: @source.profile,
tag: nil,
@@ -171,13 +174,17 @@ class MaterialSyncRunner
def google_drive_folder_id
google_drive_target_id.tap do |id|
raise ArgumentError, 'google_drive_path source_file_id or source_uri is required' if id.blank?
if id.blank?
raise ArgumentError, 'google_drive_path source_file_id or source_uri is required'
end
end
end
def google_drive_file_id
google_drive_target_id.tap do |id|
raise ArgumentError, 'google_drive_file source_file_id or source_uri is required' if id.blank?
if id.blank?
raise ArgumentError, 'google_drive_file source_file_id or source_uri is required'
end
end
end
@@ -201,6 +208,7 @@ class MaterialSyncRunner
def log_result result
Rails.logger.info(material_sync_log(imported: result.imported,
updated: result.updated,
unchanged: result.unchanged,
suppressed: result.suppressed,
failed: result.failed))
end