LMS/E-Learning-Admin-frontend-main/src/app/pages/cateexamtestquestion/cateexamtestquestion.component.ts
2025-09-01 19:37:35 +05:30

727 lines
28 KiB
TypeScript

import { Component, Input, OnInit, ViewChild } from '@angular/core';
import { MatTableDataSource } from '@angular/material/table';
import { MatPaginator } from '@angular/material/paginator';
import Swal from 'sweetalert2/dist/sweetalert2.js'
import { ServicesService } from '../../services.service';
import { NgxSpinnerService } from "ngx-spinner";
import { Router, ActivatedRoute } from '@angular/router';
import { MatSort } from '@angular/material/sort';
import { AuthorizationService } from '../../service/authorization.service';
import { FormBuilder, FormGroup, Validators, FormArray, FormControl } from '@angular/forms';
import { CatexamService } from '../../services/catexam/catexam.service';
import * as ClassicEditor from '@blowstack/ckeditor5-full-free-build';
import * as XLSX from 'xlsx';
import { ExcelService } from 'src/app/services/excelservices/excel.service';
import { Location } from '@angular/common';
@Component({
selector: 'app-cateexamtestquestion',
templateUrl: './cateexamtestquestion.component.html',
styleUrls: ['./cateexamtestquestion.component.scss']
})
export class CateexamtestquestionComponent implements OnInit {
displayedColumns: string[] = ['srno', 'certificate_name', "domin_name", 'subdomain_name', 'topic_name', 'ketexam_name', 'title', 'type', 'actions'];
dataSource: MatTableDataSource<courselist>;
Search: any;
addCateExamQua: boolean = false;
Domain = [];
SubDomain = [];
Topics = [];
filterTopics = [];
Certificates = [];
filterDomain = [];
filtersubDomain = [];
CatExams = [];
public PraacticeQueForm: FormGroup;
Domainname: any;
subdomainname: any;
Topicname: any;
title: any;
option1: any;
option2: any;
option3: any;
option4: any;
CorrectAnswer: any;
Type: any;
test_id: any;
Explanation: any;
Id: any;
IsUpdate: boolean = false;
CertificateName: any;
isBulkUpload: boolean = false;
files: File[] = [];
myEvent: any;
progress: any = 0;
selectBulkupload: boolean = false;
selectprogress: boolean = false;
@Input('pagination') pagination: boolean;
@ViewChild(MatPaginator, { static: false }) set matPaginator(paginator: MatPaginator) {
if (this.pagination) {
this.dataSource.paginator = paginator;
}
}
@ViewChild(MatSort, { static: true }) sort: MatSort;
loglist = [];
public Editor = ClassicEditor;
editFromExam: boolean = false;
selecteds = [];
@ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;
DifficultyScore: any;
oldAuditValueArray = { "Certificate": "", "Domain": "", "Subdomain": "", "Topic": "", "Question": "", "Answer A": "", "Answer B": "", "Answer C": "", "Answer D": "", "Answer": "", "Explanation": "", "Exam Name": "", "Difficulty": "" }
newAuditValueArray = { "Certificate": "", "Domain": "", "Subdomain": "", "Topic": "", "Question": "", "Answer A": "", "Answer B": "", "Answer C": "", "Answer D": "", "Answer": "", "Explanation": "", "Exam Name": "", "Difficulty": "" }
auditHistory = "";
constructor(private location: Location, private catTestService: CatexamService, public ActiveRoute: ActivatedRoute, public fb: FormBuilder, public auth: AuthorizationService, public router: Router, public spinner: NgxSpinnerService, public service: ServicesService, private excelService: ExcelService) {
var setlogin = this.auth.isLoggedIn();
if (!setlogin) {
this.router.navigate(['/login']);
}
}
addNewCatExamQua() {
this.Id = "";
this.Domainname = "";
this.subdomainname = "";
this.test_id = "";
this.Topicname = "";
this.title = "";
this.option1 = "";
this.option2 = "";
this.option3 = "";
this.option4 = "";
this.Type = "";
this.Explanation = "";
this.CorrectAnswer = "";
this.CertificateName = "";
this.addCateExamQua = true;
this.IsUpdate = false;
}
closeModal() {
this.addCateExamQua = false;
this.IsUpdate = false;
this.Id = "";
this.Domainname = "";
this.subdomainname = "";
this.test_id = "";
this.selecteds = [];
this.Topicname = "";
this.title = "";
this.option1 = "";
this.option2 = "";
this.option3 = "";
this.option4 = "";
this.Type = "";
this.Explanation = "";
this.CorrectAnswer = "";
this.DifficultyScore = "";
this.oldAuditValueArray = { "Certificate": "", "Domain": "", "Subdomain": "", "Topic": "", "Question": "", "Answer A": "", "Answer B": "", "Answer C": "", "Answer D": "", "Answer": "", "Explanation": "", "Exam Name": "", "Difficulty": "" }
this.newAuditValueArray = { "Certificate": "", "Domain": "", "Subdomain": "", "Topic": "", "Question": "", "Answer A": "", "Answer B": "", "Answer C": "", "Answer D": "", "Answer": "", "Explanation": "", "Exam Name": "", "Difficulty": "" }
this.auditHistory = "";
}
async ngOnInit() {
this.PraacticeQueForm = this.fb.group({
CertificateName: ['', Validators.required],
test_id: new FormControl(),
catexamsid: ['', Validators.required],
Domainname: ['', Validators.required],
subdomainname: ['', Validators.required],
Topicname: ['', Validators.required],
title: ['', Validators.required],
option1: ['', Validators.required],
option2: ['', Validators.required],
option3: ['', Validators.required],
option4: ['', Validators.required],
CorrectAnswer: ['', Validators.required],
Type: ['', Validators.required],
Explanation: ['', Validators.required],
});
await this.spinner.show();
try {
await this.GetAllDropdown();
await this.getAllCatExam();
await this.getAllCatQuestions();
await this.spinner.hide();
}
catch (e) {
await this.spinner.hide();
this.service.ShowError(e.message);
}
}
async delete(item) {
Swal.fire({
title: 'Are you sure?',
text: "You want to delete!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Delete'
}).then(async (result) => {
if (result.value) {
await this.spinner.show();
try {
await this.auth.getAuthenticatedUser().getSession(async (err, session) => {
if (err) {
await this.spinner.hide();
this.router.navigate(['/login']);
}
else {
var token = ''
await this.catTestService.DeletecateexamQuestion(item.id, token).then(async (value) => {
if (value[0].status == 200) {
var list = JSON.parse(<string>value[0].json);
var e = window.localStorage.getItem("adminUser");
if (e == null || e == undefined || e == "") {
e = 'admin';
}
var desc = "<span> " + item.title + "</span> Cat Question is deleted by <span> " + e + "</span>";
await this.service.addAdminLogs(desc, "cateexamquestion", this.Id, token);
await this.getAllCatQuestions();
await this.spinner.hide();
Swal.fire(
list.message,
'CAT Question has been deleted.',
'success'
)
}
else {
var list = JSON.parse(<string>value[0].json);
await this.spinner.hide();
this.service.ShowError(list.message);
}
})
}
});
}
catch (e) {
await this.spinner.hide();
this.service.ShowError(e.message);
}
}
})
}
async getAllCatQuestions() {
await this.auth.getAuthenticatedUser().getSession(async (err, session) => {
if (err) {
await this.spinner.hide();
this.router.navigate(['/login']);
}
else {
const users: courselist[] = [];
var token = ''
await this.catTestService.ListcateexamQuestion(token).then(async (data) => {
if (data[0].status == 200) {
var list = JSON.parse(<string>data[0].json);
var srno = 0;
await list.data.forEach(async (element) => {
srno = srno + 1;
await users.push({
"srno": srno,
"id": element.id,
"test_id": element.test_id,
"exam_id": element.exam_id ? element.exam_id : [],
"title": element.title,
"first_choice": element.first_choice,
"second_choice": element.second_choice,
"third_choice": element.third_choice,
"fourth_choice": element.fourth_choice,
"answer": element.answer,
"type": element.type,
"d_id": element.d_id,
"sd_id": element.sd_id,
"topic_id": element.topic_id,
"ref_link": element.ref_link,
"youtube_link": element.youtube_link,
"bookpage_no": element.bookpage_no,
"blog_url": element.blog_url,
"createdAt": element.createdAt,
"updatedAt": element.updatedAt,
"domin_name": element.domain.domin_name,
"subdomain_name": element.subdomain.subdomain_name,
"topic_name": element.topic.topic_name,
"ketexam_name": element.ketexamtest.ketexam_name,
"description": element.description,
"certi_id": element.certi_id,
"certificate_name": element.certificate.certificate_name
})
});
this.ActiveRoute.params.subscribe(async (params) => {
try {
var data = JSON.parse(atob(params['id']));
let edited = users.filter(x => x.id == data)
this.editFromExam = true;
this.edit(edited[0])
} catch (error) {
}
});
this.dataSource = new MatTableDataSource(users);
this.dataSource.sort = this.sort;
this.dataSource.paginator = this.paginator;
this.filter();
this.pagination = true;
}
})
}
});
}
async edit(item) {
this.CertificateName = item.certi_id;
this.addCateExamQua = true;
this.IsUpdate = true;
this.Id = item.id;
this.Domainname = item.d_id;
this.subdomainname = item.sd_id;
this.test_id = item.test_id
this.selecteds = item.exam_id.map(Number);
this.Topicname = item.topic_id;
this.title = item.title;
this.option1 = item.first_choice;
this.option2 = item.second_choice;
this.option3 = item.third_choice;
this.option4 = item.fourth_choice;
this.Type = item.type;
//DifficultyScore
item.type == 'VERY SIMPLE' ? this.DifficultyScore = "1" :
item.type == 'SIMPLE' ? this.DifficultyScore = "1.5" :
item.type == 'AVERAGE' ? this.DifficultyScore = "2" :
item.type == 'ABOVE AVERAGE' ? this.DifficultyScore = "2.5" :
item.type == 'HARD' ? this.DifficultyScore = "3" :
item.type == 'DIFFICULT' ? this.DifficultyScore = "3.5" :
item.type == 'TRICKY' ? this.DifficultyScore = "4" : "0";
this.Explanation = item.description;
this.CorrectAnswer = item.answer;
this.loglist = [];
await this.spinner.show();
await this.auth.getAuthenticatedUser().getSession(async (err, session) => {
if (err) {
await this.spinner.hide();
this.router.navigate(['/login']);
}
else {
var token = ''
this.service.get_logs("cateexamquestion", item.id, token).then(async (value) => {
if (value[0].status == 200) {
var list = JSON.parse(<string>value[0].json);
this.loglist = list.data;
await this.spinner.hide();
}
else {
var list = JSON.parse(<string>value[0].json);
await this.spinner.hide();
this.service.ShowError(list.message);
}
}, err => {
this.spinner.hide();
})
}
})
this.Domain = this.filterDomain.filter(x => x.certi_id == this.CertificateName);
this.SubDomain = this.filtersubDomain.filter(x => x.d_id == this.Domainname);
this.Topics = this.filterTopics.filter(x => x.sd_id == this.subdomainname)
this.oldAuditValueArray = { "Certificate": this.Certificates.find(x => x.id == this.CertificateName) ? this.Certificates.find(x => x.id == this.CertificateName).certificate_name : '', "Domain": this.filterDomain.find(x => x.id == this.Domainname) ? this.filterDomain.find(x => x.id == this.Domainname).domin_name : '', "Subdomain": this.filtersubDomain.find(x => x.id == this.subdomainname) ? this.filtersubDomain.find(x => x.id == this.subdomainname).subdomain_name : '', "Topic": this.Topics.find(x => x.id == this.Topicname) ? this.Topics.find(x => x.id == this.Topicname).topic_name : '', "Question": this.title, "Answer A": this.option1, "Answer B": this.option2, "Answer C": this.option3, "Answer D": this.option4, "Answer": this.CorrectAnswer == 1 ? "Answer A" : (this.CorrectAnswer == 2 ? "Answer B" : (this.CorrectAnswer == 3 ? "Answer C" : (this.CorrectAnswer == 4 ? "Answer D" : ""))), "Explanation": this.Explanation, "Exam Name": this.CatExams.filter((item) => { return this.selecteds.includes(item.id) }).map(function (elem) { return elem.ketexam_name; }).join(","), "Difficulty": this.Type }
}
async filter() {
this.dataSource.filter = this.Search;
if (this.pagination) {
this.dataSource.paginator._changePageSize(this.dataSource.paginator.pageSize);
}
}
async GetAllDropdown() {
this.auth.getAuthenticatedUser().getSession(async (err, session) => {
if (err) {
await this.spinner.hide();
this.router.navigate(['/login']);
}
else {
var token = ''
await this.service.GetAllDropdown(token).then(async (data) => {
if (data[0].status == 200) {
var list = JSON.parse(<string>data[0].json);
this.Domain = list.data.Domain;
this.filterDomain = list.data.Domain;
this.SubDomain = list.data.SubDomain;
this.Topics = list.data.Topic;
this.filterTopics = list.data.Topic;
this.filtersubDomain = list.data.SubDomain;
this.Certificates = list.data.Certificate;
}
})
}
});
}
async certificatechange(ev) {
const val = ev.target.value;
if (val && val.trim() != '') {
this.Domain = this.filterDomain.filter((itemset) => {
return (
itemset.certi_id == val
);
})
this.subdomainname = "";
this.Topicname = '';
}
else {
this.Domainname = "";
this.subdomainname = "";
this.Topicname = '';
this.Domain = this.filterDomain;
}
}
async domainchange(ev) {
const val = ev.target.value;
if (val && val.trim() != '') {
this.SubDomain = this.filtersubDomain.filter((itemset) => {
return (
itemset.d_id == val
);
})
this.subdomainname = "";
this.Topicname = '';
}
else {
this.Domainname = "";
this.subdomainname = "";
this.Topicname = '';
this.SubDomain = this.filtersubDomain;
}
}
async SubDomainchange(ev) {
const val = ev.target.value;
if (val && val.trim() != '') {
this.Topics = this.filterTopics.filter((itemset) => {
return (
itemset.sd_id == val
);
});
this.Topicname = '';
} else {
this.Topicname = '';
this.Topics = this.filterTopics;
}
}
async getAllCatExam() {
await this.auth.getAuthenticatedUser().getSession(async (err, session) => {
if (err) {
await this.spinner.hide();
this.router.navigate(['/login']);
}
else {
var token = ''
await this.catTestService.ListCateExamTest(token).then(async (data) => {
this.CatExams = [];
if (data[0].status == 200) {
var list = JSON.parse(<string>data[0].json);
this.CatExams = list.data;
this.test_id = "";
this.selecteds = [];
}
})
}
});
}
markFormTouched(group: FormGroup | FormArray) {
Object.keys(group.controls).forEach((key: string) => {
const control = group.controls[key];
if (control instanceof FormGroup || control instanceof FormArray) { control.markAsTouched(); this.markFormTouched(control); }
else { control.markAsTouched(); };
});
};
async onSubmit() {
this.markFormTouched(this.PraacticeQueForm);
if (this.PraacticeQueForm.valid) {
await this.spinner.show();
try {
await this.auth.getAuthenticatedUser().getSession(async (err, session) => {
if (err) {
await this.spinner.hide();
this.router.navigate(['/login']);
}
else {
var token = ''
await this.catTestService.AddcateexamQuestion(this.CertificateName, this.selecteds.toString(), this.selecteds.toString(), this.title, this.option1, this.option2, this.option3, this.option4, this.CorrectAnswer, this.Type, this.Domainname, this.subdomainname, this.Topicname, token, "0", this.Explanation).then(async (value) => {
if (value[0].status == 200) {
var list = JSON.parse(<string>value[0].json);
await this.getAllCatQuestions();
var e = window.localStorage.getItem("adminUser");
if (e == null || e == undefined || e == "") {
e = 'admin';
}
var desc = "<span> " + this.title + "</span> Cat Question is added by <span> " + e + "</span>";
await this.service.addAdminLogs(desc, "cateexamquestion", list.data.id, token);
this.closeModal();
await this.spinner.hide();
this.service.ShowSuccess(list.message);
}
else {
var list = JSON.parse(<string>value[0].json);
await this.spinner.hide();
this.service.ShowError(list.message);
}
})
}
});
}
catch (e) {
await this.spinner.hide();
this.service.ShowError(e.message);
}
}
}
async UpdateCatQue() {
this.markFormTouched(this.PraacticeQueForm);
if (this.PraacticeQueForm.valid) {
await this.spinner.show();
try {
await this.auth.getAuthenticatedUser().getSession(async (err, session) => {
if (err) {
await this.spinner.hide();
this.router.navigate(['/login']);
}
else {
var token = ''
await this.catTestService.UpdatecateexamQuestion(this.CertificateName, this.test_id, this.selecteds.toString(), this.title, this.option1, this.option2, this.option3, this.option4, this.CorrectAnswer, this.Type, this.Domainname, this.subdomainname, this.Topicname, this.Id, token, "0", this.Explanation).then(async (value) => {
if (value[0].status == 200) {
var list = JSON.parse(<string>value[0].json);
var e = window.localStorage.getItem("adminUser");
if (e == null || e == undefined || e == "") {
e = 'admin';
}
this.newAuditValueArray = { "Certificate": this.Certificates.find(x => x.id == this.CertificateName) ? this.Certificates.find(x => x.id == this.CertificateName).certificate_name : '', "Domain": this.filterDomain.find(x => x.id == this.Domainname) ? this.filterDomain.find(x => x.id == this.Domainname).domin_name : '', "Subdomain": this.filtersubDomain.find(x => x.id == this.subdomainname) ? this.filtersubDomain.find(x => x.id == this.subdomainname).subdomain_name : '', "Topic": this.Topics.find(x => x.id == this.Topicname) ? this.Topics.find(x => x.id == this.Topicname).topic_name : '', "Question": this.title, "Answer A": this.option1, "Answer B": this.option2, "Answer C": this.option3, "Answer D": this.option4, "Answer": this.CorrectAnswer == 1 ? "Answer A" : (this.CorrectAnswer == 2 ? "Answer B" : (this.CorrectAnswer == 3 ? "Answer C" : (this.CorrectAnswer == 4 ? "Answer D" : ""))), "Explanation": this.Explanation, "Exam Name": this.CatExams.filter((item) => { return this.selecteds.includes(item.id) }).map(function (elem) { return elem.ketexam_name; }).join(","), "Difficulty": this.Type };
var audit = this.auth.compareAuditHist(this.oldAuditValueArray, this.newAuditValueArray);
var desc = audit;
await this.service.addAdminLogs(desc, "cateexamquestion", this.Id, token);
await this.getAllCatQuestions();
this.closeModal();
await this.spinner.hide();
this.service.ShowSuccess("Question update successfully");
if (this.editFromExam == true) {
this.editFromExam = false;
await this.spinner.hide();
this.location.back();
} else {
await this.getAllCatQuestions();
await this.spinner.hide();
}
}
else {
var list = JSON.parse(<string>value[0].json);
await this.spinner.hide();
this.service.ShowError(list.message);
}
})
}
});
}
catch (e) {
await this.spinner.hide();
this.service.ShowError(e.message);
}
}
}
async bulkCheckDKIM(data) {
let response = 0;
data.forEach(async (element) => {
let domain = element.email.split("@")[1];
await this.auth.verifyDKIM(domain).then(async (result) => {
if (result[0].StatusCode == 1) {
response = 1;
}
})
});
return response;
}
async openBulkUploadModal() {
this.isBulkUpload = true;
}
async closeBulkUploadModal() {
this.isBulkUpload = false;
this.progress = 0;
this.selectBulkupload = true;
this.selectprogress = false;
this.files = [];
this.myEvent = "";
}
async bulkUpload() {
let workBook = null;
let jsonData = null;
const reader = new FileReader();
const file = this.myEvent.addedFiles[0];
reader.onload = async (event) => {
const data = reader.result;
workBook = XLSX.read(data, { type: 'binary' });
jsonData = workBook.SheetNames.reduce((initial, name) => {
const sheet = workBook.Sheets[name];
initial[name] = XLSX.utils.sheet_to_json(sheet);
return initial;
}, {});
const dataString = (jsonData);
this.spinner.show();
if (await this.bulkCheckDKIM(dataString.Sheet1) == 0) {
await this.auth.getAuthenticatedUser().getSession(async (err, session) => {
if (err) {
await this.spinner.hide();
this.router.navigate(['/login']);
}
else {
var token = ''
await this.service.bulkuploded(dataString.Sheet1, "User", token).then(data => {
var list = JSON.parse(<string>data[0].json);
if (data[0].status == 200) {
this.service.ShowSuccess(list.data.length + " Students added successfully");
this.closeBulkUploadModal();
this.spinner.hide();
}
else {
this.service.ShowError(list.message)
this.spinner.hide();
}
}, error => {
console.log(error);
this.spinner.hide();
})
}
});
} else {
this.service.ShowError("Invalid domain found in email")
}
}
reader.readAsBinaryString(file);
}
onRemove(event) {
this.files.splice(this.files.indexOf(event), 1);
this.selectBulkupload = true;
this.selectprogress = false;
}
onSelect(event) {
let me = this;
var timeleft = 10;
me.progress = 0;
me.selectprogress = true;
me.selectBulkupload = true;
this.files.push(event.addedFiles);
var downloadTimer = setInterval(function () {
if (timeleft <= 0) {
me.progress = 10 - timeleft;
me.myEvent = event
me.selectBulkupload = false;
me.selectprogress = false;
clearInterval(downloadTimer);
}
me.progress = 10 - timeleft;
timeleft -= 1;
}, 200);
}
ExportExcel() {
var certification = Object.assign(this.Certificates.map(k => ({ name: k.certificate_name })));
var domain = Object.assign(this.Domain.map(k => ({ name: k.domin_name })));
var subdomain = Object.assign(this.SubDomain.map(k => ({ name: k.subdomain_name })));
var topic = Object.assign(this.Topics.map(k => ({ name: k.topic_name })));
var Exam = Object.assign(this.CatExams.map(k => ({ name: k.ketexam_name })));
var Correct = [{ workSheet: "Correct", rows: [{ name: "1" }, { name: "2" }, { name: "3" }, { name: "4" }], properties: { state: 'hidden' } }]
var Type = [{ workSheet: "Type", rows: [{ name: "VERY SIMPLE" }, { name: "SIMPLE" }, { name: "AVERAGE" }, { name: "ABOVE AVERAGE" }, { name: "HARD" }, { name: "DIFFICULT" }, , { name: "TRICKY" }], properties: { state: 'hidden' } }]
var certificationData = [
{
workSheet: "certification",
rows: certification,
properties:
{ state: 'hidden' }
}
];
var domainData = [
{
workSheet: "domain",
rows: domain,
properties:
{ state: 'hidden' }
}
];
var subdomainData = [
{
workSheet: "subdomain",
rows: subdomain,
properties:
{ state: 'hidden' }
}
];
var topicData = [
{
workSheet: "topic",
rows: topic,
properties:
{ state: 'hidden' }
}
];
var ExamData = [
{
workSheet: "Exam",
rows: Exam,
properties:
{ state: 'hidden' }
}
];
var Cat_sample = [
{
name: "Cat_sample",
values: [{ header: "certification", value: [{ name: "certification!$A$2:$A$" + (certification.length + 1) }] },
{ header: "domain", value: [{ name: "domain!$A$2:$A$" + (domain.length + 1) }] },
{ header: "subdomain", value: [{ name: "subdomain!$A$2:$A$" + (subdomain.length + 1) }] },
{ header: "topic", value: [{ name: "topic!$A$2:$A$" + (topic.length + 1) }] },
{ header: "Exam", value: [{ name: "Exam!$A$2:$A$" + (Exam.length + 1) }] },
{ header: "question", value: "" },
{ header: "answer_a", value: "" },
{ header: "answer_b", value: "" },
{ header: "answer_c", value: "" },
{ header: "answer_d", value: "" },
{ header: "correct_answer", value: [{ name: "Correct!$A$2:$A$5" }] },
{ header: "difficult_type", value: [{ name: "Type!$A$2:$A$8" }] },
{ header: "explanation", value: "" }
],
properties: { state: "visible" }
}
];
var workbookData = [this.transform(Cat_sample)[0], certificationData[0], domainData[0], subdomainData[0], topicData[0], ExamData[0], Correct[0], Type[0]]
this.excelService.exportAsExcelFile(workbookData, Cat_sample[0].name);
}
transform(data) {
const noOfRowaToGenerate = 5;
return data.map(({ name, values, properties }) => {
const headers = values.reduce((prev, next) =>
({
...prev, [next.header]: Array.isArray
(next.value) ? next.value.map(({ name }) => name) : next.value
}), {})
return {
workSheet: name,
rows: Array(noOfRowaToGenerate).fill(headers),
properties: properties
}
})
}
}
export interface courselist {
srno: number;
id: string;
test_id: string;
exam_id: string;
title: string;
first_choice: string;
second_choice: string;
third_choice: string;
fourth_choice: string;
answer: string;
type: string;
d_id: string;
sd_id: string;
topic_id: string;
ref_link: string;
youtube_link: string;
bookpage_no: string;
blog_url: string;
createdAt: string;
updatedAt: string;
domin_name: string;
subdomain_name: string;
topic_name: string;
ketexam_name: string;
description: string;
certi_id: string;
certificate_name: string;
}