Skip to content

Commit 7f37fe1

Browse files
committed
add use cases for editing template to TemplatesRepository.ts
1 parent 9c7e9d8 commit 7f37fe1

17 files changed

+561
-3
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { CustomTerms } from '../../../datasets/domain/models/Dataset'
2+
3+
export interface UpdateTemplateLicenseTermsDTO {
4+
name?: string
5+
customTerms?: CustomTerms
6+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { TemplateFieldDTO, TemplateInstructionDTO } from './CreateTemplateDTO'
2+
3+
export interface UpdateTemplateMetadataDTO {
4+
name?: string
5+
fields?: TemplateFieldDTO[]
6+
instructions?: TemplateInstructionDTO[]
7+
}

src/templates/domain/repositories/ITemplatesRepository.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,21 @@
11
import { CreateTemplateDTO } from '../dtos/CreateTemplateDTO'
2+
import { UpdateTemplateLicenseTermsDTO } from '../dtos/UpdateTemplateLicenseTermsDTO'
3+
import { UpdateTemplateMetadataDTO } from '../dtos/UpdateTemplateMetadataDTO'
24
import { Template } from '../models/Template'
5+
import { TermsOfAccess } from '../../../datasets/domain/models/Dataset'
36

47
export interface ITemplatesRepository {
58
createTemplate(collectionIdOrAlias: number | string, template: CreateTemplateDTO): Promise<void>
9+
updateTemplateMetadata(
10+
templateId: number,
11+
payload: UpdateTemplateMetadataDTO,
12+
replace?: boolean
13+
): Promise<void>
14+
updateTemplateLicenseTerms(
15+
templateId: number,
16+
payload: UpdateTemplateLicenseTermsDTO
17+
): Promise<void>
18+
updateTemplateTermsOfAccess(templateId: number, termsOfAccess: TermsOfAccess): Promise<void>
619
getTemplate(templateId: number): Promise<Template>
720
getTemplatesByCollectionId(collectionIdOrAlias: number | string): Promise<Template[]>
821
deleteTemplate(templateId: number): Promise<void>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { UpdateTemplateLicenseTermsDTO } from '../dtos/UpdateTemplateLicenseTermsDTO'
3+
import { ITemplatesRepository } from '../repositories/ITemplatesRepository'
4+
5+
export class UpdateTemplateLicenseTerms implements UseCase<void> {
6+
private templatesRepository: ITemplatesRepository
7+
8+
constructor(templatesRepository: ITemplatesRepository) {
9+
this.templatesRepository = templatesRepository
10+
}
11+
12+
async execute(templateId: number, payload: UpdateTemplateLicenseTermsDTO): Promise<void> {
13+
return await this.templatesRepository.updateTemplateLicenseTerms(templateId, payload)
14+
}
15+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { UpdateTemplateMetadataDTO } from '../dtos/UpdateTemplateMetadataDTO'
3+
import { ITemplatesRepository } from '../repositories/ITemplatesRepository'
4+
5+
export class UpdateTemplateMetadata implements UseCase<void> {
6+
private templatesRepository: ITemplatesRepository
7+
8+
constructor(templatesRepository: ITemplatesRepository) {
9+
this.templatesRepository = templatesRepository
10+
}
11+
12+
async execute(
13+
templateId: number,
14+
payload: UpdateTemplateMetadataDTO,
15+
replace = false
16+
): Promise<void> {
17+
return await this.templatesRepository.updateTemplateMetadata(templateId, payload, replace)
18+
}
19+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { TermsOfAccess } from '../../../datasets/domain/models/Dataset'
3+
import { ITemplatesRepository } from '../repositories/ITemplatesRepository'
4+
5+
export class UpdateTemplateTermsOfAccess implements UseCase<void> {
6+
private templatesRepository: ITemplatesRepository
7+
8+
constructor(templatesRepository: ITemplatesRepository) {
9+
this.templatesRepository = templatesRepository
10+
}
11+
12+
async execute(templateId: number, termsOfAccess: TermsOfAccess): Promise<void> {
13+
return await this.templatesRepository.updateTemplateTermsOfAccess(templateId, termsOfAccess)
14+
}
15+
}

src/templates/index.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,29 @@ import { CreateTemplate } from './domain/useCases/CreateTemplate'
33
import { DeleteTemplate } from './domain/useCases/DeleteTemplate'
44
import { GetTemplatesByCollectionId } from './domain/useCases/GetTemplatesByCollectionId'
55
import { GetTemplate } from './domain/useCases/GetTemplate'
6+
import { UpdateTemplateMetadata } from './domain/useCases/UpdateTemplateMetadata'
7+
import { UpdateTemplateLicenseTerms } from './domain/useCases/UpdateTemplateLicenseTerms'
8+
import { UpdateTemplateTermsOfAccess } from './domain/useCases/UpdateTemplateTermsOfAccess'
69

710
const templatesRepository = new TemplatesRepository()
811

912
const createTemplate = new CreateTemplate(templatesRepository)
1013
const deleteTemplate = new DeleteTemplate(templatesRepository)
1114
const getTemplatesByCollectionId = new GetTemplatesByCollectionId(templatesRepository)
1215
const getTemplate = new GetTemplate(templatesRepository)
16+
const updateTemplateMetadata = new UpdateTemplateMetadata(templatesRepository)
17+
const updateTemplateLicenseTerms = new UpdateTemplateLicenseTerms(templatesRepository)
18+
const updateTemplateTermsOfAccess = new UpdateTemplateTermsOfAccess(templatesRepository)
1319

14-
export { createTemplate, deleteTemplate, getTemplatesByCollectionId, getTemplate }
20+
export {
21+
createTemplate,
22+
deleteTemplate,
23+
getTemplatesByCollectionId,
24+
getTemplate,
25+
updateTemplateMetadata,
26+
updateTemplateLicenseTerms,
27+
updateTemplateTermsOfAccess
28+
}
1529
export {
1630
CreateTemplateDTO,
1731
TemplateFieldDTO,
@@ -21,4 +35,6 @@ export {
2135
TemplateFieldValueControlledVocabularyDTO,
2236
TemplateInstructionDTO
2337
} from './domain/dtos/CreateTemplateDTO'
38+
export { UpdateTemplateMetadataDTO } from './domain/dtos/UpdateTemplateMetadataDTO'
39+
export { UpdateTemplateLicenseTermsDTO } from './domain/dtos/UpdateTemplateLicenseTermsDTO'
2440
export { Template, TemplateInstruction } from './domain/models/Template'

src/templates/infra/repositories/TemplatesRepository.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
import { AxiosResponse } from 'axios'
22
import { ApiRepository } from '../../../core/infra/repositories/ApiRepository'
3+
import { TermsOfAccess } from '../../../datasets/domain/models/Dataset'
34
import { CreateTemplateDTO } from '../../domain/dtos/CreateTemplateDTO'
5+
import { UpdateTemplateLicenseTermsDTO } from '../../domain/dtos/UpdateTemplateLicenseTermsDTO'
6+
import { UpdateTemplateMetadataDTO } from '../../domain/dtos/UpdateTemplateMetadataDTO'
47
import { Template } from '../../domain/models/Template'
58
import { ITemplatesRepository } from '../../domain/repositories/ITemplatesRepository'
69
import { TemplatePayload } from './transformers/TemplatePayload'
10+
import { transformTemplateTermsOfAccessToUpdatePayload } from './transformers/templateTermsOfAccessTransformers'
711
import {
812
transformTemplatePayloadToTemplate,
913
transformTemplatePayloadsToTemplates
@@ -26,6 +30,32 @@ export class TemplatesRepository extends ApiRepository implements ITemplatesRepo
2630
})
2731
}
2832

33+
public async updateTemplateMetadata(
34+
templateId: number,
35+
payload: UpdateTemplateMetadataDTO,
36+
replace = false
37+
): Promise<void> {
38+
return this.updateTemplate(templateId, 'metadata', payload, { replace })
39+
}
40+
41+
public async updateTemplateLicenseTerms(
42+
templateId: number,
43+
payload: UpdateTemplateLicenseTermsDTO
44+
): Promise<void> {
45+
return this.updateTemplate(templateId, 'licenseTerms', payload)
46+
}
47+
48+
public async updateTemplateTermsOfAccess(
49+
templateId: number,
50+
termsOfAccess: TermsOfAccess
51+
): Promise<void> {
52+
return this.updateTemplate(
53+
templateId,
54+
'access',
55+
transformTemplateTermsOfAccessToUpdatePayload(termsOfAccess)
56+
)
57+
}
58+
2959
public async getTemplate(templateId: number): Promise<Template> {
3060
return this.doGet(`/dataverses/${templateId}/template`, true)
3161
.then((response: AxiosResponse<{ data: TemplatePayload }>) =>
@@ -55,4 +85,17 @@ export class TemplatesRepository extends ApiRepository implements ITemplatesRepo
5585
throw error
5686
})
5787
}
88+
89+
private async updateTemplate(
90+
templateId: number,
91+
operation: 'metadata' | 'licenseTerms' | 'access',
92+
payload: object,
93+
queryParams: object = {}
94+
): Promise<void> {
95+
return this.doPut(`/dataverses/${templateId}/${operation}`, payload, queryParams)
96+
.then(() => undefined)
97+
.catch((error) => {
98+
throw error
99+
})
100+
}
58101
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { TermsOfAccess } from '../../../../datasets/domain/models/Dataset'
2+
3+
export const transformTemplateTermsOfAccessToUpdatePayload = (
4+
terms: TermsOfAccess & { termsOfAccess?: string }
5+
) => {
6+
const {
7+
fileAccessRequest,
8+
dataAccessPlace,
9+
originalArchive,
10+
availabilityStatus,
11+
contactForAccess,
12+
sizeOfCollection,
13+
studyCompletion
14+
} = terms
15+
16+
const termsOfAccess = terms.termsOfAccess ?? terms.termsOfAccessForRestrictedFiles
17+
18+
return {
19+
customTermsOfAccess: {
20+
fileAccessRequest,
21+
termsOfAccess,
22+
dataAccessPlace,
23+
originalArchive,
24+
availabilityStatus,
25+
contactForAccess,
26+
sizeOfCollection,
27+
studyCompletion
28+
}
29+
}
30+
}

test/environment/.env

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
POSTGRES_VERSION=17
22
DATAVERSE_DB_USER=dataverse
33
SOLR_VERSION=9.8.0
4-
DATAVERSE_IMAGE_REGISTRY=docker.io
5-
DATAVERSE_IMAGE_TAG=unstable
4+
DATAVERSE_IMAGE_REGISTRY=ghcr.io
5+
DATAVERSE_IMAGE_TAG=11912-edit-template-api
66
DATAVERSE_BOOTSTRAP_TIMEOUT=5m

0 commit comments

Comments
 (0)