diff --git a/packages/clients/src/api/account/v3/api.gen.ts b/packages/clients/src/api/account/v3/api.gen.ts index ced97fae8..cc2410441 100644 --- a/packages/clients/src/api/account/v3/api.gen.ts +++ b/packages/clients/src/api/account/v3/api.gen.ts @@ -10,12 +10,14 @@ import { marshalContractApiCheckContractSignatureRequest, marshalContractApiCreateContractSignatureRequest, marshalProjectApiCreateProjectRequest, + marshalProjectApiSetProjectQualificationRequest, marshalProjectApiUpdateProjectRequest, unmarshalCheckContractSignatureResponse, unmarshalContractSignature, unmarshalListContractSignaturesResponse, unmarshalListProjectsResponse, unmarshalProject, + unmarshalProjectQualification, } from './marshalling.gen' import type { CheckContractSignatureResponse, @@ -32,7 +34,9 @@ import type { ProjectApiDeleteProjectRequest, ProjectApiGetProjectRequest, ProjectApiListProjectsRequest, + ProjectApiSetProjectQualificationRequest, ProjectApiUpdateProjectRequest, + ProjectQualification, } from './types.gen' const jsonContentHeaders = { @@ -288,4 +292,31 @@ export class ProjectAPI extends ParentAPI { }, unmarshalProject, ) + + /** + * Set project use case. Set the project use case for a new or existing + * Project, specified by its Project ID. You can customize the use case, sub + * use case, and architecture type you want to use in the Project. + * + * @param request - The request + * {@link ProjectApiSetProjectQualificationRequest} + * @returns A Promise of ProjectQualification + */ + setProjectQualification = ( + request: Readonly = {}, + ) => + this.client.fetch( + { + body: JSON.stringify( + marshalProjectApiSetProjectQualificationRequest( + request, + this.client.settings, + ), + ), + headers: jsonContentHeaders, + method: 'POST', + path: `/account/v3/projects/${validatePathParam('projectId', request.projectId ?? this.client.settings.defaultProjectId)}/project-qualification`, + }, + unmarshalProjectQualification, + ) } diff --git a/packages/clients/src/api/account/v3/index.gen.ts b/packages/clients/src/api/account/v3/index.gen.ts index 4ece97ed7..602eeae7d 100644 --- a/packages/clients/src/api/account/v3/index.gen.ts +++ b/packages/clients/src/api/account/v3/index.gen.ts @@ -20,6 +20,21 @@ export type { ProjectApiDeleteProjectRequest, ProjectApiGetProjectRequest, ProjectApiListProjectsRequest, + ProjectApiSetProjectQualificationRequest, ProjectApiUpdateProjectRequest, + ProjectQualification, + Qualification, + QualificationAiMachine, + QualificationArchitectureType, + QualificationArchiveData, + QualificationContainer, + QualificationDeploySoftware, + QualificationHostApplication, + QualificationHostApplicationSubUseCase, + QualificationHostWebsite, + QualificationHostWebsiteSubUseCase, + QualificationOtherUseCase, + QualificationSetScalewayEnvironment, + QualificationShareData, } from './types.gen' export * as ValidationRules from './validation-rules.gen' diff --git a/packages/clients/src/api/account/v3/marshalling.gen.ts b/packages/clients/src/api/account/v3/marshalling.gen.ts index aad39aeb7..acddd2e3d 100644 --- a/packages/clients/src/api/account/v3/marshalling.gen.ts +++ b/packages/clients/src/api/account/v3/marshalling.gen.ts @@ -3,6 +3,7 @@ import randomName from '@scaleway/random-name' import { isJSONObject, + resolveOneOf, unmarshalArrayOfObject, unmarshalDate, } from '../../../bridge' @@ -17,7 +18,19 @@ import type { ListProjectsResponse, Project, ProjectApiCreateProjectRequest, + ProjectApiSetProjectQualificationRequest, ProjectApiUpdateProjectRequest, + ProjectQualification, + Qualification, + QualificationAiMachine, + QualificationArchiveData, + QualificationContainer, + QualificationDeploySoftware, + QualificationHostApplication, + QualificationHostWebsite, + QualificationOtherUseCase, + QualificationSetScalewayEnvironment, + QualificationShareData, } from './types.gen' const unmarshalContract = (data: unknown): Contract => { @@ -121,6 +134,176 @@ export const unmarshalListProjectsResponse = ( } as ListProjectsResponse } +const unmarshalQualificationAiMachine = ( + data: unknown, +): QualificationAiMachine => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'QualificationAiMachine' failed as data isn't a dictionary.`, + ) + } + + return {} as QualificationAiMachine +} + +const unmarshalQualificationArchiveData = ( + data: unknown, +): QualificationArchiveData => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'QualificationArchiveData' failed as data isn't a dictionary.`, + ) + } + + return {} as QualificationArchiveData +} + +const unmarshalQualificationContainer = ( + data: unknown, +): QualificationContainer => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'QualificationContainer' failed as data isn't a dictionary.`, + ) + } + + return {} as QualificationContainer +} + +const unmarshalQualificationDeploySoftware = ( + data: unknown, +): QualificationDeploySoftware => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'QualificationDeploySoftware' failed as data isn't a dictionary.`, + ) + } + + return {} as QualificationDeploySoftware +} + +const unmarshalQualificationHostApplication = ( + data: unknown, +): QualificationHostApplication => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'QualificationHostApplication' failed as data isn't a dictionary.`, + ) + } + + return { + subUseCase: data.sub_use_case, + } as QualificationHostApplication +} + +const unmarshalQualificationHostWebsite = ( + data: unknown, +): QualificationHostWebsite => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'QualificationHostWebsite' failed as data isn't a dictionary.`, + ) + } + + return { + subUseCase: data.sub_use_case, + } as QualificationHostWebsite +} + +const unmarshalQualificationOtherUseCase = ( + data: unknown, +): QualificationOtherUseCase => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'QualificationOtherUseCase' failed as data isn't a dictionary.`, + ) + } + + return {} as QualificationOtherUseCase +} + +const unmarshalQualificationSetScalewayEnvironment = ( + data: unknown, +): QualificationSetScalewayEnvironment => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'QualificationSetScalewayEnvironment' failed as data isn't a dictionary.`, + ) + } + + return {} as QualificationSetScalewayEnvironment +} + +const unmarshalQualificationShareData = ( + data: unknown, +): QualificationShareData => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'QualificationShareData' failed as data isn't a dictionary.`, + ) + } + + return {} as QualificationShareData +} + +const unmarshalQualification = (data: unknown): Qualification => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'Qualification' failed as data isn't a dictionary.`, + ) + } + + return { + aiMachine: data.ai_machine + ? unmarshalQualificationAiMachine(data.ai_machine) + : undefined, + architectureType: data.architecture_type, + archiveData: data.archive_data + ? unmarshalQualificationArchiveData(data.archive_data) + : undefined, + container: data.container + ? unmarshalQualificationContainer(data.container) + : undefined, + deploySoftware: data.deploy_software + ? unmarshalQualificationDeploySoftware(data.deploy_software) + : undefined, + hostApplication: data.host_application + ? unmarshalQualificationHostApplication(data.host_application) + : undefined, + hostWebsite: data.host_website + ? unmarshalQualificationHostWebsite(data.host_website) + : undefined, + otherUseCase: data.other_use_case + ? unmarshalQualificationOtherUseCase(data.other_use_case) + : undefined, + setScalewayEnvironment: data.set_scaleway_environment + ? unmarshalQualificationSetScalewayEnvironment( + data.set_scaleway_environment, + ) + : undefined, + shareData: data.share_data + ? unmarshalQualificationShareData(data.share_data) + : undefined, + } as Qualification +} + +export const unmarshalProjectQualification = ( + data: unknown, +): ProjectQualification => { + if (!isJSONObject(data)) { + throw new TypeError( + `Unmarshalling the type 'ProjectQualification' failed as data isn't a dictionary.`, + ) + } + + return { + projectId: data.project_id, + qualification: data.qualification + ? unmarshalQualification(data.qualification) + : undefined, + } as ProjectQualification +} + export const marshalContractApiCheckContractSignatureRequest = ( request: ContractApiCheckContractSignatureRequest, defaults: DefaultValues, @@ -149,6 +332,143 @@ export const marshalProjectApiCreateProjectRequest = ( organization_id: request.organizationId ?? defaults.defaultOrganizationId, }) +const marshalQualificationAiMachine = ( + request: QualificationAiMachine, + defaults: DefaultValues, +): Record => ({}) + +const marshalQualificationArchiveData = ( + request: QualificationArchiveData, + defaults: DefaultValues, +): Record => ({}) + +const marshalQualificationContainer = ( + request: QualificationContainer, + defaults: DefaultValues, +): Record => ({}) + +const marshalQualificationDeploySoftware = ( + request: QualificationDeploySoftware, + defaults: DefaultValues, +): Record => ({}) + +const marshalQualificationHostApplication = ( + request: QualificationHostApplication, + defaults: DefaultValues, +): Record => ({ + sub_use_case: request.subUseCase, +}) + +const marshalQualificationHostWebsite = ( + request: QualificationHostWebsite, + defaults: DefaultValues, +): Record => ({ + sub_use_case: request.subUseCase, +}) + +const marshalQualificationOtherUseCase = ( + request: QualificationOtherUseCase, + defaults: DefaultValues, +): Record => ({}) + +const marshalQualificationSetScalewayEnvironment = ( + request: QualificationSetScalewayEnvironment, + defaults: DefaultValues, +): Record => ({}) + +const marshalQualificationShareData = ( + request: QualificationShareData, + defaults: DefaultValues, +): Record => ({}) + +const marshalQualification = ( + request: Qualification, + defaults: DefaultValues, +): Record => ({ + architecture_type: request.architectureType, + ...resolveOneOf([ + { + param: 'host_website', + value: + request.hostWebsite !== undefined + ? marshalQualificationHostWebsite(request.hostWebsite, defaults) + : undefined, + }, + { + param: 'host_application', + value: + request.hostApplication !== undefined + ? marshalQualificationHostApplication( + request.hostApplication, + defaults, + ) + : undefined, + }, + { + param: 'deploy_software', + value: + request.deploySoftware !== undefined + ? marshalQualificationDeploySoftware(request.deploySoftware, defaults) + : undefined, + }, + { + param: 'set_scaleway_environment', + value: + request.setScalewayEnvironment !== undefined + ? marshalQualificationSetScalewayEnvironment( + request.setScalewayEnvironment, + defaults, + ) + : undefined, + }, + { + param: 'ai_machine', + value: + request.aiMachine !== undefined + ? marshalQualificationAiMachine(request.aiMachine, defaults) + : undefined, + }, + { + param: 'container', + value: + request.container !== undefined + ? marshalQualificationContainer(request.container, defaults) + : undefined, + }, + { + param: 'archive_data', + value: + request.archiveData !== undefined + ? marshalQualificationArchiveData(request.archiveData, defaults) + : undefined, + }, + { + param: 'share_data', + value: + request.shareData !== undefined + ? marshalQualificationShareData(request.shareData, defaults) + : undefined, + }, + { + param: 'other_use_case', + value: + request.otherUseCase !== undefined + ? marshalQualificationOtherUseCase(request.otherUseCase, defaults) + : undefined, + }, + ]), +}) + +export const marshalProjectApiSetProjectQualificationRequest = ( + request: ProjectApiSetProjectQualificationRequest, + defaults: DefaultValues, +): Record => ({ + qualification: + request.qualification !== undefined + ? marshalQualification(request.qualification, defaults) + : undefined, +}) + export const marshalProjectApiUpdateProjectRequest = ( request: ProjectApiUpdateProjectRequest, defaults: DefaultValues, diff --git a/packages/clients/src/api/account/v3/types.gen.ts b/packages/clients/src/api/account/v3/types.gen.ts index 5da29d33c..f42c0248b 100644 --- a/packages/clients/src/api/account/v3/types.gen.ts +++ b/packages/clients/src/api/account/v3/types.gen.ts @@ -24,6 +24,29 @@ export type ListProjectsRequestOrderBy = | 'name_asc' | 'name_desc' +export type QualificationArchitectureType = + | 'unknown_architecture_type' + | 'object_storage' + | 'web_hosting' + | 'instance' + | 'elastic' + | 'kubernetes' + | 'serverless' + | 'dedicated_server' + | 'other_architecture_type' + +export type QualificationHostApplicationSubUseCase = + | 'unknown_sub_use_case' + | 'saas_app' + | 'government_app' + +export type QualificationHostWebsiteSubUseCase = + | 'unknown_sub_use_case' + | 'information_website' + | 'ecommerce_website' + | 'high_website' + | 'other_sub_use_case' + export interface Contract { /** ID of the contract. */ id: string @@ -39,6 +62,28 @@ export interface Contract { updatedAt?: Date } +export interface QualificationAiMachine {} + +export interface QualificationArchiveData {} + +export interface QualificationContainer {} + +export interface QualificationDeploySoftware {} + +export interface QualificationHostApplication { + subUseCase: QualificationHostApplicationSubUseCase +} + +export interface QualificationHostWebsite { + subUseCase: QualificationHostWebsiteSubUseCase +} + +export interface QualificationOtherUseCase {} + +export interface QualificationSetScalewayEnvironment {} + +export interface QualificationShareData {} + export interface ContractSignature { /** ID of the contract signature. */ id: string @@ -69,6 +114,65 @@ export interface Project { description: string } +export interface Qualification { + /** Architecture type of the qualification. */ + architectureType: QualificationArchitectureType + /** + * One-of ('useCase'): at most one of 'hostWebsite', 'hostApplication', + * 'deploySoftware', 'setScalewayEnvironment', 'aiMachine', 'container', + * 'archiveData', 'shareData', 'otherUseCase' could be set. + */ + hostWebsite?: QualificationHostWebsite + /** + * One-of ('useCase'): at most one of 'hostWebsite', 'hostApplication', + * 'deploySoftware', 'setScalewayEnvironment', 'aiMachine', 'container', + * 'archiveData', 'shareData', 'otherUseCase' could be set. + */ + hostApplication?: QualificationHostApplication + /** + * One-of ('useCase'): at most one of 'hostWebsite', 'hostApplication', + * 'deploySoftware', 'setScalewayEnvironment', 'aiMachine', 'container', + * 'archiveData', 'shareData', 'otherUseCase' could be set. + */ + deploySoftware?: QualificationDeploySoftware + /** + * One-of ('useCase'): at most one of 'hostWebsite', 'hostApplication', + * 'deploySoftware', 'setScalewayEnvironment', 'aiMachine', 'container', + * 'archiveData', 'shareData', 'otherUseCase' could be set. + */ + setScalewayEnvironment?: QualificationSetScalewayEnvironment + /** + * One-of ('useCase'): at most one of 'hostWebsite', 'hostApplication', + * 'deploySoftware', 'setScalewayEnvironment', 'aiMachine', 'container', + * 'archiveData', 'shareData', 'otherUseCase' could be set. + */ + aiMachine?: QualificationAiMachine + /** + * One-of ('useCase'): at most one of 'hostWebsite', 'hostApplication', + * 'deploySoftware', 'setScalewayEnvironment', 'aiMachine', 'container', + * 'archiveData', 'shareData', 'otherUseCase' could be set. + */ + container?: QualificationContainer + /** + * One-of ('useCase'): at most one of 'hostWebsite', 'hostApplication', + * 'deploySoftware', 'setScalewayEnvironment', 'aiMachine', 'container', + * 'archiveData', 'shareData', 'otherUseCase' could be set. + */ + archiveData?: QualificationArchiveData + /** + * One-of ('useCase'): at most one of 'hostWebsite', 'hostApplication', + * 'deploySoftware', 'setScalewayEnvironment', 'aiMachine', 'container', + * 'archiveData', 'shareData', 'otherUseCase' could be set. + */ + shareData?: QualificationShareData + /** + * One-of ('useCase'): at most one of 'hostWebsite', 'hostApplication', + * 'deploySoftware', 'setScalewayEnvironment', 'aiMachine', 'container', + * 'archiveData', 'shareData', 'otherUseCase' could be set. + */ + otherUseCase?: QualificationOtherUseCase +} + export interface CheckContractSignatureResponse { /** Whether a signature has been requested for this contract. */ created: boolean @@ -170,6 +274,13 @@ export type ProjectApiListProjectsRequest = { projectIds?: string[] } +export type ProjectApiSetProjectQualificationRequest = { + /** Project ID. */ + projectId?: string + /** Use case chosen for the Project. */ + qualification?: Qualification +} + export type ProjectApiUpdateProjectRequest = { /** Project ID of the Project. */ projectId?: string @@ -178,3 +289,10 @@ export type ProjectApiUpdateProjectRequest = { /** Description of the Project. */ description?: string } + +export interface ProjectQualification { + /** Project ID. */ + projectId: string + /** Qualification of the Project. */ + qualification?: Qualification +}