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.

38 lines
1.7 KiB

  1. import ApiService from '@/services/api.service'
  2. import { RelationRepository } from "~/domain/models/tasks/relationRepository"
  3. import { RelationItem } from "~/domain/models/tasks/relation"
  4. export class ApiRelationRepository implements RelationRepository {
  5. constructor(
  6. private readonly request = ApiService
  7. ) {
  8. }
  9. async list(projectId: string, exampleId: number): Promise<RelationItem[]> {
  10. const url = `/projects/${projectId}/examples/${exampleId}/relations`
  11. const response = await this.request.get(url)
  12. return response.data.map((relation: any) => RelationItem.valueOf(relation))
  13. }
  14. async create(projectId: string, exampleId: number, item: RelationItem): Promise<RelationItem> {
  15. const url = `/projects/${projectId}/examples/${exampleId}/relations`
  16. const response = await this.request.post(url, item.toObject())
  17. return RelationItem.valueOf(response.data)
  18. }
  19. async update(projectId: string, exampleId: number, relationId: number, relationType: number): Promise<RelationItem> {
  20. const url = `/projects/${projectId}/examples/${exampleId}/relations/${relationId}`
  21. const response = await this.request.patch(url, {type: relationType})
  22. return RelationItem.valueOf(response.data)
  23. }
  24. async delete(projectId: string, exampleId: number, relationId: number): Promise<void> {
  25. const url = `/projects/${projectId}/examples/${exampleId}/relations/${relationId}`
  26. const response = await this.request.delete(url)
  27. }
  28. async bulkDelete(projectId: string, exampleId: number, relationIds: number[]): Promise<void> {
  29. const url = `/projects/${projectId}/examples/${exampleId}/relations`
  30. await this.request.delete(url, {ids: relationIds})
  31. }
  32. }