@eeplatform/basic-edu 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/models/region.model.ts","../src/repositories/region.repository.ts","../src/controllers/region.controller.ts","../src/models/division.model.ts","../src/repositories/division.repository.ts","../src/controllers/division.controller.ts","../src/models/school.model.ts","../src/repositories/school.repository.ts","../src/controllers/school.controller.ts"],"sourcesContent":["export * from \"./models/region.model\";\nexport * from \"./repositories/region.repository\";\nexport * from \"./controllers/region.controller\";\n\nexport * from \"./models/division.model\";\nexport * from \"./repositories/division.repository\";\nexport * from \"./controllers/division.controller\";\n\nexport * from \"./models/school.model\";\nexport * from \"./repositories/school.repository\";\nexport * from \"./controllers/school.controller\";\n","import { BadRequestError } from \"@eeplatform/nodejs-utils\";\nimport Joi from \"joi\";\nimport { ObjectId } from \"mongodb\";\n\nexport type TRegion = {\n _id?: ObjectId;\n name?: string;\n director?: ObjectId;\n directorName?: string;\n createdAt?: string;\n updatedAt?: string;\n deletedAt?: string;\n};\n\nexport const schemaRegion = Joi.object({\n _id: Joi.string().hex().optional().allow(null, \"\"),\n name: Joi.string().min(1).max(100).required(),\n createdAt: Joi.string().isoDate().optional(),\n updatedAt: Joi.string().isoDate().optional(),\n deletedAt: Joi.string().isoDate().optional().allow(null, \"\"),\n});\n\nexport function modelRegion(value: TRegion): TRegion {\n const { error } = schemaRegion.validate(value);\n if (error) {\n throw new BadRequestError(`Invalid region data: ${error.message}`);\n }\n\n if (value._id && typeof value._id === \"string\") {\n try {\n value._id = ObjectId.createFromTime(value._id);\n } catch (error) {\n throw new Error(\"Invalid _id.\");\n }\n }\n\n return {\n _id: value._id,\n name: value.name,\n createdAt: value.createdAt ?? new Date().toISOString(),\n updatedAt: value.updatedAt ?? \"\",\n deletedAt: value.deletedAt ?? \"\",\n };\n}\n","import {\n AppError,\n BadRequestError,\n InternalServerError,\n logger,\n makeCacheKey,\n paginate,\n useAtlas,\n useCache,\n} from \"@eeplatform/nodejs-utils\";\nimport { modelRegion, TRegion } from \"../models/region.model\";\nimport { ClientSession, ObjectId } from \"mongodb\";\n\nexport function useRegionRepo() {\n const db = useAtlas.getDb();\n if (!db) {\n throw new Error(\"Unable to connect to server.\");\n }\n\n const namespace_collection = \"deped.regions\";\n\n const collection = db.collection(namespace_collection);\n\n const { getCache, setCache, delNamespace } = useCache(namespace_collection);\n\n async function createIndexes() {\n try {\n await collection.createIndexes([\n { key: { name: 1 } },\n { key: { createdAt: 1 } },\n { key: { name: \"text\" } },\n { key: { name: 1 }, unique: true, name: \"unique_name\" },\n ]);\n } catch (error) {\n throw new Error(\"Failed to create index on regions.\");\n }\n }\n\n function delCachedData() {\n delNamespace()\n .then(() => {\n logger.log({\n level: \"info\",\n message: `Cache namespace cleared for ${namespace_collection}`,\n });\n })\n .catch((err) => {\n logger.log({\n level: \"error\",\n message: `Failed to clear cache namespace for ${namespace_collection}: ${err.message}`,\n });\n });\n }\n\n async function add(value: TRegion, session?: ClientSession) {\n try {\n value = modelRegion(value);\n const res = await collection.insertOne(value, { session });\n delCachedData();\n return res.insertedId;\n } catch (error: any) {\n logger.log({\n level: \"error\",\n message: error.message,\n });\n if (error instanceof AppError) {\n throw error;\n } else {\n const isDuplicated = error.message.includes(\"duplicate\");\n\n if (isDuplicated) {\n throw new BadRequestError(\"Region already exists.\");\n }\n\n throw new Error(\"Failed to create region.\");\n }\n }\n }\n\n async function getAll({\n search = \"\",\n page = 1,\n limit = 10,\n sort = {},\n status = \"active\",\n } = {}) {\n page = page > 0 ? page - 1 : 0;\n\n const query: Record<string, any> = {\n deletedAt: { $in: [\"\", null] },\n status,\n };\n\n sort = Object.keys(sort).length > 0 ? sort : { _id: 1 };\n\n const cacheKeyOptions: Record<string, any> = {\n status,\n page,\n limit,\n sort: JSON.stringify(sort),\n };\n\n if (search) {\n query.$text = { $search: search };\n cacheKeyOptions.search = search;\n }\n\n const cacheKey = makeCacheKey(namespace_collection, cacheKeyOptions);\n\n logger.log({\n level: \"info\",\n message: `Cache key for getAll regions: ${cacheKey}`,\n });\n\n try {\n const cached = await getCache<Record<string, any>>(cacheKey);\n if (cached) {\n logger.log({\n level: \"info\",\n message: `Cache hit for getAll regions: ${cacheKey}`,\n });\n return cached;\n }\n\n const items = await collection\n .aggregate([\n { $match: query },\n { $sort: sort },\n { $skip: page * limit },\n { $limit: limit },\n ])\n .toArray();\n const length = await collection.countDocuments(query);\n\n const data = paginate(items, page, limit, length);\n\n setCache(cacheKey, data, 600)\n .then(() => {\n logger.log({\n level: \"info\",\n message: `Cache set for getAll regions: ${cacheKey}`,\n });\n })\n .catch((err) => {\n logger.log({\n level: \"error\",\n message: `Failed to set cache for getAll regions: ${err.message}`,\n });\n });\n\n return data;\n } catch (error) {\n logger.log({ level: \"error\", message: `${error}` });\n throw error;\n }\n }\n\n async function getById(_id: string | ObjectId) {\n try {\n _id = new ObjectId(_id);\n } catch (error) {\n throw new BadRequestError(\"Invalid ID.\");\n }\n\n const cacheKey = makeCacheKey(namespace_collection, { _id: String(_id) });\n\n try {\n const cached = await getCache<TRegion>(cacheKey);\n if (cached) {\n logger.log({\n level: \"info\",\n message: `Cache hit for getById region: ${cacheKey}`,\n });\n return cached;\n }\n\n const result = await collection.findOne<TRegion>({\n _id,\n deletedAt: { $in: [\"\", null] },\n });\n if (!result) {\n throw new BadRequestError(\"Region not found.\");\n }\n\n setCache(cacheKey, result, 300)\n .then(() => {\n logger.log({\n level: \"info\",\n message: `Cache set for region by id: ${cacheKey}`,\n });\n })\n .catch((err) => {\n logger.log({\n level: \"error\",\n message: `Failed to set cache for region by id: ${err.message}`,\n });\n });\n\n return result;\n } catch (error) {\n if (error instanceof AppError) {\n throw error;\n } else {\n throw new InternalServerError(\"Failed to get region.\");\n }\n }\n }\n\n async function getByName(name: string) {\n const cacheKey = makeCacheKey(namespace_collection, { name });\n\n try {\n const cached = await getCache<TRegion>(cacheKey);\n if (cached) {\n logger.log({\n level: \"info\",\n message: `Cache hit for getByName region: ${cacheKey}`,\n });\n return cached;\n }\n\n const result = await collection.findOne<TRegion>({\n name,\n deletedAt: { $in: [\"\", null] },\n });\n if (!result) {\n throw new BadRequestError(\"Region not found.\");\n }\n\n setCache(cacheKey, result, 300)\n .then(() => {\n logger.log({\n level: \"info\",\n message: `Cache set for region by name: ${cacheKey}`,\n });\n })\n .catch((err) => {\n logger.log({\n level: \"error\",\n message: `Failed to set cache for region by name: ${err.message}`,\n });\n });\n\n return result;\n } catch (error) {\n if (error instanceof AppError) {\n throw error;\n } else {\n throw new InternalServerError(\"Failed to get region.\");\n }\n }\n }\n\n async function updateFieldById(\n { _id, field, value } = {} as {\n _id: string | ObjectId;\n field: string;\n value: string;\n },\n session?: ClientSession\n ) {\n // Allowed fields to prevent arbitrary updates\n const allowedFields = [\"name\"];\n\n if (!allowedFields.includes(field)) {\n throw new BadRequestError(\n `Field \"${field}\" is not allowed to be updated.`\n );\n }\n\n // Validate ID\n try {\n _id = new ObjectId(_id);\n } catch (error) {\n throw new BadRequestError(\"Invalid ID.\");\n }\n\n try {\n await collection.updateOne(\n { _id, deletedAt: { $in: [\"\", null] } },\n { $set: { [field]: value, updatedAt: new Date().toISOString() } },\n { session }\n );\n\n delCachedData();\n\n return `Successfully updated region ${field}.`;\n } catch (error) {\n throw new InternalServerError(`Failed to update region ${field}.`);\n }\n }\n\n async function deleteById(_id: string | ObjectId) {\n try {\n _id = new ObjectId(_id);\n } catch (error) {\n throw new BadRequestError(\"Invalid ID.\");\n }\n\n try {\n await collection.updateOne(\n { _id },\n { $set: { deletedAt: new Date().toISOString() } }\n );\n delCachedData();\n return \"Successfully deleted region.\";\n } catch (error) {\n throw new InternalServerError(\"Failed to delete region.\");\n }\n }\n\n return {\n createIndexes,\n add,\n getAll,\n getById,\n updateFieldById,\n deleteById,\n getByName,\n };\n}\n","import { Request, Response, NextFunction } from \"express\";\nimport { BadRequestError } from \"@eeplatform/nodejs-utils\";\nimport Joi from \"joi\";\nimport { useRegionRepo } from \"../repositories/region.repository\";\nimport { schemaRegion } from \"../models/region.model\";\n\nexport function useRegionController() {\n const {\n add: _add,\n getAll: _getAll,\n getById: _getById,\n getByName: _getByName,\n updateFieldById: _updateFieldById,\n deleteById: _deleteById,\n } = useRegionRepo();\n\n async function add(req: Request, res: Response, next: NextFunction) {\n const value = req.body;\n\n const { error } = schemaRegion.validate(value);\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const data = await _add(value);\n res.json({\n message: \"Successfully created region.\",\n data,\n });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function getAll(req: Request, res: Response, next: NextFunction) {\n const query = req.query;\n\n const validation = Joi.object({\n page: Joi.number().min(1).optional().allow(\"\", null),\n limit: Joi.number().min(1).optional().allow(\"\", null),\n search: Joi.string().optional().allow(\"\", null),\n status: Joi.string().optional().allow(\"\", null),\n });\n\n const { error } = validation.validate(query);\n\n const page =\n typeof req.query.page === \"string\" ? Number(req.query.page) : 1;\n const limit =\n typeof req.query.limit === \"string\" ? Number(req.query.limit) : 10;\n const search = (req.query.search as string) ?? \"\";\n const status = (req.query.status as string) ?? \"active\";\n\n const isPageNumber = isFinite(page);\n if (!isPageNumber) {\n next(new BadRequestError(\"Invalid page number.\"));\n return;\n }\n\n const isLimitNumber = isFinite(limit);\n\n if (!isLimitNumber) {\n next(new BadRequestError(\"Invalid limit number.\"));\n return;\n }\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const data = await _getAll({ page, limit, search, status });\n res.json(data);\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function getById(req: Request, res: Response, next: NextFunction) {\n const id = req.params.id;\n\n const validation = Joi.object({\n id: Joi.string().hex().required(),\n });\n\n const { error } = validation.validate({ id });\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const data = await _getById(id);\n res.json({\n message: \"Successfully retrieved region.\",\n data,\n });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function getByName(req: Request, res: Response, next: NextFunction) {\n const name = req.params.name;\n\n const validation = Joi.object({\n name: Joi.string().required(),\n });\n\n const { error } = validation.validate({ name });\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const data = await _getByName(name);\n res.json({\n message: \"Successfully retrieved region.\",\n data,\n });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function updateField(req: Request, res: Response, next: NextFunction) {\n const _id = req.params.id;\n const { field, value } = req.body;\n\n const validation = Joi.object({\n _id: Joi.string().hex().required(),\n field: Joi.string().valid(\"name\", \"director\", \"directorName\").required(),\n value: Joi.string().required(),\n });\n\n const { error } = validation.validate({ _id, field, value });\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const message = await _updateFieldById({ _id, field, value });\n res.json({ message });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function deleteById(req: Request, res: Response, next: NextFunction) {\n const _id = req.params.id;\n\n const validation = Joi.object({\n _id: Joi.string().hex().required(),\n });\n\n const { error } = validation.validate({ _id });\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const message = await _deleteById(_id);\n res.json({ message });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n return {\n add,\n getAll,\n getById,\n getByName,\n updateField,\n deleteById,\n };\n}\n","import { BadRequestError } from \"@eeplatform/nodejs-utils\";\nimport Joi from \"joi\";\nimport { ObjectId } from \"mongodb\";\n\nexport type TDivision = {\n _id?: ObjectId;\n name?: string;\n region?: ObjectId;\n regionName?: string;\n superintendent?: ObjectId;\n superintendentName?: string;\n createdAt?: string;\n updatedAt?: string;\n deletedAt?: string;\n};\n\nexport const schemaDivision = Joi.object({\n _id: Joi.string().hex().optional().allow(null, \"\"),\n name: Joi.string().min(1).max(100).required(),\n region: Joi.string().hex().optional().allow(null, \"\"),\n regionName: Joi.string().min(1).max(100).optional().allow(null, \"\"),\n superintendent: Joi.string().hex().optional().allow(null, \"\"),\n superintendentName: Joi.string().min(1).max(100).optional().allow(null, \"\"),\n createdAt: Joi.string().isoDate().optional(),\n updatedAt: Joi.string().isoDate().optional(),\n deletedAt: Joi.string().isoDate().optional().allow(null, \"\"),\n});\n\nexport function modelDivision(value: TDivision): TDivision {\n const { error } = schemaDivision.validate(value);\n if (error) {\n throw new BadRequestError(`Invalid sdo data: ${error.message}`);\n }\n\n if (value._id && typeof value._id === \"string\") {\n try {\n value._id = ObjectId.createFromTime(value._id);\n } catch (error) {\n throw new Error(\"Invalid _id.\");\n }\n }\n\n return {\n _id: value._id,\n name: value.name,\n region: value.region,\n regionName: value.regionName ?? \"\",\n superintendent: value.superintendent,\n superintendentName: value.superintendentName ?? \"\",\n createdAt: value.createdAt ?? new Date().toISOString(),\n updatedAt: value.updatedAt ?? \"\",\n deletedAt: value.deletedAt ?? \"\",\n };\n}\n","import {\n AppError,\n BadRequestError,\n InternalServerError,\n logger,\n makeCacheKey,\n paginate,\n useAtlas,\n useCache,\n} from \"@eeplatform/nodejs-utils\";\nimport { modelDivision, TDivision } from \"../models/division.model\";\nimport { ClientSession, ObjectId } from \"mongodb\";\n\nexport function useDivisionRepo() {\n const db = useAtlas.getDb();\n if (!db) {\n throw new Error(\"Unable to connect to server.\");\n }\n\n const namespace_collection = \"deped.divisions\";\n\n const collection = db.collection(namespace_collection);\n\n const { getCache, setCache, delNamespace } = useCache(namespace_collection);\n\n async function createIndexes() {\n try {\n await collection.createIndexes([\n { key: { name: 1 } },\n { key: { createdAt: 1 } },\n { key: { name: \"text\" } },\n { key: { name: 1 }, unique: true, name: \"unique_name\" },\n ]);\n } catch (error) {\n throw new Error(\"Failed to create index on divisions.\");\n }\n }\n\n function delCachedData() {\n delNamespace()\n .then(() => {\n logger.log({\n level: \"info\",\n message: `Cache namespace cleared for ${namespace_collection}`,\n });\n })\n .catch((err) => {\n logger.log({\n level: \"error\",\n message: `Failed to clear cache namespace for ${namespace_collection}: ${err.message}`,\n });\n });\n }\n\n async function add(value: TDivision, session?: ClientSession) {\n try {\n value = modelDivision(value);\n const res = await collection.insertOne(value, { session });\n delCachedData();\n return res.insertedId;\n } catch (error: any) {\n logger.log({\n level: \"error\",\n message: error.message,\n });\n if (error instanceof AppError) {\n throw error;\n } else {\n const isDuplicated = error.message.includes(\"duplicate\");\n\n if (isDuplicated) {\n throw new BadRequestError(\"Division already exists.\");\n }\n\n throw new Error(\"Failed to create division.\");\n }\n }\n }\n\n async function getAll({\n search = \"\",\n page = 1,\n limit = 10,\n sort = {},\n status = \"active\",\n } = {}) {\n page = page > 0 ? page - 1 : 0;\n\n const query: Record<string, any> = {\n deletedAt: { $in: [\"\", null] },\n status,\n };\n\n sort = Object.keys(sort).length > 0 ? sort : { _id: 1 };\n\n const cacheKeyOptions: Record<string, any> = {\n status,\n page,\n limit,\n sort: JSON.stringify(sort),\n };\n\n if (search) {\n query.$text = { $search: search };\n cacheKeyOptions.search = search;\n }\n\n const cacheKey = makeCacheKey(namespace_collection, cacheKeyOptions);\n\n logger.log({\n level: \"info\",\n message: `Cache key for getAll divisions: ${cacheKey}`,\n });\n\n try {\n const cached = await getCache<Record<string, any>>(cacheKey);\n if (cached) {\n logger.log({\n level: \"info\",\n message: `Cache hit for getAll divisions: ${cacheKey}`,\n });\n return cached;\n }\n\n const items = await collection\n .aggregate([\n { $match: query },\n { $sort: sort },\n { $skip: page * limit },\n { $limit: limit },\n ])\n .toArray();\n const length = await collection.countDocuments(query);\n\n const data = paginate(items, page, limit, length);\n\n setCache(cacheKey, data, 600)\n .then(() => {\n logger.log({\n level: \"info\",\n message: `Cache set for getAll divisions: ${cacheKey}`,\n });\n })\n .catch((err) => {\n logger.log({\n level: \"error\",\n message: `Failed to set cache for getAll divisions: ${err.message}`,\n });\n });\n\n return data;\n } catch (error) {\n logger.log({ level: \"error\", message: `${error}` });\n throw error;\n }\n }\n\n async function getById(_id: string | ObjectId) {\n try {\n _id = new ObjectId(_id);\n } catch (error) {\n throw new BadRequestError(\"Invalid ID.\");\n }\n\n const cacheKey = makeCacheKey(namespace_collection, { _id: String(_id) });\n\n try {\n const cached = await getCache<TDivision>(cacheKey);\n if (cached) {\n logger.log({\n level: \"info\",\n message: `Cache hit for getById division: ${cacheKey}`,\n });\n return cached;\n }\n\n const result = await collection.findOne<TDivision>({\n _id,\n deletedAt: { $in: [\"\", null] },\n });\n if (!result) {\n throw new BadRequestError(\"Division not found.\");\n }\n\n setCache(cacheKey, result, 300)\n .then(() => {\n logger.log({\n level: \"info\",\n message: `Cache set for division by id: ${cacheKey}`,\n });\n })\n .catch((err) => {\n logger.log({\n level: \"error\",\n message: `Failed to set cache for division by id: ${err.message}`,\n });\n });\n\n return result;\n } catch (error) {\n if (error instanceof AppError) {\n throw error;\n } else {\n throw new InternalServerError(\"Failed to get division.\");\n }\n }\n }\n\n async function getByName(name: string) {\n const cacheKey = makeCacheKey(namespace_collection, { name });\n\n try {\n const cached = await getCache<TDivision>(cacheKey);\n if (cached) {\n logger.log({\n level: \"info\",\n message: `Cache hit for getByName division: ${cacheKey}`,\n });\n return cached;\n }\n\n const result = await collection.findOne<TDivision>({\n name,\n deletedAt: { $in: [\"\", null] },\n });\n if (!result) {\n throw new BadRequestError(\"Division not found.\");\n }\n\n setCache(cacheKey, result, 300)\n .then(() => {\n logger.log({\n level: \"info\",\n message: `Cache set for division by name: ${cacheKey}`,\n });\n })\n .catch((err) => {\n logger.log({\n level: \"error\",\n message: `Failed to set cache for division by name: ${err.message}`,\n });\n });\n\n return result;\n } catch (error) {\n if (error instanceof AppError) {\n throw error;\n } else {\n throw new InternalServerError(\"Failed to get division.\");\n }\n }\n }\n\n async function updateFieldById(\n { _id, field, value } = {} as {\n _id: string | ObjectId;\n field: string;\n value: string;\n },\n session?: ClientSession\n ) {\n // Allowed fields to prevent arbitrary updates\n const allowedFields = [\"name\"];\n\n if (!allowedFields.includes(field)) {\n throw new BadRequestError(\n `Field \"${field}\" is not allowed to be updated.`\n );\n }\n\n // Validate ID\n try {\n _id = new ObjectId(_id);\n } catch (error) {\n throw new BadRequestError(\"Invalid ID.\");\n }\n\n try {\n await collection.updateOne(\n { _id, deletedAt: { $in: [\"\", null] } },\n { $set: { [field]: value, updatedAt: new Date().toISOString() } },\n { session }\n );\n\n delCachedData();\n\n return `Successfully updated division ${field}.`;\n } catch (error) {\n throw new InternalServerError(`Failed to update division ${field}.`);\n }\n }\n\n async function deleteById(_id: string | ObjectId) {\n try {\n _id = new ObjectId(_id);\n } catch (error) {\n throw new BadRequestError(\"Invalid ID.\");\n }\n\n try {\n await collection.updateOne(\n { _id },\n { $set: { deletedAt: new Date().toISOString() } }\n );\n delCachedData();\n return \"Successfully deleted division.\";\n } catch (error) {\n throw new InternalServerError(\"Failed to delete division.\");\n }\n }\n\n return {\n createIndexes,\n add,\n getAll,\n getById,\n updateFieldById,\n deleteById,\n getByName,\n };\n}\n","import { Request, Response, NextFunction } from \"express\";\nimport { BadRequestError } from \"@eeplatform/nodejs-utils\";\nimport Joi from \"joi\";\nimport { useDivisionRepo } from \"../repositories/division.repository\";\nimport { schemaDivision } from \"../models/division.model\";\n\nexport function useDivisionController() {\n const {\n add: _add,\n getAll: _getAll,\n getById: _getById,\n getByName: _getByName,\n updateFieldById: _updateFieldById,\n deleteById: _deleteById,\n } = useDivisionRepo();\n\n async function add(req: Request, res: Response, next: NextFunction) {\n const value = req.body;\n\n const { error } = schemaDivision.validate(value);\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const data = await _add(value);\n res.json({\n message: \"Successfully created division.\",\n data,\n });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function getAll(req: Request, res: Response, next: NextFunction) {\n const query = req.query;\n\n const validation = Joi.object({\n page: Joi.number().min(1).optional().allow(\"\", null),\n limit: Joi.number().min(1).optional().allow(\"\", null),\n search: Joi.string().optional().allow(\"\", null),\n status: Joi.string().optional().allow(\"\", null),\n });\n\n const { error } = validation.validate(query);\n\n const page =\n typeof req.query.page === \"string\" ? Number(req.query.page) : 1;\n const limit =\n typeof req.query.limit === \"string\" ? Number(req.query.limit) : 10;\n const search = (req.query.search as string) ?? \"\";\n const status = (req.query.status as string) ?? \"active\";\n\n const isPageNumber = isFinite(page);\n if (!isPageNumber) {\n next(new BadRequestError(\"Invalid page number.\"));\n return;\n }\n\n const isLimitNumber = isFinite(limit);\n\n if (!isLimitNumber) {\n next(new BadRequestError(\"Invalid limit number.\"));\n return;\n }\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const data = await _getAll({ page, limit, search, status });\n res.json(data);\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function getById(req: Request, res: Response, next: NextFunction) {\n const id = req.params.id;\n\n const validation = Joi.object({\n id: Joi.string().hex().required(),\n });\n\n const { error } = validation.validate({ id });\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const data = await _getById(id);\n res.json({\n message: \"Successfully retrieved division.\",\n data,\n });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function getByName(req: Request, res: Response, next: NextFunction) {\n const name = req.params.name;\n\n const validation = Joi.object({\n name: Joi.string().required(),\n });\n\n const { error } = validation.validate({ name });\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const data = await _getByName(name);\n res.json({\n message: \"Successfully retrieved division.\",\n data,\n });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function updateField(req: Request, res: Response, next: NextFunction) {\n const _id = req.params.id;\n const { field, value } = req.body;\n\n const validation = Joi.object({\n _id: Joi.string().hex().required(),\n field: Joi.string().valid(\"name\", \"director\", \"directorName\").required(),\n value: Joi.string().required(),\n });\n\n const { error } = validation.validate({ _id, field, value });\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const message = await _updateFieldById({ _id, field, value });\n res.json({ message });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function deleteById(req: Request, res: Response, next: NextFunction) {\n const _id = req.params.id;\n\n const validation = Joi.object({\n _id: Joi.string().hex().required(),\n });\n\n const { error } = validation.validate({ _id });\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const message = await _deleteById(_id);\n res.json({ message });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n return {\n add,\n getAll,\n getById,\n getByName,\n updateField,\n deleteById,\n };\n}\n","import { BadRequestError } from \"@eeplatform/nodejs-utils\";\nimport Joi from \"joi\";\nimport { ObjectId } from \"mongodb\";\n\nexport type TSchool = {\n _id?: ObjectId;\n name?: string;\n region?: ObjectId;\n regionName?: string;\n division?: ObjectId;\n divisionName?: string;\n principal?: ObjectId;\n principalName?: string;\n createdAt?: string;\n updatedAt?: string;\n deletedAt?: string;\n};\n\nexport const schemaSchool = Joi.object({\n _id: Joi.string().hex().optional().allow(null, \"\"),\n name: Joi.string().min(1).max(100).required(),\n region: Joi.string().hex().optional().allow(null, \"\"),\n regionName: Joi.string().min(1).max(100).optional().allow(null, \"\"),\n division: Joi.string().hex().optional().allow(null, \"\"),\n divisionName: Joi.string().min(1).max(100).optional().allow(null, \"\"),\n principal: Joi.string().hex().optional().allow(null, \"\"),\n principalName: Joi.string().min(1).max(100).optional().allow(null, \"\"),\n createdAt: Joi.string().isoDate().optional(),\n updatedAt: Joi.string().isoDate().optional(),\n deletedAt: Joi.string().isoDate().optional().allow(null, \"\"),\n});\n\nexport function modelSchool(value: TSchool): TSchool {\n const { error } = schemaSchool.validate(value);\n if (error) {\n throw new BadRequestError(`Invalid sdo data: ${error.message}`);\n }\n\n if (value._id && typeof value._id === \"string\") {\n try {\n value._id = ObjectId.createFromTime(value._id);\n } catch (error) {\n throw new Error(\"Invalid _id.\");\n }\n }\n\n return {\n _id: value._id,\n name: value.name,\n region: value.region,\n regionName: value.regionName ?? \"\",\n division: value.division,\n divisionName: value.divisionName ?? \"\",\n principal: value.principal,\n principalName: value.principalName ?? \"\",\n createdAt: value.createdAt ?? new Date().toISOString(),\n updatedAt: value.updatedAt ?? \"\",\n deletedAt: value.deletedAt ?? \"\",\n };\n}\n","import {\n AppError,\n BadRequestError,\n InternalServerError,\n logger,\n makeCacheKey,\n paginate,\n useAtlas,\n useCache,\n} from \"@eeplatform/nodejs-utils\";\nimport { modelSchool, TSchool } from \"../models/school.model\";\nimport { ClientSession, ObjectId } from \"mongodb\";\n\nexport function useSchoolRepo() {\n const db = useAtlas.getDb();\n if (!db) {\n throw new Error(\"Unable to connect to server.\");\n }\n\n const namespace_collection = \"deped.schools\";\n\n const collection = db.collection(namespace_collection);\n\n const { getCache, setCache, delNamespace } = useCache(namespace_collection);\n\n async function createIndexes() {\n try {\n await collection.createIndexes([\n { key: { name: 1 } },\n { key: { createdAt: 1 } },\n { key: { name: \"text\" } },\n { key: { name: 1 }, unique: true, name: \"unique_name\" },\n ]);\n } catch (error) {\n throw new Error(\"Failed to create index on schools.\");\n }\n }\n\n function delCachedData() {\n delNamespace()\n .then(() => {\n logger.log({\n level: \"info\",\n message: `Cache namespace cleared for ${namespace_collection}`,\n });\n })\n .catch((err) => {\n logger.log({\n level: \"error\",\n message: `Failed to clear cache namespace for ${namespace_collection}: ${err.message}`,\n });\n });\n }\n\n async function add(value: TSchool, session?: ClientSession) {\n try {\n value = modelSchool(value);\n const res = await collection.insertOne(value, { session });\n delCachedData();\n return res.insertedId;\n } catch (error: any) {\n logger.log({\n level: \"error\",\n message: error.message,\n });\n if (error instanceof AppError) {\n throw error;\n } else {\n const isDuplicated = error.message.includes(\"duplicate\");\n\n if (isDuplicated) {\n throw new BadRequestError(\"School already exists.\");\n }\n\n throw new Error(\"Failed to create school.\");\n }\n }\n }\n\n async function getAll({\n search = \"\",\n page = 1,\n limit = 10,\n sort = {},\n status = \"active\",\n } = {}) {\n page = page > 0 ? page - 1 : 0;\n\n const query: Record<string, any> = {\n deletedAt: { $in: [\"\", null] },\n status,\n };\n\n sort = Object.keys(sort).length > 0 ? sort : { _id: 1 };\n\n const cacheKeyOptions: Record<string, any> = {\n status,\n page,\n limit,\n sort: JSON.stringify(sort),\n };\n\n if (search) {\n query.$text = { $search: search };\n cacheKeyOptions.search = search;\n }\n\n const cacheKey = makeCacheKey(namespace_collection, cacheKeyOptions);\n\n logger.log({\n level: \"info\",\n message: `Cache key for getAll schools: ${cacheKey}`,\n });\n\n try {\n const cached = await getCache<Record<string, any>>(cacheKey);\n if (cached) {\n logger.log({\n level: \"info\",\n message: `Cache hit for getAll schools: ${cacheKey}`,\n });\n return cached;\n }\n\n const items = await collection\n .aggregate([\n { $match: query },\n { $sort: sort },\n { $skip: page * limit },\n { $limit: limit },\n ])\n .toArray();\n const length = await collection.countDocuments(query);\n\n const data = paginate(items, page, limit, length);\n\n setCache(cacheKey, data, 600)\n .then(() => {\n logger.log({\n level: \"info\",\n message: `Cache set for getAll schools: ${cacheKey}`,\n });\n })\n .catch((err) => {\n logger.log({\n level: \"error\",\n message: `Failed to set cache for getAll schools: ${err.message}`,\n });\n });\n\n return data;\n } catch (error) {\n logger.log({ level: \"error\", message: `${error}` });\n throw error;\n }\n }\n\n async function getById(_id: string | ObjectId) {\n try {\n _id = new ObjectId(_id);\n } catch (error) {\n throw new BadRequestError(\"Invalid ID.\");\n }\n\n const cacheKey = makeCacheKey(namespace_collection, { _id: String(_id) });\n\n try {\n const cached = await getCache<TSchool>(cacheKey);\n if (cached) {\n logger.log({\n level: \"info\",\n message: `Cache hit for getById school: ${cacheKey}`,\n });\n return cached;\n }\n\n const result = await collection.findOne<TSchool>({\n _id,\n deletedAt: { $in: [\"\", null] },\n });\n if (!result) {\n throw new BadRequestError(\"School not found.\");\n }\n\n setCache(cacheKey, result, 300)\n .then(() => {\n logger.log({\n level: \"info\",\n message: `Cache set for school by id: ${cacheKey}`,\n });\n })\n .catch((err) => {\n logger.log({\n level: \"error\",\n message: `Failed to set cache for school by id: ${err.message}`,\n });\n });\n\n return result;\n } catch (error) {\n if (error instanceof AppError) {\n throw error;\n } else {\n throw new InternalServerError(\"Failed to get school.\");\n }\n }\n }\n\n async function getByName(name: string) {\n const cacheKey = makeCacheKey(namespace_collection, { name });\n\n try {\n const cached = await getCache<TSchool>(cacheKey);\n if (cached) {\n logger.log({\n level: \"info\",\n message: `Cache hit for getByName school: ${cacheKey}`,\n });\n return cached;\n }\n\n const result = await collection.findOne<TSchool>({\n name,\n deletedAt: { $in: [\"\", null] },\n });\n if (!result) {\n throw new BadRequestError(\"School not found.\");\n }\n\n setCache(cacheKey, result, 300)\n .then(() => {\n logger.log({\n level: \"info\",\n message: `Cache set for school by name: ${cacheKey}`,\n });\n })\n .catch((err) => {\n logger.log({\n level: \"error\",\n message: `Failed to set cache for school by name: ${err.message}`,\n });\n });\n\n return result;\n } catch (error) {\n if (error instanceof AppError) {\n throw error;\n } else {\n throw new InternalServerError(\"Failed to get school.\");\n }\n }\n }\n\n async function updateFieldById(\n { _id, field, value } = {} as {\n _id: string | ObjectId;\n field: string;\n value: string;\n },\n session?: ClientSession\n ) {\n // Allowed fields to prevent arbitrary updates\n const allowedFields = [\"name\"];\n\n if (!allowedFields.includes(field)) {\n throw new BadRequestError(\n `Field \"${field}\" is not allowed to be updated.`\n );\n }\n\n // Validate ID\n try {\n _id = new ObjectId(_id);\n } catch (error) {\n throw new BadRequestError(\"Invalid ID.\");\n }\n\n try {\n await collection.updateOne(\n { _id, deletedAt: { $in: [\"\", null] } },\n { $set: { [field]: value, updatedAt: new Date().toISOString() } },\n { session }\n );\n\n delCachedData();\n\n return `Successfully updated school ${field}.`;\n } catch (error) {\n throw new InternalServerError(`Failed to update school ${field}.`);\n }\n }\n\n async function deleteById(_id: string | ObjectId) {\n try {\n _id = new ObjectId(_id);\n } catch (error) {\n throw new BadRequestError(\"Invalid ID.\");\n }\n\n try {\n await collection.updateOne(\n { _id },\n { $set: { deletedAt: new Date().toISOString() } }\n );\n delCachedData();\n return \"Successfully deleted school.\";\n } catch (error) {\n throw new InternalServerError(\"Failed to delete school.\");\n }\n }\n\n return {\n createIndexes,\n add,\n getAll,\n getById,\n updateFieldById,\n deleteById,\n getByName,\n };\n}\n","import { Request, Response, NextFunction } from \"express\";\nimport { BadRequestError } from \"@eeplatform/nodejs-utils\";\nimport Joi from \"joi\";\nimport { useSchoolRepo } from \"../repositories/school.repository\";\nimport { schemaSchool } from \"../models/school.model\";\n\nexport function useSchoolController() {\n const {\n add: _add,\n getAll: _getAll,\n getById: _getById,\n getByName: _getByName,\n updateFieldById: _updateFieldById,\n deleteById: _deleteById,\n } = useSchoolRepo();\n\n async function add(req: Request, res: Response, next: NextFunction) {\n const value = req.body;\n\n const { error } = schemaSchool.validate(value);\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const data = await _add(value);\n res.json({\n message: \"Successfully created school.\",\n data,\n });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function getAll(req: Request, res: Response, next: NextFunction) {\n const query = req.query;\n\n const validation = Joi.object({\n page: Joi.number().min(1).optional().allow(\"\", null),\n limit: Joi.number().min(1).optional().allow(\"\", null),\n search: Joi.string().optional().allow(\"\", null),\n status: Joi.string().optional().allow(\"\", null),\n });\n\n const { error } = validation.validate(query);\n\n const page =\n typeof req.query.page === \"string\" ? Number(req.query.page) : 1;\n const limit =\n typeof req.query.limit === \"string\" ? Number(req.query.limit) : 10;\n const search = (req.query.search as string) ?? \"\";\n const status = (req.query.status as string) ?? \"active\";\n\n const isPageNumber = isFinite(page);\n if (!isPageNumber) {\n next(new BadRequestError(\"Invalid page number.\"));\n return;\n }\n\n const isLimitNumber = isFinite(limit);\n\n if (!isLimitNumber) {\n next(new BadRequestError(\"Invalid limit number.\"));\n return;\n }\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const data = await _getAll({ page, limit, search, status });\n res.json(data);\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function getById(req: Request, res: Response, next: NextFunction) {\n const id = req.params.id;\n\n const validation = Joi.object({\n id: Joi.string().hex().required(),\n });\n\n const { error } = validation.validate({ id });\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const data = await _getById(id);\n res.json({\n message: \"Successfully retrieved school.\",\n data,\n });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function getByName(req: Request, res: Response, next: NextFunction) {\n const name = req.params.name;\n\n const validation = Joi.object({\n name: Joi.string().required(),\n });\n\n const { error } = validation.validate({ name });\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const data = await _getByName(name);\n res.json({\n message: \"Successfully retrieved school.\",\n data,\n });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function updateField(req: Request, res: Response, next: NextFunction) {\n const _id = req.params.id;\n const { field, value } = req.body;\n\n const validation = Joi.object({\n _id: Joi.string().hex().required(),\n field: Joi.string().valid(\"name\", \"director\", \"directorName\").required(),\n value: Joi.string().required(),\n });\n\n const { error } = validation.validate({ _id, field, value });\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const message = await _updateFieldById({ _id, field, value });\n res.json({ message });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n async function deleteById(req: Request, res: Response, next: NextFunction) {\n const _id = req.params.id;\n\n const validation = Joi.object({\n _id: Joi.string().hex().required(),\n });\n\n const { error } = validation.validate({ _id });\n\n if (error) {\n next(new BadRequestError(error.message));\n return;\n }\n\n try {\n const message = await _deleteById(_id);\n res.json({ message });\n return;\n } catch (error) {\n next(error);\n }\n }\n\n return {\n add,\n getAll,\n getById,\n getByName,\n updateField,\n deleteById,\n };\n}\n"],"mappings":"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","names":["Joi","error","import_nodejs_utils","import_mongodb","import_nodejs_utils","import_joi","error","Joi","import_nodejs_utils","import_joi","import_mongodb","Joi","error","import_nodejs_utils","import_mongodb","import_nodejs_utils","import_joi","error","Joi","import_nodejs_utils","import_joi","import_mongodb","Joi","error","import_nodejs_utils","import_mongodb","import_nodejs_utils","import_joi","error","Joi"]}