Skip to content
Snippets Groups Projects
Commit 457572c8 authored by Nayana Mogaveera's avatar Nayana Mogaveera
Browse files

commit-template-api

parents 0206bea1 7b8ce879
No related branches found
No related tags found
1 merge request!9Nayana
.env 0 → 100644
NODE_ENV=development
SERVICE_BASE_URL=https://30dd-206-84-239-127.ngrok-free.app
SERVICE_PORT=5000
LOG_LEVEL=debug
......@@ -13,6 +13,11 @@ const WidgetRefSchema = new Schema({
const TemplateSchema = new Schema({
name: { type: String, required: true },
desc: { type: String },
platform: {
type: String,
enum: ['web', 'mobile', 'both'],
required: true
},
widgets: [WidgetRefSchema],
hashId: { type: String, unique: true, required: true },
createdAt: { type: Date, default: Date.now },
......
......@@ -14,9 +14,9 @@ const updateAndMapWidget = async (page,widgetId,position, startTime, endTime) =>
};
const createTemplate = async (name, desc, widgets, hashId) => {
const createTemplate = async (name, desc,platform, widgets, hashId) => {
try {
const response = await templateService.createTemplate(name, desc, widgets, hashId);
const response = await templateService.createTemplate(name, desc,platform, widgets, hashId);
return { status: '200', response }
} catch (error) {
throw error
......@@ -24,10 +24,12 @@ const createTemplate = async (name, desc, widgets, hashId) => {
};
const getParticularTemplate = async (page) => {
const getParticularTemplate = async (page,platform) => {
try {
const response = await templateService.getParticularTemplate(page);
console.log(page,"Pagessssssss");
const response = await templateService.getParticularTemplate(page,platform);
if (response.length == 0) {
return { status: 404, message: "Template not found" };
}
return { status: '200', response }
} catch (error) {
throw error
......
......@@ -18,8 +18,8 @@ const updateAndMapWidget = async (req, res, next) => {
const createTemplate = async (req, res, next) => {
try {
const { name, desc, widgets, hashId } = req.body;
const response = await templateBusiness.createTemplate(name, desc, widgets, hashId);
const { name, desc,platform, widgets, hashId } = req.body;
const response = await templateBusiness.createTemplate(name, desc,platform, widgets, hashId);
return res.status(response.status).json({ data: response });
} catch (error) {
throw error
......@@ -30,7 +30,8 @@ const getParticularTemplate = async (req, res) => {
try {
console.log("GET template details of a particular page");
const { page } = req.params;
const response = await templateBusiness.getParticularTemplate(page);
const {platform}=req.query
const response = await templateBusiness.getParticularTemplate(page,platform);
return res.status(response.status).json({ data: response });
} catch (error) {
throw error;
......
// const logger = require('utils/logger');
const Widget = require("../models/widget");
const Template = require("../models/template")
const Template = require("../models/template");
const updateAndMapWidget = async (page,widgetId,position, startTime, endTime) => {
const updateAndMapWidget = async (
page,
widgetId,
position,
startTime,
endTime
) => {
try {
const template = await Template.findOne({ name: page });
if (!template) {
return { status: 404, error: 'template not found' };
return { status: 404, error: "template not found" };
}
console.log(page,widgetId,position, startTime, endTime)
const widgetIndex = template.widgets.findIndex(w => w.widgetId.toString() === widgetId);
console.log(page, widgetId, position, startTime, endTime);
const widgetIndex = template.widgets.findIndex(
(w) => w.widgetId.toString() === widgetId
);
if (widgetIndex !== -1) {
template.widgets[widgetIndex] = {
...template.widgets[widgetIndex],
position,
startTime,
endTime
endTime,
};
} else {
template.widgets.push({
widgetId: widgetId,
position,
startTime,
endTime
endTime,
});
}
await template.save();
return { status: 200, widgetId: widgetId, page: page };
} catch (error) {
throw error
throw error;
}
};
const createTemplate = async (name, desc, widgets, hashId) => {
const createTemplate = async (name, desc, platform, widgets, hashId) => {
try {
console.log("in service")
const newTemplate = new Template({
name,
desc,
platform,
widgets,
hashId
hashId,
});
// Save the template to the database
await newTemplate.save();
return { status: 201, message: 'Template created successfully', id: newTemplate._id };
return {
status: 201,
message: "Template created successfully",
id: newTemplate._id,
};
} catch (error) {
throw error
throw error;
}
};
const getParticularTemplate = async (page,res) => {
const getParticularTemplate = async (page, platform) => {
try {
let pipeline = [];
pipeline.push({ '$match': { 'name': page } });
pipeline.push({ '$unwind': { path: '$widgets' } });
pipeline.push({ $lookup: { localField: "widgets.widgetId", foreignField: "_id", from: "widgets", as: "widget" } });
pipeline.push({ $unwind: { "path": "$widget" } });
pipeline.push({ $match: { name: page, platform: platform } });
pipeline.push({ $unwind: { path: "$widgets" } });
pipeline.push({
$lookup: {
localField: "widgets.widgetId",
foreignField: "_id",
from: "widgets",
as: "widget",
},
});
pipeline.push({ $unwind: { path: "$widget" } });
const group = {
$group: {
'_id': '$_id', 'name': { '$first': '$name' }, 'desc': { '$first': '$desc' }, 'hashId': { '$first': '$hashId' },
_id: "$_id",
name: { $first: "$name" },
desc: { $first: "$desc" },
hashId: { $first: "$hashId" },
platform: { $first: "$platform" },
'widgets': {
widgets: {
$addToSet: {
'widgetId': '$widget._id', 'title': '$widget.title', 'widget': '$widget.widget',
'enable': '$widget.enable', 'sectionHeadingText': '$widget.sectionHeadingText', 'apiUrl':'$widget.apiUrl',
'buttonData':'$widget.buttonData','list':'$widget.list','position':'$widgets.position','startTime':'$widgets.startTime','endTime':'$widgets.endTime',
}
}
}
widgetId: "$widget._id",
title: "$widget.title",
widget: "$widget.widget",
enable: "$widget.enable",
sectionHeadingText: "$widget.sectionHeadingText",
apiUrl: "$widget.apiUrl",
buttonData: "$widget.buttonData",
list: "$widget.list",
position: "$widgets.position",
startTime: "$widgets.startTime",
endTime: "$widgets.endTime",
},
},
},
};
pipeline.push(group);
const template = await Template.aggregate(pipeline)
// const template = await Template.findOne({ name: page}).populate('widgets');
if (!template) {
// return res.status(404).json({ error: 'Template not found' });
console.error('Template not found');
// res.status(404).send();
}
const template = await Template.aggregate(pipeline);
return template;
} catch (error) {
throw error
throw error;
}
};
module.exports = {
updateAndMapWidget,
createTemplate,
getParticularTemplate
getParticularTemplate,
};
......@@ -11,6 +11,7 @@
"license": "ISC",
"dependencies": {
"body-parser": "^1.20.2",
"dotenv": "^16.4.5",
"express": "^4.19.2",
"mongoose": "^8.6.0",
"nodemon": "^3.1.4",
......
// server.js
require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
const swaggerUi = require('swagger-ui-express');
......@@ -19,10 +19,11 @@ app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
// API base URL
app.use(apiBaseRouter);
// Start the server
const PORT = process.env.PORT || 5000;
const PORT = process.env.SERVICE_PORT || 5000;
const BASE_URL = process.env.SERVICE_BASE_URL || `http://localhost:${PORT}`;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
console.log(`Swagger UI available at http://localhost:${PORT}/api-docs`);
console.log(`Swagger UI available at ${BASE_URL}/api-docs`);
});
......@@ -21,6 +21,13 @@ paths:
schema:
type: string
description: The page for which template details are requested.
- in: query # Add platform as a query parameter
name: platform
required: true
schema:
type: string
enum: ['web', 'mobile', 'both']
description: The platform for which template details are requested (web, mobile, or both).
responses:
'200':
description: Template retrieved successfully
......@@ -310,6 +317,11 @@ paths:
type: string
description: A description of the template
example: "Template for the homepage widget"
platform:
type: string
enum: ['web', 'mobile', 'both']
description: The platform for which the template is intended
example: "web"
widgets:
type: array
description: A list of widgets mapped to the template
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment