Skip to content
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.
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 @@ -172,7 +172,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 @@ -238,7 +240,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 @@ -322,7 +324,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 @@ -400,7 +402,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 @@ -444,7 +446,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 @@ -476,7 +478,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