Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/datasets/datasets.controller.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { DatablocksService } from "src/datablocks/datablocks.service";
import { OrigDatablocksService } from "src/origdatablocks/origdatablocks.service";
import { DatasetsController } from "./datasets.controller";
import { DatasetsService } from "./datasets.service";
import { HistoryService } from "src/history/history.service";
import { LogbooksService } from "src/logbooks/logbooks.service";
import { CaslAbilityFactory } from "src/casl/casl-ability.factory";
import { ConfigModule } from "@nestjs/config";
Expand All @@ -20,6 +21,8 @@ class LogbooksServiceMock {}

class CaslAbilityFactoryMock {}

class HistoryServiceMock {}

describe("DatasetsController", () => {
let controller: DatasetsController;

Expand All @@ -34,6 +37,7 @@ describe("DatasetsController", () => {
{ provide: DatasetsService, useClass: DatasetsServiceMock },
{ provide: OrigDatablocksService, useClass: OrigDatablocksServiceMock },
{ provide: CaslAbilityFactory, useClass: CaslAbilityFactoryMock },
{ provide: HistoryService, useClass: HistoryServiceMock },
],
}).compile();

Expand Down
37 changes: 24 additions & 13 deletions src/datasets/datasets.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ import { LifecycleClass } from "./schemas/lifecycle.schema";
import { RelationshipClass } from "./schemas/relationship.schema";
import { TechniqueClass } from "./schemas/technique.schema";
import { DatasetType } from "./types/dataset-type.enum";
import { HistoryService } from "src/history/history.service";
import { convertGenericHistoriesToObsoleteHistories } from "src/datasets/utils/history.util";

@ApiBearerAuth()
@ApiExtraModels(
Expand All @@ -134,6 +136,7 @@ export class DatasetsController {
private caslAbilityFactory: CaslAbilityFactory,
private logbooksService: LogbooksService,
private configService: ConfigService,
private historyService: HistoryService,
) {
this.accessGroups =
this.configService.get<AccessGroupsType>("accessGroups");
Expand Down Expand Up @@ -578,9 +581,9 @@ export class DatasetsController {
return outputDataset;
}

convertCurrentToObsoleteSchema(
inputDataset: DatasetClass | null,
): OutputDatasetObsoleteDto {
async convertCurrentToObsoleteSchema(
inputDataset: DatasetDocument | null,
): Promise<OutputDatasetObsoleteDto> {
const propertiesModifier: Record<string, unknown> = {};
if (inputDataset) {
if ("proposalIds" in inputDataset && inputDataset.proposalIds?.length) {
Expand Down Expand Up @@ -613,6 +616,14 @@ export class DatasetsController {
inputDataset.principalInvestigators[0];
}
}

propertiesModifier.history = convertGenericHistoriesToObsoleteHistories(
await this.historyService.find({
documentId: inputDataset._id,
subsystem: "Dataset",
}),
inputDataset,
);
}

const outputDataset: OutputDatasetObsoleteDto = {
Expand Down Expand Up @@ -702,7 +713,7 @@ export class DatasetsController {
) as CreateDatasetDto;
const createdDataset = await this.datasetsService.create(datasetDto);
const outputObsoleteDatasetDto =
this.convertCurrentToObsoleteSchema(createdDataset);
await this.convertCurrentToObsoleteSchema(createdDataset);

return outputObsoleteDatasetDto;
} catch (error) {
Expand Down Expand Up @@ -911,8 +922,8 @@ export class DatasetsController {
let outputDatasets: OutputDatasetObsoleteDto[] = [];
if (datasets && datasets.length > 0) {
const includeFilters = mergedFilters.include ?? [];
outputDatasets = datasets.map((dataset) =>
this.convertCurrentToObsoleteSchema(dataset),
outputDatasets = await Promise.all(
datasets.map((dataset) => this.convertCurrentToObsoleteSchema(dataset)),
);
await Promise.all(
outputDatasets.map(async (dataset) => {
Expand Down Expand Up @@ -1038,8 +1049,8 @@ export class DatasetsController {
let outputDatasets: OutputDatasetObsoleteDto[] = [];

if (datasets && datasets.length > 0) {
outputDatasets = datasets.map((dataset) =>
this.convertCurrentToObsoleteSchema(dataset),
outputDatasets = await Promise.all(
datasets.map((dataset) => this.convertCurrentToObsoleteSchema(dataset)),
);
}

Expand Down Expand Up @@ -1347,7 +1358,7 @@ export class DatasetsController {
description: "Dataset not found",
})
async findById(@Req() request: Request, @Param("pid") id: string) {
const dataset = this.convertCurrentToObsoleteSchema(
const dataset = await this.convertCurrentToObsoleteSchema(
await this.checkPermissionsForDatasetObsolete(request, id),
);

Expand Down Expand Up @@ -1458,7 +1469,7 @@ export class DatasetsController {
validatedUpdateDatasetObsoleteDto,
) as UpdateDatasetDto;

const res = this.convertCurrentToObsoleteSchema(
const res = await this.convertCurrentToObsoleteSchema(
await this.datasetsService.findByIdAndUpdate(pid, updateDatasetDto),
);
return res;
Expand Down Expand Up @@ -1568,7 +1579,7 @@ export class DatasetsController {
updateDatasetDto as UpdateDatasetDto,
);

return this.convertCurrentToObsoleteSchema(outputDatasetDto);
return await this.convertCurrentToObsoleteSchema(outputDatasetDto);
}

// GET /datasets/:id/datasetlifecycle
Expand Down Expand Up @@ -1601,7 +1612,7 @@ export class DatasetsController {
description: "Dataset not found",
})
async findLifecycleById(@Req() request: Request, @Param("pid") id: string) {
const dataset = this.convertCurrentToObsoleteSchema(
const dataset = await this.convertCurrentToObsoleteSchema(
await this.checkPermissionsForDatasetObsolete(request, id),
);
return dataset?.datasetlifecycle;
Expand Down Expand Up @@ -1681,7 +1692,7 @@ export class DatasetsController {
throw new ForbiddenException("Unauthorized to update this dataset");
}

const res = this.convertCurrentToObsoleteSchema(
const res = await this.convertCurrentToObsoleteSchema(
await this.datasetsService.findByIdAndUpdate(pid, foundDataset),
);
return res.datasetlifecycle;
Expand Down
2 changes: 2 additions & 0 deletions src/datasets/datasets.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import {
import { ConfigModule, ConfigService } from "@nestjs/config";
import { applyHistoryPluginOnce } from "src/common/mongoose/plugins/history.plugin.util";
import { ProposalsModule } from "src/proposals/proposals.module";
import { HistoryModule } from "src/history/history.module";

@Module({
imports: [
Expand All @@ -31,6 +32,7 @@ import { ProposalsModule } from "src/proposals/proposals.module";
DatablocksModule,
OrigDatablocksModule,
InitialDatasetsModule,
HistoryModule,
ElasticSearchModule,
ProposalsModule,
forwardRef(() => LogbooksModule),
Expand Down
1 change: 0 additions & 1 deletion src/datasets/datasets.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ const mockDataset: DatasetClass = {
license: "string",
version: "string",
isPublished: false,
history: [],
datasetlifecycle: {
id: "testId",
archivable: true,
Expand Down
14 changes: 8 additions & 6 deletions src/datasets/datasets.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,9 @@ export class DatasetsService {
return savedDataset;
}

async findAll(filter: FilterQuery<DatasetDocument>): Promise<DatasetClass[]> {
async findAll(
filter: FilterQuery<DatasetDocument>,
): Promise<DatasetDocument[]> {
const whereFilter: RootFilterQuery<DatasetDocument> = filter.where ?? {};
const fieldsProjection: ProjectionType<DatasetDocument> =
filter.fields ?? {};
Expand Down Expand Up @@ -217,7 +219,7 @@ export class DatasetsService {
async fullquery(
filter: IFilters<DatasetDocument, IDatasetFields>,
extraWhereClause: FilterQuery<DatasetDocument> = {},
): Promise<DatasetClass[] | null> {
): Promise<DatasetDocument[] | null> {
let datasets;

const filterQuery: FilterQuery<DatasetDocument> =
Expand Down Expand Up @@ -301,7 +303,7 @@ export class DatasetsService {

async findOne(
filter: FilterQuery<DatasetDocument>,
): Promise<DatasetClass | null> {
): Promise<DatasetDocument | null> {
const whereFilter: FilterQuery<DatasetDocument> = filter.where ?? {};
const fieldsProjection: FilterQuery<DatasetDocument> = filter.fields ?? {};

Expand Down Expand Up @@ -365,7 +367,7 @@ export class DatasetsService {
async findByIdAndReplace(
id: string,
updateDatasetDto: UpdateDatasetDto,
): Promise<DatasetClass> {
): Promise<DatasetDocument> {
const username = (this.request.user as JWTUser).username;
const existingDataset = await this.datasetModel.findOne({ pid: id }).exec();

Expand Down Expand Up @@ -409,7 +411,7 @@ export class DatasetsService {
updateDatasetDto:
| PartialUpdateDatasetDto
| PartialUpdateDatasetWithHistoryDto,
): Promise<DatasetClass | null> {
): Promise<DatasetDocument | null> {
const existingDataset = await this.datasetModel.findOne({ pid: id }).exec();
// check if we were able to find the dataset
if (!existingDataset) {
Expand Down Expand Up @@ -441,7 +443,7 @@ export class DatasetsService {
}

// DELETE dataset
async findByIdAndDelete(id: string): Promise<DatasetClass | null> {
async findByIdAndDelete(id: string): Promise<DatasetDocument | null> {
if (this.ESClient) {
await this.ESClient.deleteDocument(id);
}
Expand Down
13 changes: 13 additions & 0 deletions src/datasets/dto/output-dataset-obsolete.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { OrigDatablock } from "src/origdatablocks/schemas/origdatablock.schema";
import { Datablock } from "src/datablocks/schemas/datablock.schema";
import { DatasetType } from "../types/dataset-type.enum";
import { OutputAttachmentV3Dto } from "src/attachments/dto-obsolete/output-attachment.v3.dto";
import { HistoryClass } from "../schemas/history.schema";

export class OutputDatasetObsoleteDto extends UpdateDatasetObsoleteDto {
@ApiProperty({
Expand Down Expand Up @@ -200,6 +201,18 @@ export class OutputDatasetObsoleteDto extends UpdateDatasetObsoleteDto {
@Type(() => Datablock)
datablocks?: Datablock[];

@ApiProperty({
type: "array",
items: { $ref: getSchemaPath(HistoryClass) },
required: false,
description:
"List of changes made to this dataset record. For compatibility with legacy backend",
})
@IsOptional()
@IsArray()
@Type(() => HistoryClass)
history?: HistoryClass[];

@ApiProperty({
type: String,
required: true,
Expand Down
1 change: 1 addition & 0 deletions src/datasets/schemas/history.schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export class HistoryClass {
* After the migration, we should look in to change the structure
* to a new one that can be better validated
*/
[key: string]: unknown;

@ApiProperty({
type: Date,
Expand Down
Loading