Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Refactor] repositories in frontend #1919

Merged
merged 2 commits into from
Jul 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
126 changes: 126 additions & 0 deletions frontend/plugins/repositories.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
import { Plugin } from '@nuxt/types'
import { APITaskStatusRepository } from '@/repositories/celery/apiTaskStatusRepository'
import { APICatalogRepository } from '@/repositories/upload/apiCatalogRepository'
import { APIParseRepository } from '@/repositories/upload/apiParseRepository'
import { APISequenceLabelingRepository } from '@/repositories/tasks/sequenceLabeling/apiSequenceLabeling'
import { APISeq2seqRepository } from '@/repositories/tasks/seq2seq/apiSeq2seq'
import { APIConfigRepository } from '@/repositories/autoLabeling/config/apiConfigRepository'
import { APITemplateRepository } from '@/repositories/autoLabeling/template/apiTemplateRepository'
import { APIUserRepository } from '@/repositories/user/apiUserRepository'
import { APIMetricsRepository } from '@/repositories/metrics/apiMetricsRepository'
import { APIRoleRepository } from '@/repositories/role/apiRoleRepository'
import { APIProjectRepository } from '@/repositories/project/apiProjectRepository'
import { LocalStorageOptionRepository } from '@/repositories/option/apiOptionRepository'
import { APIMemberRepository } from '@/repositories/member/apiMemberRepository'
import { APILabelRepository } from '@/repositories/label/apiLabelRepository'
import { APIExampleRepository } from '@/repositories/example/apiDocumentRepository'
import { APICommentRepository } from '@/repositories/comment/apiCommentRepository'
import { APIAuthRepository } from '@/repositories/auth/apiAuthRepository'
import { APITextClassificationRepository } from '@/repositories/tasks/textClassification/apiTextClassification'
import { APIDownloadFormatRepository } from '@/repositories/download/apiDownloadFormatRepository'
import { APIDownloadRepository } from '@/repositories/download/apiDownloadRepository'
import { APITagRepository } from '@/repositories/tag/apiTagRepository'
import { ApiRelationRepository } from '@/repositories/tasks/sequenceLabeling/apiRelationRepository'
import { ApiBoundingBoxRepository } from '@/repositories/tasks/boundingBox/apiBoundingBoxRepository'
import { ApiSegmentationRepository } from '@/repositories/tasks/segmentation/apiSegmentationRepository'

export interface Repositories {
// User
auth: APIAuthRepository
user: APIUserRepository

// Project
project: APIProjectRepository
member: APIMemberRepository
role: APIRoleRepository
tag: APITagRepository

// Example
example: APIExampleRepository
comment: APICommentRepository
taskStatus: APITaskStatusRepository
metrics: APIMetricsRepository
option: LocalStorageOptionRepository

// Auto Labeling
config: APIConfigRepository
template: APITemplateRepository

// Upload
catalog: APICatalogRepository
parse: APIParseRepository

// Download
downloadFormat: APIDownloadFormatRepository
download: APIDownloadRepository

// Label Type
categoryType: APILabelRepository
spanType: APILabelRepository
relationType: APILabelRepository

// Label
category: APITextClassificationRepository
span: APISequenceLabelingRepository
relation: ApiRelationRepository
textLabel: APISeq2seqRepository
boundingBox: ApiBoundingBoxRepository
segmentation: ApiSegmentationRepository
}

declare module 'vue/types/vue' {
interface Vue {
readonly $repositories: Repositories
}
}

