func()

in internal/subscriber/subscribe.go [174:205]


func (s *SubscriberService) handleArchive(inMetadata *model.Metadata) error {
	existingMetadata, err := s.metadataRepo.Get(inMetadata.Bucket, inMetadata.Name)
	if err != nil && err != sql.ErrNoRows {
		return fmt.Errorf("error getting existing metadata: %w", err)
	}

	// Check if incoming metadata is necessary to handle
	if existingMetadata != nil {
		if existingMetadata.Updated.After(inMetadata.Updated) {
			return nil // skip, already in most recent update
		}

		if existingMetadata.StorageClass == inMetadata.StorageClass {
			return nil // skip, already in correct StorageClass
		}
	} else {
		// if metadata does not exist, it is a normal insert
		return s.handleFinalize(inMetadata)
	}

	if err := s.metadataRepo.Update(inMetadata.Bucket, inMetadata.Name, inMetadata.StorageClass,
		inMetadata.Size, inMetadata.Updated); err != nil {
		return fmt.Errorf("error updating metadata: %w", err)
	}

	if err := s.directoryRepo.UpsertArchiveParentDirs(repo.StorageClass(existingMetadata.StorageClass),
		repo.StorageClass(inMetadata.StorageClass), inMetadata.Bucket, inMetadata.Name, inMetadata.Size); err != nil {
		return fmt.Errorf("error upserting parent directories: %w", err)
	}

	return nil
}