mirror of https://github.com/doccano/doccano.git
pythondatasetnatural-language-processingdata-labelingmachine-learningannotation-tooldatasetsactive-learningtext-annotation
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.2 KiB
105 lines
3.2 KiB
import { ProjectReadItem, ProjectWriteItem, CurrentUsersRole, ProjectType } from '@/models/project'
|
|
import { ProjectItemListRepository } from '@/repositories/project/interface'
|
|
import { FormatItem } from '@/models/format'
|
|
|
|
export class FormatDTO {
|
|
example: string
|
|
type: string
|
|
text: string
|
|
extension: string
|
|
|
|
constructor(item: FormatItem) {
|
|
this.example = item.example
|
|
this.type = item.type
|
|
this.text = item.text
|
|
this.extension = item.extension
|
|
}
|
|
}
|
|
export class ProjectDTO {
|
|
id: number
|
|
name: string
|
|
description: string
|
|
guideline: string
|
|
current_users_role: CurrentUsersRole
|
|
projectType: ProjectType
|
|
updatedAt: string
|
|
enableRandomizeDocOrder: boolean
|
|
enableShareAnnotation: boolean
|
|
pageLink: string
|
|
downloadFormats: FormatDTO[]
|
|
uploadFormats: FormatDTO[]
|
|
|
|
constructor(item: ProjectReadItem) {
|
|
this.id = item.id
|
|
this.name = item.name
|
|
this.description = item.description
|
|
this.guideline = item.guideline
|
|
this.current_users_role = item.current_users_role
|
|
this.projectType = item.project_type
|
|
this.updatedAt = item.updated_at
|
|
this.enableRandomizeDocOrder = item.randomize_document_order
|
|
this.enableShareAnnotation = item.collaborative_annotation
|
|
this.pageLink = item.annotationPageLink
|
|
this.downloadFormats = item.downloadFormats.map(f => new FormatDTO(f))
|
|
this.uploadFormats = item.uploadFormats.map(f => new FormatDTO(f))
|
|
}
|
|
}
|
|
|
|
export type ProjectWriteDTO = Pick<ProjectDTO, 'id' | 'name' | 'description' | 'guideline' | 'projectType' | 'enableRandomizeDocOrder' | 'enableShareAnnotation'>
|
|
|
|
export class ProjectApplicationService {
|
|
constructor(
|
|
private readonly repository: ProjectItemListRepository
|
|
) {}
|
|
|
|
public async list(): Promise<ProjectDTO[]> {
|
|
try {
|
|
const items = await this.repository.list()
|
|
return items.map(item => new ProjectDTO(item))
|
|
} catch(e) {
|
|
throw new Error(e.response.data.detail)
|
|
}
|
|
}
|
|
|
|
public async findById(id: string): Promise<ProjectDTO> {
|
|
const item = await this.repository.findById(id)
|
|
const response = new ProjectDTO(item)
|
|
return new ProjectDTO(item)
|
|
}
|
|
|
|
public async create(item: ProjectWriteDTO): Promise<ProjectDTO> {
|
|
try {
|
|
const project = this.toWriteModel(item)
|
|
const response = await this.repository.create(project)
|
|
return new ProjectDTO(response)
|
|
} catch(e) {
|
|
throw new Error(e.response.data.detail)
|
|
}
|
|
}
|
|
|
|
public async update(item: ProjectWriteDTO): Promise<void> {
|
|
try {
|
|
const project = this.toWriteModel(item)
|
|
await this.repository.update(project)
|
|
} catch(e) {
|
|
throw new Error(e.response.data.detail)
|
|
}
|
|
}
|
|
|
|
public bulkDelete(items: ProjectDTO[]): Promise<void> {
|
|
const ids = items.map(item => item.id)
|
|
return this.repository.bulkDelete(ids)
|
|
}
|
|
|
|
private toWriteModel(item: ProjectWriteDTO): ProjectWriteItem {
|
|
return new ProjectWriteItem(
|
|
item.id,
|
|
item.name,
|
|
item.description,
|
|
item.guideline,
|
|
item.projectType,
|
|
item.enableRandomizeDocOrder,
|
|
item.enableShareAnnotation
|
|
)
|
|
}
|
|
}
|