const repositories: Repositories = {
// User
auth: new APIAuthRepository(),
user: new APIUserRepository(),

// Project
project: new APIProjectRepository(),
member: new APIMemberRepository(),
role: new APIRoleRepository(),
tag: new APITagRepository(),

// Example
example: new APIExampleRepository(),
comment: new APICommentRepository(),
taskStatus: new APITaskStatusRepository(),
metrics: new APIMetricsRepository(),
option: new LocalStorageOptionRepository(),

// Auto Labeling
config: new APIConfigRepository(),
template: new APITemplateRepository(),

// Upload
catalog: new APICatalogRepository(),
parse: new APIParseRepository(),

// Download
downloadFormat: new APIDownloadFormatRepository(),
download: new APIDownloadRepository(),

// Label Type
categoryType: new APILabelRepository('category-type'),
spanType: new APILabelRepository('span-type'),
relationType: new APILabelRepository('relation-type'),

// Label
category: new APITextClassificationRepository(),
span: new APISequenceLabelingRepository(),
relation: new ApiRelationRepository(),
textLabel: new APISeq2seqRepository(),
boundingBox: new ApiBoundingBoxRepository(),
segmentation: new ApiSegmentationRepository()
}

const plugin: Plugin = (_, inject) => {
inject('repositories', repositories)
}

export default plugin
export { repositories }
175 changes: 51 additions & 124 deletions frontend/plugins/services.ts
Original file line number Diff line number Diff line change
@@ -1,51 +1,28 @@
import { Plugin } from '@nuxt/types'
import { APITaskStatusRepository } from '@/repositories/celery/apiTaskStatusRepository'
import { TaskStatusApplicationService } from '@/services/application/celery/taskStatusApplicationService'
import { APICatalogRepository } from '../repositories/upload/apiCatalogRepository'
import { CatalogApplicationService } from '../services/application/upload/catalogApplicationService'
import { APIParseRepository } from '../repositories/upload/apiParseRepository'
import { ParseApplicationService } from '../services/application/upload/parseApplicationService'
import { APISequenceLabelingRepository } from '~/repositories/tasks/sequenceLabeling/apiSequenceLabeling'
import { APISeq2seqRepository } from '~/repositories/tasks/seq2seq/apiSeq2seq'
import { APIConfigRepository } from '~/repositories/autoLabeling/config/apiConfigRepository'
import { APITemplateRepository } from '~/repositories/autoLabeling/template/apiTemplateRepository'
import { APIUserRepository } from '~/repositories/user/apiUserRepository'
import { APIMetricsRepository } from '~/repositories/metrics/apiMetricsRepository'
import { APIRoleRepository } from '~/repositories/role/apiRoleRepository'
import { APIProjectRepository } from '~/repositories/project/apiProjectRepository'
import { LocalStorageOptionRepository } from '~/repositories/option/apiOptionRepository'
import { APIMemberRepository } from '~/repositories/member/apiMemberRepository'
import { APILabelRepository } from '~/repositories/label/apiLabelRepository'
import { APIExampleRepository } from '~/repositories/example/apiDocumentRepository'
import { APICommentRepository } from '~/repositories/comment/apiCommentRepository'
import { APIAuthRepository } from '~/repositories/auth/apiAuthRepository'
import { LabelApplicationService } from '~/services/application/label/labelApplicationService'
import { MemberApplicationService } from '~/services/application/member/memberApplicationService'
import { UserApplicationService } from '~/services/application/user/userApplicationService'
import { RoleApplicationService } from '~/services/application/role/roleApplicationService'
import { ProjectApplicationService } from '~/services/application/project/projectApplicationService'
import { CommentApplicationService } from '~/services/application/comment/commentApplicationService'
import { MetricsApplicationService } from '~/services/application/metrics/metricsApplicationService'
import { ExampleApplicationService } from '~/services/application/example/exampleApplicationService'
import { OptionApplicationService } from '~/services/application/option/optionApplicationService'
import { SequenceLabelingApplicationService } from '~/services/application/tasks/sequenceLabeling/sequenceLabelingApplicationService'
import { Seq2seqApplicationService } from '~/services/application/tasks/seq2seq/seq2seqApplicationService'
import { ConfigApplicationService } from '~/services/application/autoLabeling/configApplicationService'
import { TemplateApplicationService } from '~/services/application/autoLabeling/templateApplicationService'
import { APITextClassificationRepository } from '~/repositories/tasks/textClassification/apiTextClassification'
import { TextClassificationService } from '~/services/application/tasks/textClassification/textClassificationApplicationService'
import { AuthApplicationService } from '~/services/application/auth/authApplicationService'
import { APIDownloadFormatRepository } from '~/repositories/download/apiDownloadFormatRepository'
import { APIDownloadRepository } from '~/repositories/download/apiDownloadRepository'
import { DownloadApplicationService } from '~/services/application/download/downloadApplicationService'
import { DownloadFormatApplicationService } from '~/services/application/download/downloadFormatApplicationService'
import { APITagRepository } from '~/repositories/tag/apiTagRepository'
import { TagApplicationService } from '~/services/application/tag/tagApplicationService'
import { ApiRelationRepository } from '~/repositories/tasks/sequenceLabeling/apiRelationRepository'
import { ApiBoundingBoxRepository } from '~/repositories/tasks/boundingBox/apiBoundingBoxRepository'
import { BoundingBoxApplicationService } from '~/services/application/tasks/boundingBox/boundingBoxApplicationService'
import { ApiSegmentationRepository } from '~/repositories/tasks/segmentation/apiSegmentationRepository'
import { SegmentationApplicationService } from '~/services/application/tasks/segmentation/segmentationApplicationService'
import { CatalogApplicationService } from '@/services/application/upload/catalogApplicationService'
import { ParseApplicationService } from '@/services/application/upload/parseApplicationService'
import { LabelApplicationService } from '@/services/application/label/labelApplicationService'
import { MemberApplicationService } from '@/services/application/member/memberApplicationService'
import { UserApplicationService } from '@/services/application/user/userApplicationService'
import { RoleApplicationService } from '@/services/application/role/roleApplicationService'
import { ProjectApplicationService } from '@/services/application/project/projectApplicationService'
import { CommentApplicationService } from '@/services/application/comment/commentApplicationService'
import { MetricsApplicationService } from '@/services/application/metrics/metricsApplicationService'
import { ExampleApplicationService } from '@/services/application/example/exampleApplicationService'
import { OptionApplicationService } from '@/services/application/option/optionApplicationService'
import { SequenceLabelingApplicationService } from '@/services/application/tasks/sequenceLabeling/sequenceLabelingApplicationService'
import { Seq2seqApplicationService } from '@/services/application/tasks/seq2seq/seq2seqApplicationService'
import { ConfigApplicationService } from '@/services/application/autoLabeling/configApplicationService'
import { TemplateApplicationService } from '@/services/application/autoLabeling/templateApplicationService'
import { TextClassificationService } from '@/services/application/tasks/textClassification/textClassificationApplicationService'
import { AuthApplicationService } from '@/services/application/auth/authApplicationService'
import { DownloadApplicationService } from '@/services/application/download/downloadApplicationService'
import { DownloadFormatApplicationService } from '@/services/application/download/downloadFormatApplicationService'
import { TagApplicationService } from '@/services/application/tag/tagApplicationService'
import { BoundingBoxApplicationService } from '@/services/application/tasks/boundingBox/boundingBoxApplicationService'
import { SegmentationApplicationService } from '@/services/application/tasks/segmentation/segmentationApplicationService'
import { repositories } from './repositories'

