mirror of
https://github.com/standardnotes/server
synced 2026-07-14 00:01:54 -04:00
47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import { inject, injectable } from 'inversify'
|
|
import { Logger } from 'winston'
|
|
|
|
import TYPES from '../../../Bootstrap/Types'
|
|
import { UseCaseInterface } from '../UseCaseInterface'
|
|
import { CreateUploadSessionDTO } from './CreateUploadSessionDTO'
|
|
import { CreateUploadSessionResponse } from './CreateUploadSessionResponse'
|
|
import { FileUploaderInterface } from '../../Services/FileUploaderInterface'
|
|
import { UploadRepositoryInterface } from '../../Upload/UploadRepositoryInterface'
|
|
|
|
@injectable()
|
|
export class CreateUploadSession implements UseCaseInterface {
|
|
constructor(
|
|
@inject(TYPES.FileUploader) private fileUploader: FileUploaderInterface,
|
|
@inject(TYPES.UploadRepository) private uploadRepository: UploadRepositoryInterface,
|
|
@inject(TYPES.Logger) private logger: Logger,
|
|
) {}
|
|
|
|
async execute(dto: CreateUploadSessionDTO): Promise<CreateUploadSessionResponse> {
|
|
try {
|
|
this.logger.debug(`Creating upload session for resource: ${dto.resourceRemoteIdentifier}`)
|
|
|
|
const filePath = `${dto.ownerUuid}/${dto.resourceRemoteIdentifier}`
|
|
|
|
const uploadId = await this.fileUploader.createUploadSession(filePath)
|
|
|
|
this.logger.debug(`Created upload session with id: ${uploadId}`)
|
|
|
|
await this.uploadRepository.storeUploadSession(filePath, uploadId)
|
|
|
|
return {
|
|
success: true,
|
|
uploadId,
|
|
}
|
|
} catch (error) {
|
|
this.logger.error(
|
|
`Could not create upload session for resource: ${dto.resourceRemoteIdentifier} - ${(error as Error).message}`,
|
|
)
|
|
|
|
return {
|
|
success: false,
|
|
message: 'Could not create upload session',
|
|
}
|
|
}
|
|
}
|
|
}
|