diff --git a/packages/search-service/service.ts b/packages/search-service/service.ts index 625ff14f5..3816bdedd 100644 --- a/packages/search-service/service.ts +++ b/packages/search-service/service.ts @@ -10,6 +10,7 @@ import { SearchMapResolver } from './src/search-mapping/resolver'; import searchMapSchema from './src/search-mapping/typedef.graphql'; import database from './src/setup/database'; import { NODE_ENV, PORT } from './src/setup/env'; +import { getSiteMap } from './src/search-sitemap/resolver'; (async function setConfig() { /* Setup database connection */ @@ -21,6 +22,11 @@ import { NODE_ENV, PORT } from './src/setup/env'; const app = express(); +app.get('/sitemap', async (req, res) => { + const data = await getSiteMap(req); + res.send(data); +}); + app.use(morgan(':method :url :status :res[content-length] - :response-time ms')); const schema = mergeSchemas({ typeDefs: [searchConfigSchema, searchMapSchema], diff --git a/packages/search-service/src/search-sitemap/resolver.ts b/packages/search-service/src/search-sitemap/resolver.ts new file mode 100644 index 000000000..b9bb2120b --- /dev/null +++ b/packages/search-service/src/search-sitemap/resolver.ts @@ -0,0 +1,21 @@ +import { Request } from 'express'; +import { SiteMaps } from './schema'; + +export const getSiteMap = async (req: Request) => { + const { contentType } = req.query; + + const sitemapData = (await SiteMaps.find()).map((item) => ({ + url: item.url, + contentType: item.contentType, + lastModified: new Date().toISOString(), + })); + + const filteredSitemapData = contentType + ? sitemapData.filter((item) => item.contentType === contentType) + : sitemapData; + + return { + count: filteredSitemapData.length, + data: filteredSitemapData, + }; +}; diff --git a/packages/search-service/src/search-sitemap/schema.ts b/packages/search-service/src/search-sitemap/schema.ts new file mode 100644 index 000000000..5064a24e7 --- /dev/null +++ b/packages/search-service/src/search-sitemap/schema.ts @@ -0,0 +1,14 @@ +import { + Document, Model, model, Schema, +} from 'mongoose'; + +export const SiteMapSchema: Schema = new Schema({ + url: { type: String }, + contentType: { type: String }, +}); + +interface SiteMapModel extends Sitemap, Document {} + +interface SiteMapStatic extends Model {} + +export const SiteMaps: Model = model('SiteMap', SiteMapSchema); diff --git a/packages/search-service/src/search-sitemap/types.d.ts b/packages/search-service/src/search-sitemap/types.d.ts new file mode 100644 index 000000000..844bcd80b --- /dev/null +++ b/packages/search-service/src/search-sitemap/types.d.ts @@ -0,0 +1,4 @@ +declare type Sitemap = { + url: string; + contentType: string; +};