export interface Services {
categoryType: LabelApplicationService
Expand Down Expand Up @@ -82,85 +59,35 @@ declare module 'vue/types/vue' {
}

const plugin: Plugin = (_, inject) => {
const memberRepository = new APIMemberRepository()
const userRepository = new APIUserRepository()
const roleRepository = new APIRoleRepository()
const projectRepository = new APIProjectRepository()
const commentRepository = new APICommentRepository()
const metricsRepository = new APIMetricsRepository()
const exampleRepository = new APIExampleRepository()
const textClassificationRepository = new APITextClassificationRepository()
const sequenceLabelingRepository = new APISequenceLabelingRepository()
const linkRepository = new ApiRelationRepository()
const seq2seqRepository = new APISeq2seqRepository()
const optionRepository = new LocalStorageOptionRepository()
const configRepository = new APIConfigRepository()
const tagRepository = new APITagRepository()
const templateRepository = new APITemplateRepository()
const authRepository = new APIAuthRepository()
const catalogRepository = new APICatalogRepository()
const parseRepository = new APIParseRepository()
const taskStatusRepository = new APITaskStatusRepository()
const downloadFormatRepository = new APIDownloadFormatRepository()
const downloadRepository = new APIDownloadRepository()
const boundingBoxRepository = new ApiBoundingBoxRepository()
const segmentationRepository = new ApiSegmentationRepository()

const categoryType = new LabelApplicationService(new APILabelRepository('category-type'))
const spanType = new LabelApplicationService(new APILabelRepository('span-type'))
const relationType = new LabelApplicationService(new APILabelRepository('relation-type'))
const member = new MemberApplicationService(memberRepository)
const user = new UserApplicationService(userRepository)
const role = new RoleApplicationService(roleRepository)
const project = new ProjectApplicationService(projectRepository)
const comment = new CommentApplicationService(commentRepository)
const metrics = new MetricsApplicationService(metricsRepository)
const example = new ExampleApplicationService(exampleRepository)
const textClassification = new TextClassificationService(textClassificationRepository)
const sequenceLabeling = new SequenceLabelingApplicationService(
sequenceLabelingRepository,
linkRepository
)
const bbox = new BoundingBoxApplicationService(boundingBoxRepository)
const segmentation = new SegmentationApplicationService(segmentationRepository)
const seq2seq = new Seq2seqApplicationService(seq2seqRepository)
const option = new OptionApplicationService(optionRepository)
const config = new ConfigApplicationService(configRepository)
const tag = new TagApplicationService(tagRepository)
const template = new TemplateApplicationService(templateRepository)
const auth = new AuthApplicationService(authRepository)
const catalog = new CatalogApplicationService(catalogRepository)
const parse = new ParseApplicationService(parseRepository)
const taskStatus = new TaskStatusApplicationService(taskStatusRepository)
const downloadFormat = new DownloadFormatApplicationService(downloadFormatRepository)
const download = new DownloadApplicationService(downloadRepository)

const services: Services = {
categoryType,
spanType,
relationType,
member,
user,
role,
project,
comment,
metrics,
example,
textClassification,
sequenceLabeling,
seq2seq,
option,
config,
template,
auth,
catalog,
parse,
taskStatus,
downloadFormat,
download,
tag,
bbox,
segmentation
categoryType: new LabelApplicationService(repositories.categoryType),
spanType: new LabelApplicationService(repositories.spanType),
relationType: new LabelApplicationService(repositories.relationType),
member: new MemberApplicationService(repositories.member),
user: new UserApplicationService(repositories.user),
role: new RoleApplicationService(repositories.role),
project: new ProjectApplicationService(repositories.project),
comment: new CommentApplicationService(repositories.comment),
metrics: new MetricsApplicationService(repositories.metrics),
example: new ExampleApplicationService(repositories.example),
textClassification: new TextClassificationService(repositories.category),
sequenceLabeling: new SequenceLabelingApplicationService(
repositories.span,
repositories.relation
),
seq2seq: new Seq2seqApplicationService(repositories.textLabel),
option: new OptionApplicationService(repositories.option),
config: new ConfigApplicationService(repositories.config),
template: new TemplateApplicationService(repositories.template),
auth: new AuthApplicationService(repositories.auth),
catalog: new CatalogApplicationService(repositories.catalog),
parse: new ParseApplicationService(repositories.parse),
taskStatus: new TaskStatusApplicationService(repositories.taskStatus),
downloadFormat: new DownloadFormatApplicationService(repositories.downloadFormat),
download: new DownloadApplicationService(repositories.download),
tag: new TagApplicationService(repositories.tag),
bbox: new BoundingBoxApplicationService(repositories.boundingBox),
segmentation: new SegmentationApplicationService(repositories.segmentation)
}
inject('services', services)
}
Expand Down