@7365admin1/core 2.56.0 → 2.58.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.
- package/CHANGELOG.md +12 -0
- package/dist/index.d.ts +32 -10
- package/dist/index.js +258 -36
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +258 -36
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -850,15 +850,15 @@ declare const TInvoice: z.ZodObject<{
|
|
|
850
850
|
total: z.ZodNumber;
|
|
851
851
|
}, "strip", z.ZodTypeAny, {
|
|
852
852
|
description: string;
|
|
853
|
+
total: number;
|
|
853
854
|
unitPrice: number;
|
|
854
855
|
quantity: number;
|
|
855
|
-
total: number;
|
|
856
856
|
seats?: number | undefined;
|
|
857
857
|
}, {
|
|
858
858
|
description: string;
|
|
859
|
+
total: number;
|
|
859
860
|
unitPrice: number;
|
|
860
861
|
quantity: number;
|
|
861
|
-
total: number;
|
|
862
862
|
seats?: number | undefined;
|
|
863
863
|
}>, "many">;
|
|
864
864
|
metadata: z.ZodEffects<z.ZodOptional<z.ZodDefault<z.ZodObject<{
|
|
@@ -908,9 +908,9 @@ declare const TInvoice: z.ZodObject<{
|
|
|
908
908
|
dueDate: Date;
|
|
909
909
|
items: {
|
|
910
910
|
description: string;
|
|
911
|
+
total: number;
|
|
911
912
|
unitPrice: number;
|
|
912
913
|
quantity: number;
|
|
913
|
-
total: number;
|
|
914
914
|
seats?: number | undefined;
|
|
915
915
|
}[];
|
|
916
916
|
createdAt?: Date | undefined;
|
|
@@ -931,9 +931,9 @@ declare const TInvoice: z.ZodObject<{
|
|
|
931
931
|
dueDate: Date;
|
|
932
932
|
items: {
|
|
933
933
|
description: string;
|
|
934
|
+
total: number;
|
|
934
935
|
unitPrice: number;
|
|
935
936
|
quantity: number;
|
|
936
|
-
total: number;
|
|
937
937
|
seats?: number | undefined;
|
|
938
938
|
}[];
|
|
939
939
|
createdAt?: Date | undefined;
|
|
@@ -962,9 +962,9 @@ declare function useInvoiceModel(db: Db): {
|
|
|
962
962
|
dueDate: Date;
|
|
963
963
|
items: {
|
|
964
964
|
description: string;
|
|
965
|
+
total: number;
|
|
965
966
|
unitPrice: number;
|
|
966
967
|
quantity: number;
|
|
967
|
-
total: number;
|
|
968
968
|
seats?: number | undefined;
|
|
969
969
|
}[];
|
|
970
970
|
createdAt?: Date | undefined;
|
|
@@ -994,9 +994,9 @@ declare function useInvoiceRepo(): {
|
|
|
994
994
|
dueDate: Date;
|
|
995
995
|
items: {
|
|
996
996
|
description: string;
|
|
997
|
+
total: number;
|
|
997
998
|
unitPrice: number;
|
|
998
999
|
quantity: number;
|
|
999
|
-
total: number;
|
|
1000
1000
|
seats?: number | undefined;
|
|
1001
1001
|
}[];
|
|
1002
1002
|
createdAt?: Date | undefined;
|
|
@@ -1030,9 +1030,9 @@ declare function useInvoiceRepo(): {
|
|
|
1030
1030
|
dueDate: Date;
|
|
1031
1031
|
items: {
|
|
1032
1032
|
description: string;
|
|
1033
|
+
total: number;
|
|
1033
1034
|
unitPrice: number;
|
|
1034
1035
|
quantity: number;
|
|
1035
|
-
total: number;
|
|
1036
1036
|
seats?: number | undefined;
|
|
1037
1037
|
}[];
|
|
1038
1038
|
createdAt?: Date | undefined;
|
|
@@ -1056,9 +1056,9 @@ declare function useInvoiceRepo(): {
|
|
|
1056
1056
|
dueDate: Date;
|
|
1057
1057
|
items: {
|
|
1058
1058
|
description: string;
|
|
1059
|
+
total: number;
|
|
1059
1060
|
unitPrice: number;
|
|
1060
1061
|
quantity: number;
|
|
1061
|
-
total: number;
|
|
1062
1062
|
seats?: number | undefined;
|
|
1063
1063
|
}[];
|
|
1064
1064
|
createdAt?: Date | undefined;
|
|
@@ -1756,7 +1756,7 @@ declare enum BuildingStatus {
|
|
|
1756
1756
|
}
|
|
1757
1757
|
type TBuilding = {
|
|
1758
1758
|
_id?: ObjectId;
|
|
1759
|
-
site: ObjectId;
|
|
1759
|
+
site: string | ObjectId;
|
|
1760
1760
|
name?: string;
|
|
1761
1761
|
block: number;
|
|
1762
1762
|
levels: string[];
|
|
@@ -1852,6 +1852,18 @@ declare function useBuildingRepo(): {
|
|
|
1852
1852
|
site?: string | undefined;
|
|
1853
1853
|
status?: BuildingStatus | undefined;
|
|
1854
1854
|
}) => Promise<Record<string, any>>;
|
|
1855
|
+
getAllBuildingForResident: ({ search, page, limit, sort, site, status, }?: {
|
|
1856
|
+
search?: string | undefined;
|
|
1857
|
+
page?: number | undefined;
|
|
1858
|
+
limit?: number | undefined;
|
|
1859
|
+
sort?: {} | undefined;
|
|
1860
|
+
site?: string | undefined;
|
|
1861
|
+
status?: BuildingStatus | undefined;
|
|
1862
|
+
}) => Promise<{
|
|
1863
|
+
items: any[];
|
|
1864
|
+
pages: number;
|
|
1865
|
+
pageRange: string;
|
|
1866
|
+
}>;
|
|
1855
1867
|
getById: (_id: string | ObjectId) => Promise<TBuilding | null>;
|
|
1856
1868
|
updateById: (_id: ObjectId | string, value: Pick<TBuilding, "name" | "block" | "levels" | "buildingFiles">, session?: ClientSession) => Promise<mongodb.UpdateResult<bson.Document>>;
|
|
1857
1869
|
deleteById: (_id: string | ObjectId, session?: ClientSession) => Promise<mongodb.UpdateResult<bson.Document>>;
|
|
@@ -1860,14 +1872,21 @@ declare function useBuildingRepo(): {
|
|
|
1860
1872
|
};
|
|
1861
1873
|
|
|
1862
1874
|
declare function useBuildingService(): {
|
|
1863
|
-
add: (value: TBuilding) => Promise<
|
|
1875
|
+
add: (value: TBuilding) => Promise<ObjectId>;
|
|
1864
1876
|
updateById: (id: string, data: Pick<TBuilding, "name" | "block" | "levels" | "buildingFiles">) => Promise<mongodb.UpdateResult<bson.Document>>;
|
|
1865
1877
|
deleteById: (id: string) => Promise<string>;
|
|
1878
|
+
uploadSpreadsheetBuilding: (data: any[], site: string) => Promise<{
|
|
1879
|
+
site: string;
|
|
1880
|
+
block: number;
|
|
1881
|
+
name: string;
|
|
1882
|
+
levels: string[];
|
|
1883
|
+
}[]>;
|
|
1866
1884
|
};
|
|
1867
1885
|
|
|
1868
1886
|
declare function useBuildingController(): {
|
|
1869
1887
|
createBuilding: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
1870
1888
|
getAll: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
1889
|
+
getAllBuildingForResident: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
1871
1890
|
getById: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
1872
1891
|
updateById: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
1873
1892
|
deleteById: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
@@ -3727,6 +3746,7 @@ declare enum BulletinRecipient {
|
|
|
3727
3746
|
}
|
|
3728
3747
|
declare enum BulletinStatus {
|
|
3729
3748
|
ACTIVE = "active",
|
|
3749
|
+
UPCOMING = "upcoming",
|
|
3730
3750
|
EXPIRED = "expired",
|
|
3731
3751
|
DELETED = "deleted"
|
|
3732
3752
|
}
|
|
@@ -3801,6 +3821,7 @@ declare function useBulletinBoardRepo(): {
|
|
|
3801
3821
|
getBulletinBoardById: (_id: string | ObjectId, session?: ClientSession) => Promise<mongodb.WithId<bson.Document> | TBulletinBoard>;
|
|
3802
3822
|
updateBulletinBoardById: (_id: ObjectId | string, value: Partial<TBulletinBoard>, session?: ClientSession) => Promise<mongodb.UpdateResult<bson.Document>>;
|
|
3803
3823
|
processExpiredBulletinBoards: (session?: ClientSession) => Promise<mongodb.UpdateResult<bson.Document>>;
|
|
3824
|
+
processUpcomingBulletinBoards: (session?: ClientSession) => Promise<mongodb.UpdateResult<bson.Document>>;
|
|
3804
3825
|
deleteBulletinBoardById: (_id: string | ObjectId, session?: ClientSession) => Promise<number>;
|
|
3805
3826
|
createIndexes: () => Promise<void>;
|
|
3806
3827
|
};
|
|
@@ -3809,6 +3830,7 @@ declare function useBulletinBoardService(): {
|
|
|
3809
3830
|
add: (value: TBulletinBoard) => Promise<string>;
|
|
3810
3831
|
updateBulletinBoardById: (id: string | ObjectId, value: Partial<TBulletinBoard>) => Promise<string>;
|
|
3811
3832
|
processExpiredBulletinBoards: () => Promise<void>;
|
|
3833
|
+
processUpcomingBulletinBoards: () => Promise<void>;
|
|
3812
3834
|
deleteBulletinBoardById: (id: string | ObjectId) => Promise<string>;
|
|
3813
3835
|
};
|
|
3814
3836
|
|
package/dist/index.js
CHANGED
|
@@ -5250,34 +5250,55 @@ function useSiteRepo() {
|
|
|
5250
5250
|
const query = {
|
|
5251
5251
|
status: { $ne: "deleted" }
|
|
5252
5252
|
};
|
|
5253
|
-
const cacheOptions = {
|
|
5254
|
-
status: { $ne: "deleted" },
|
|
5255
|
-
page,
|
|
5256
|
-
limit
|
|
5257
|
-
};
|
|
5258
5253
|
if (search) {
|
|
5259
5254
|
query.$or = [{ name: { $regex: search, $options: "i" } }];
|
|
5260
|
-
cacheOptions.search = search;
|
|
5261
|
-
}
|
|
5262
|
-
const cacheKey = (0, import_node_server_utils19.makeCacheKey)(namespace_collection, cacheOptions);
|
|
5263
|
-
const cachedData = await getCache(cacheKey);
|
|
5264
|
-
if (cachedData) {
|
|
5265
|
-
import_node_server_utils19.logger.info(`Cache hit for key: ${cacheKey}`);
|
|
5266
|
-
return cachedData;
|
|
5267
5255
|
}
|
|
5256
|
+
const basePipeline = [
|
|
5257
|
+
{ $match: query },
|
|
5258
|
+
{
|
|
5259
|
+
$lookup: {
|
|
5260
|
+
from: "buildings",
|
|
5261
|
+
let: { siteId: "$_id" },
|
|
5262
|
+
pipeline: [
|
|
5263
|
+
{
|
|
5264
|
+
$match: {
|
|
5265
|
+
$expr: { $eq: ["$site", "$$siteId"] },
|
|
5266
|
+
status: { $ne: "deleted" }
|
|
5267
|
+
}
|
|
5268
|
+
}
|
|
5269
|
+
],
|
|
5270
|
+
as: "buildings"
|
|
5271
|
+
}
|
|
5272
|
+
},
|
|
5273
|
+
{ $match: { "buildings.0": { $exists: true } } },
|
|
5274
|
+
{
|
|
5275
|
+
$lookup: {
|
|
5276
|
+
from: "building-units",
|
|
5277
|
+
let: { buildingIds: "$buildings._id" },
|
|
5278
|
+
pipeline: [
|
|
5279
|
+
{
|
|
5280
|
+
$match: {
|
|
5281
|
+
$expr: { $in: ["$building", "$$buildingIds"] },
|
|
5282
|
+
status: { $ne: "deleted" }
|
|
5283
|
+
}
|
|
5284
|
+
},
|
|
5285
|
+
{ $limit: 1 }
|
|
5286
|
+
],
|
|
5287
|
+
as: "units"
|
|
5288
|
+
}
|
|
5289
|
+
},
|
|
5290
|
+
{ $match: { "units.0": { $exists: true } } }
|
|
5291
|
+
];
|
|
5268
5292
|
try {
|
|
5269
5293
|
const items = await collection.aggregate([
|
|
5270
|
-
|
|
5294
|
+
...basePipeline,
|
|
5295
|
+
{ $project: { _id: 1, name: 1 } },
|
|
5271
5296
|
{ $skip: page * limit },
|
|
5272
5297
|
{ $limit: limit }
|
|
5273
5298
|
]).toArray();
|
|
5274
|
-
const
|
|
5299
|
+
const countResult = await collection.aggregate([...basePipeline, { $count: "total" }]).toArray();
|
|
5300
|
+
const length = countResult[0]?.total ?? 0;
|
|
5275
5301
|
const data = (0, import_node_server_utils19.paginate)(items, page, limit, length);
|
|
5276
|
-
setCache(cacheKey, data, 15 * 60).then(() => {
|
|
5277
|
-
import_node_server_utils19.logger.info(`Cache set for key: ${cacheKey}`);
|
|
5278
|
-
}).catch((err) => {
|
|
5279
|
-
import_node_server_utils19.logger.error(`Failed to set cache for key: ${cacheKey}`, err);
|
|
5280
|
-
});
|
|
5281
5302
|
return data;
|
|
5282
5303
|
} catch (error) {
|
|
5283
5304
|
throw error;
|
|
@@ -19527,6 +19548,66 @@ function useBuildingRepo() {
|
|
|
19527
19548
|
throw error;
|
|
19528
19549
|
}
|
|
19529
19550
|
}
|
|
19551
|
+
async function getAllBuildingForResident({
|
|
19552
|
+
search = "",
|
|
19553
|
+
page = 1,
|
|
19554
|
+
limit = 10,
|
|
19555
|
+
sort = {},
|
|
19556
|
+
site = "",
|
|
19557
|
+
status = "active" /* ACTIVE */
|
|
19558
|
+
} = {}) {
|
|
19559
|
+
page = page > 0 ? page - 1 : 0;
|
|
19560
|
+
let siteId;
|
|
19561
|
+
if (site) {
|
|
19562
|
+
try {
|
|
19563
|
+
siteId = new import_mongodb49.ObjectId(site);
|
|
19564
|
+
} catch (error) {
|
|
19565
|
+
throw new import_node_server_utils82.BadRequestError("Invalid site ID.");
|
|
19566
|
+
}
|
|
19567
|
+
}
|
|
19568
|
+
const query = {
|
|
19569
|
+
status,
|
|
19570
|
+
...search && { $text: { $search: search } },
|
|
19571
|
+
...siteId && { site: siteId }
|
|
19572
|
+
};
|
|
19573
|
+
sort = Object.keys(sort).length ? sort : { _id: -1 };
|
|
19574
|
+
const basePipeline = [
|
|
19575
|
+
{ $match: query },
|
|
19576
|
+
{ $match: { $expr: { $gt: [{ $size: "$levels" }, 0] } } },
|
|
19577
|
+
{
|
|
19578
|
+
$lookup: {
|
|
19579
|
+
from: "building-units",
|
|
19580
|
+
let: { buildingId: "$_id" },
|
|
19581
|
+
pipeline: [
|
|
19582
|
+
{
|
|
19583
|
+
$match: {
|
|
19584
|
+
$expr: { $eq: ["$building", "$$buildingId"] },
|
|
19585
|
+
status: { $ne: "deleted" }
|
|
19586
|
+
}
|
|
19587
|
+
},
|
|
19588
|
+
{ $limit: 1 }
|
|
19589
|
+
],
|
|
19590
|
+
as: "units"
|
|
19591
|
+
}
|
|
19592
|
+
},
|
|
19593
|
+
{ $match: { "units.0": { $exists: true } } }
|
|
19594
|
+
];
|
|
19595
|
+
try {
|
|
19596
|
+
const items = await collection.aggregate([
|
|
19597
|
+
...basePipeline,
|
|
19598
|
+
{ $project: { units: 0 } },
|
|
19599
|
+
{ $sort: sort },
|
|
19600
|
+
{ $skip: page * limit },
|
|
19601
|
+
{ $limit: limit }
|
|
19602
|
+
]).toArray();
|
|
19603
|
+
const countResult = await collection.aggregate([...basePipeline, { $count: "total" }]).toArray();
|
|
19604
|
+
const length = countResult[0]?.total ?? 0;
|
|
19605
|
+
return (0, import_node_server_utils82.paginate)(items, page, limit, length);
|
|
19606
|
+
} catch (error) {
|
|
19607
|
+
import_node_server_utils82.logger.log({ level: "error", message: `${error}` });
|
|
19608
|
+
throw error;
|
|
19609
|
+
}
|
|
19610
|
+
}
|
|
19530
19611
|
async function getById(_id) {
|
|
19531
19612
|
try {
|
|
19532
19613
|
_id = new import_mongodb49.ObjectId(_id);
|
|
@@ -19648,7 +19729,6 @@ function useBuildingRepo() {
|
|
|
19648
19729
|
const cacheOptions = { ...query };
|
|
19649
19730
|
const cacheKey = (0, import_node_server_utils82.makeCacheKey)(buildings_namespace_collection, cacheOptions);
|
|
19650
19731
|
try {
|
|
19651
|
-
console.log(query);
|
|
19652
19732
|
const result = await collection.aggregate([
|
|
19653
19733
|
{
|
|
19654
19734
|
$match: {
|
|
@@ -19698,16 +19778,16 @@ function useBuildingRepo() {
|
|
|
19698
19778
|
},
|
|
19699
19779
|
{
|
|
19700
19780
|
$project: {
|
|
19701
|
-
|
|
19702
|
-
|
|
19703
|
-
|
|
19704
|
-
|
|
19705
|
-
|
|
19706
|
-
|
|
19707
|
-
|
|
19708
|
-
|
|
19709
|
-
|
|
19710
|
-
|
|
19781
|
+
_id: 1,
|
|
19782
|
+
site: 1,
|
|
19783
|
+
name: 1,
|
|
19784
|
+
block: 1,
|
|
19785
|
+
status: 1,
|
|
19786
|
+
buildingFloorPlan: 1,
|
|
19787
|
+
createdAt: 1,
|
|
19788
|
+
updatedAt: 1,
|
|
19789
|
+
deletedAt: 1,
|
|
19790
|
+
levels: "$buildingLevels"
|
|
19711
19791
|
}
|
|
19712
19792
|
}
|
|
19713
19793
|
]).toArray();
|
|
@@ -19740,6 +19820,7 @@ function useBuildingRepo() {
|
|
|
19740
19820
|
createIndexes,
|
|
19741
19821
|
add,
|
|
19742
19822
|
getAll,
|
|
19823
|
+
getAllBuildingForResident,
|
|
19743
19824
|
getById,
|
|
19744
19825
|
updateById,
|
|
19745
19826
|
deleteById,
|
|
@@ -19881,10 +19962,56 @@ function useBuildingService() {
|
|
|
19881
19962
|
throw error;
|
|
19882
19963
|
}
|
|
19883
19964
|
}
|
|
19965
|
+
async function uploadSpreadsheetBuilding(data, site) {
|
|
19966
|
+
const session = import_node_server_utils83.useAtlas.getClient()?.startSession();
|
|
19967
|
+
if (!session) {
|
|
19968
|
+
throw new import_node_server_utils83.BadRequestError("Database session not available.");
|
|
19969
|
+
}
|
|
19970
|
+
try {
|
|
19971
|
+
session?.startTransaction();
|
|
19972
|
+
const blockMap = /* @__PURE__ */ new Map();
|
|
19973
|
+
for (const row of data) {
|
|
19974
|
+
const block = row.block;
|
|
19975
|
+
const name = row.name;
|
|
19976
|
+
const rawLevel = row.level?.toString().trim();
|
|
19977
|
+
const normalizedLevel = /^(na|n\/a)$/i.test(rawLevel) ? null : `Lvl${rawLevel}`;
|
|
19978
|
+
if (!blockMap.has(block)) {
|
|
19979
|
+
blockMap.set(block, { name, levels: [] });
|
|
19980
|
+
}
|
|
19981
|
+
const blockEntry = blockMap.get(block);
|
|
19982
|
+
if (blockEntry.name !== name) {
|
|
19983
|
+
blockEntry.name = `${blockEntry.name}, ${name}`;
|
|
19984
|
+
}
|
|
19985
|
+
if (normalizedLevel && !blockEntry.levels.includes(normalizedLevel)) {
|
|
19986
|
+
blockEntry.levels.push(normalizedLevel);
|
|
19987
|
+
}
|
|
19988
|
+
}
|
|
19989
|
+
const buildingPayloads = Array.from(blockMap.entries()).map(
|
|
19990
|
+
([block, { name, levels }]) => ({
|
|
19991
|
+
site,
|
|
19992
|
+
block,
|
|
19993
|
+
name,
|
|
19994
|
+
levels
|
|
19995
|
+
})
|
|
19996
|
+
);
|
|
19997
|
+
for (const buildingPayload of buildingPayloads) {
|
|
19998
|
+
const result = await _add(buildingPayload);
|
|
19999
|
+
console.log("Inserted:", result);
|
|
20000
|
+
}
|
|
20001
|
+
await session?.commitTransaction();
|
|
20002
|
+
return buildingPayloads;
|
|
20003
|
+
} catch (error) {
|
|
20004
|
+
await session?.abortTransaction();
|
|
20005
|
+
throw error;
|
|
20006
|
+
} finally {
|
|
20007
|
+
session?.endSession();
|
|
20008
|
+
}
|
|
20009
|
+
}
|
|
19884
20010
|
return {
|
|
19885
20011
|
add,
|
|
19886
20012
|
updateById,
|
|
19887
|
-
deleteById
|
|
20013
|
+
deleteById,
|
|
20014
|
+
uploadSpreadsheetBuilding
|
|
19888
20015
|
};
|
|
19889
20016
|
}
|
|
19890
20017
|
|
|
@@ -19897,6 +20024,7 @@ var import_fs2 = __toESM(require("fs"));
|
|
|
19897
20024
|
function useBuildingController() {
|
|
19898
20025
|
const {
|
|
19899
20026
|
getAll: _getAll,
|
|
20027
|
+
getAllBuildingForResident: _getAllBuildingForResident,
|
|
19900
20028
|
getById: _getById,
|
|
19901
20029
|
getBuildingLevel: _getBuildingLevel,
|
|
19902
20030
|
getBuildingLevelWithUnits: _getBuildingLevelWithUnits
|
|
@@ -19904,7 +20032,8 @@ function useBuildingController() {
|
|
|
19904
20032
|
const {
|
|
19905
20033
|
updateById: _updateById,
|
|
19906
20034
|
deleteById: _deleteById,
|
|
19907
|
-
add: _add
|
|
20035
|
+
add: _add,
|
|
20036
|
+
uploadSpreadsheetBuilding: _uploadSpreadsheetBuilding
|
|
19908
20037
|
} = useBuildingService();
|
|
19909
20038
|
async function createBuilding(req, res, next) {
|
|
19910
20039
|
const value = req.body;
|
|
@@ -19997,6 +20126,40 @@ function useBuildingController() {
|
|
|
19997
20126
|
next(error2);
|
|
19998
20127
|
}
|
|
19999
20128
|
}
|
|
20129
|
+
async function getAllBuildingForResident(req, res, next) {
|
|
20130
|
+
const query = req.query;
|
|
20131
|
+
const validation = import_joi44.default.object({
|
|
20132
|
+
page: import_joi44.default.number().min(1).optional().default(1),
|
|
20133
|
+
limit: import_joi44.default.number().min(1).optional().default(10),
|
|
20134
|
+
search: import_joi44.default.string().optional().allow("", null),
|
|
20135
|
+
site: import_joi44.default.string().hex().optional().allow("", null),
|
|
20136
|
+
status: import_joi44.default.string().valid(...Object.values(BuildingStatus)).default("active" /* ACTIVE */),
|
|
20137
|
+
sort: import_joi44.default.string().valid(...Object.values(SortFields)).default("_id" /* ID */),
|
|
20138
|
+
order: import_joi44.default.string().valid(...Object.values(SortOrder)).default("asc" /* ASC */)
|
|
20139
|
+
});
|
|
20140
|
+
const { error, value } = validation.validate(query);
|
|
20141
|
+
if (error) {
|
|
20142
|
+
next(new import_node_server_utils84.BadRequestError(error.message));
|
|
20143
|
+
return;
|
|
20144
|
+
}
|
|
20145
|
+
const sortObj = {
|
|
20146
|
+
[value.sort]: value.order === "asc" /* ASC */ ? 1 : -1
|
|
20147
|
+
};
|
|
20148
|
+
try {
|
|
20149
|
+
const buildings = await _getAllBuildingForResident({
|
|
20150
|
+
page: value.page,
|
|
20151
|
+
limit: value.limit,
|
|
20152
|
+
sort: sortObj,
|
|
20153
|
+
status: value.status,
|
|
20154
|
+
site: value.site ?? "",
|
|
20155
|
+
search: value.search ?? ""
|
|
20156
|
+
});
|
|
20157
|
+
res.json(buildings);
|
|
20158
|
+
return;
|
|
20159
|
+
} catch (error2) {
|
|
20160
|
+
next(error2);
|
|
20161
|
+
}
|
|
20162
|
+
}
|
|
20000
20163
|
async function getById(req, res, next) {
|
|
20001
20164
|
const id = req.params.id;
|
|
20002
20165
|
const validation = import_joi44.default.object({
|
|
@@ -20151,6 +20314,7 @@ function useBuildingController() {
|
|
|
20151
20314
|
validRows.push(value);
|
|
20152
20315
|
}
|
|
20153
20316
|
});
|
|
20317
|
+
await _uploadSpreadsheetBuilding(validRows, site);
|
|
20154
20318
|
res.status(200).json({
|
|
20155
20319
|
message: "Spreadsheet import completed (buildings).",
|
|
20156
20320
|
fileName: originalname,
|
|
@@ -20191,6 +20355,7 @@ function useBuildingController() {
|
|
|
20191
20355
|
return {
|
|
20192
20356
|
createBuilding,
|
|
20193
20357
|
getAll,
|
|
20358
|
+
getAllBuildingForResident,
|
|
20194
20359
|
getById,
|
|
20195
20360
|
updateById,
|
|
20196
20361
|
deleteById,
|
|
@@ -30484,6 +30649,7 @@ var BulletinRecipient = /* @__PURE__ */ ((BulletinRecipient2) => {
|
|
|
30484
30649
|
})(BulletinRecipient || {});
|
|
30485
30650
|
var BulletinStatus = /* @__PURE__ */ ((BulletinStatus2) => {
|
|
30486
30651
|
BulletinStatus2["ACTIVE"] = "active";
|
|
30652
|
+
BulletinStatus2["UPCOMING"] = "upcoming";
|
|
30487
30653
|
BulletinStatus2["EXPIRED"] = "expired";
|
|
30488
30654
|
BulletinStatus2["DELETED"] = "deleted";
|
|
30489
30655
|
return BulletinStatus2;
|
|
@@ -30828,12 +30994,48 @@ function useBulletinBoardRepo() {
|
|
|
30828
30994
|
throw error;
|
|
30829
30995
|
}
|
|
30830
30996
|
}
|
|
30997
|
+
async function processUpcomingBulletinBoards(session) {
|
|
30998
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
30999
|
+
const query = {
|
|
31000
|
+
status: "upcoming" /* UPCOMING */,
|
|
31001
|
+
startDate: { $lte: now }
|
|
31002
|
+
};
|
|
31003
|
+
try {
|
|
31004
|
+
const res = await collection.updateMany(
|
|
31005
|
+
query,
|
|
31006
|
+
{
|
|
31007
|
+
$set: {
|
|
31008
|
+
status: "active" /* ACTIVE */,
|
|
31009
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
31010
|
+
}
|
|
31011
|
+
},
|
|
31012
|
+
{ session }
|
|
31013
|
+
);
|
|
31014
|
+
if (res.matchedCount === 0) {
|
|
31015
|
+
throw new import_node_server_utils135.NotFoundError("No upcoming bulletin boards found to activate.");
|
|
31016
|
+
}
|
|
31017
|
+
delNamespace().then(() => {
|
|
31018
|
+
import_node_server_utils135.logger.info(
|
|
31019
|
+
`Cache cleared for namespace: ${bulletin_boards_namespace_collection}`
|
|
31020
|
+
);
|
|
31021
|
+
}).catch((err) => {
|
|
31022
|
+
import_node_server_utils135.logger.error(
|
|
31023
|
+
`Failed to clear cache for namespace: ${bulletin_boards_namespace_collection}`,
|
|
31024
|
+
err
|
|
31025
|
+
);
|
|
31026
|
+
});
|
|
31027
|
+
return res;
|
|
31028
|
+
} catch (error) {
|
|
31029
|
+
throw error;
|
|
31030
|
+
}
|
|
31031
|
+
}
|
|
30831
31032
|
return {
|
|
30832
31033
|
add,
|
|
30833
31034
|
getAll,
|
|
30834
31035
|
getBulletinBoardById,
|
|
30835
31036
|
updateBulletinBoardById,
|
|
30836
31037
|
processExpiredBulletinBoards,
|
|
31038
|
+
processUpcomingBulletinBoards,
|
|
30837
31039
|
deleteBulletinBoardById,
|
|
30838
31040
|
createIndexes
|
|
30839
31041
|
};
|
|
@@ -30846,6 +31048,7 @@ function useBulletinBoardService() {
|
|
|
30846
31048
|
add: _add,
|
|
30847
31049
|
updateBulletinBoardById: _updateBulletinBoardById,
|
|
30848
31050
|
processExpiredBulletinBoards: _processExpiredBulletinBoards,
|
|
31051
|
+
processUpcomingBulletinBoards: _processUpcomingBulletinBoards,
|
|
30849
31052
|
deleteBulletinBoardById: _deleteBulletinBoardById,
|
|
30850
31053
|
getBulletinBoardById: _getBulletinBoardById
|
|
30851
31054
|
} = useBulletinBoardRepo();
|
|
@@ -30853,6 +31056,9 @@ function useBulletinBoardService() {
|
|
|
30853
31056
|
async function add(value) {
|
|
30854
31057
|
const session = import_node_server_utils136.useAtlas.getClient()?.startSession();
|
|
30855
31058
|
session?.startTransaction();
|
|
31059
|
+
if (value.startDate && new Date(value.startDate) > /* @__PURE__ */ new Date()) {
|
|
31060
|
+
value.status = "upcoming" /* UPCOMING */;
|
|
31061
|
+
}
|
|
30856
31062
|
try {
|
|
30857
31063
|
await _add(value, session);
|
|
30858
31064
|
await session?.commitTransaction();
|
|
@@ -30878,6 +31084,20 @@ function useBulletinBoardService() {
|
|
|
30878
31084
|
session?.endSession();
|
|
30879
31085
|
}
|
|
30880
31086
|
}
|
|
31087
|
+
async function processUpcomingBulletinBoards() {
|
|
31088
|
+
const session = import_node_server_utils136.useAtlas.getClient()?.startSession();
|
|
31089
|
+
session?.startTransaction();
|
|
31090
|
+
try {
|
|
31091
|
+
await _processUpcomingBulletinBoards(session);
|
|
31092
|
+
await session?.commitTransaction();
|
|
31093
|
+
return;
|
|
31094
|
+
} catch (error) {
|
|
31095
|
+
await session?.abortTransaction();
|
|
31096
|
+
throw error;
|
|
31097
|
+
} finally {
|
|
31098
|
+
session?.endSession();
|
|
31099
|
+
}
|
|
31100
|
+
}
|
|
30881
31101
|
async function processExpiredBulletinBoards() {
|
|
30882
31102
|
const session = import_node_server_utils136.useAtlas.getClient()?.startSession();
|
|
30883
31103
|
session?.startTransaction();
|
|
@@ -30919,6 +31139,7 @@ function useBulletinBoardService() {
|
|
|
30919
31139
|
add,
|
|
30920
31140
|
updateBulletinBoardById,
|
|
30921
31141
|
processExpiredBulletinBoards,
|
|
31142
|
+
processUpcomingBulletinBoards,
|
|
30922
31143
|
deleteBulletinBoardById
|
|
30923
31144
|
};
|
|
30924
31145
|
}
|
|
@@ -32511,14 +32732,15 @@ function useEventManagementRepo() {
|
|
|
32511
32732
|
} catch (error) {
|
|
32512
32733
|
throw new import_node_server_utils146.BadRequestError("Invalid site ID format.");
|
|
32513
32734
|
}
|
|
32735
|
+
const datePart = date ? new Date(date).toISOString().split("T")[0] : "";
|
|
32514
32736
|
const baseQuery = {
|
|
32515
32737
|
site,
|
|
32516
32738
|
status: status ? status : { $ne: "deleted" },
|
|
32517
32739
|
...type && { type },
|
|
32518
|
-
...
|
|
32740
|
+
...datePart && {
|
|
32519
32741
|
dateTime: {
|
|
32520
|
-
$gte: `${
|
|
32521
|
-
$
|
|
32742
|
+
$gte: /* @__PURE__ */ new Date(`${datePart}T00:00:00.000Z`),
|
|
32743
|
+
$lte: /* @__PURE__ */ new Date(`${datePart}T23:59:59.999Z`)
|
|
32522
32744
|
}
|
|
32523
32745
|
}
|
|
32524
32746
|
};
|
|
@@ -32531,7 +32753,7 @@ function useEventManagementRepo() {
|
|
|
32531
32753
|
page,
|
|
32532
32754
|
limit,
|
|
32533
32755
|
...type && { type },
|
|
32534
|
-
...
|
|
32756
|
+
...datePart && { dateTime: datePart }
|
|
32535
32757
|
};
|
|
32536
32758
|
if (search) {
|
|
32537
32759
|
query.$or = [{ title: { $regex: search, $options: "i" } }];
|