Mongoose Schema

    import * as mongoose from 'mongoose';


const FeatureSchema = new mongoose.Schema({
name: { type: String, required: true },
status: { type: String, required: true },
assignedTo: { type: String, required: false },
active: { type: Boolean, required: true, default: true },
priority: { type: Number, required: true },
createdDate: { type: String, required: true },
modifiedDate: { type: String, required: true },
tasks: { type: Array, required: true },
});

const ModuleSchema = new mongoose.Schema({
name: { type: String, required: true },
createdDate: { type: String, required: true },
modifiedDate: { type: String, required: true },
features: { type: [FeatureSchema], required: false },
});

const Repository = new mongoose.Schema({
githubUrl: { type: String, required: false },
codeQualityUrl: { type: String, required: false },
testUrl: { type: String, required: false },
developers: { type: Array, required: false }
});

export const ProjectSchema = new mongoose.Schema(
{
name: { type: String, required: true },
description: { type: String, required: false },
prefix: { type: String, required: true },
createdBy: { type: String, required: true },
assignedTo: { type: String, required: true },
startDate: { type: String, required: true },
status: { type: String, required: true },
published: { type: Boolean, required: true },
enableLeaderboard: { type: Boolean, required: true },
modules: { type: [ModuleSchema], required: false },
active: { type: Boolean, required: true, default: true },
createdDate: { type: String, required: true },
modifiedDate: { type: String, required: true },
githubUrl : { type: String, required : false},
sonarCloudUrl : { type: String, required : false},
projectTestUrl : { type: String, required : false},
developers: { type: Array, required: false },
badges: { type: Array, required: false }
}
);

export interface Project extends mongoose.Document {
githubUrl: String;
sonarCloudUrl:String;
projectTestUrl:String;

id: number;
name: String;
prefix:String;
description:String;
published: boolean;
active: boolean;
modules: Array<any>;
badges: Array<any>;
}

CourseTopic Schema

    import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, Types, Schema as MongooseSchema } from 'mongoose';


export type courseTopicDoc = CourseTopic & Document;

@Schema()
export class CourseTopic {

@Prop({ required: true })
topicId: string;

@Prop({ required: true })
name: string;


@Prop({ required: true })
duration: number;


@Prop({ required: false })
version: number;

}

export const CourseTopicSchema = SchemaFactory.createForClass(CourseTopic);

CourseModule Schema

    import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, Types, Schema as MongooseSchema } from 'mongoose';
import { CourseTopic } from './course-topic.schema';


export type courseModuleDoc = CourseModule & Document;

@Schema()
export class CourseModule {

@Prop({required:true})
name: string;

@Prop({required:true})
topics: Array<CourseTopic>;

@Prop({required:false})
activities: Array<any>;
}

export const CourseModuleSchema = SchemaFactory.createForClass(CourseModule);

Course Schema

    import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, Types, Schema as MongooseSchema } from 'mongoose';
import { CourseModule } from './course-module.schema';


export type courseDoc = Course & Document;

@Schema()
export class Course {

@Prop({ required: true })
code: string;

@Prop({ required: true })
title: string;

@Prop({ required: true })
category: string;

@Prop({ required: true })
orgId: string;

@Prop({ required: true })
status: string;


@Prop({ required: true })
noOfTopics: number;

@Prop({ required: true })
noOfQuestions: number;

@Prop({ required: true })
noOfModules: number;

@Prop({ required: true })
version: number;



@Prop()
modules: Array<CourseModule>;

}

export const CourseSchema = SchemaFactory.createForClass(Course);

Task 4: CourseActivity Schema

    import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, Types, Schema as MongooseSchema } from 'mongoose';
import { CourseTopic } from './course-topic.schema';


export type courseActivityDoc = CourseActivity & Document;

@Schema()
export class CourseActivity {

@Prop({required:true})
name: string;

@Prop({required:false})
url: string;

@Prop({required:true})
type: string;

}

export const CourseActivitySchema = SchemaFactory.createForClass(CourseActivity);