@pick2me/shared 1.0.3

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.
Files changed (106) hide show
  1. package/dist/auth/auth.d.ts +9 -0
  2. package/dist/auth/auth.d.ts.map +1 -0
  3. package/dist/auth/auth.js +82 -0
  4. package/dist/auth/index.d.ts +4 -0
  5. package/dist/auth/index.d.ts.map +1 -0
  6. package/dist/auth/index.js +2 -0
  7. package/dist/auth/verifyGatewayJwt.d.ts +14 -0
  8. package/dist/auth/verifyGatewayJwt.d.ts.map +1 -0
  9. package/dist/auth/verifyGatewayJwt.js +47 -0
  10. package/dist/constants/index.d.ts +2 -0
  11. package/dist/constants/index.d.ts.map +1 -0
  12. package/dist/constants/index.js +1 -0
  13. package/dist/constants/redis-keys.d.ts +10 -0
  14. package/dist/constants/redis-keys.d.ts.map +1 -0
  15. package/dist/constants/redis-keys.js +14 -0
  16. package/dist/errors/HttpError.d.ts +17 -0
  17. package/dist/errors/HttpError.d.ts.map +1 -0
  18. package/dist/errors/HttpError.js +17 -0
  19. package/dist/errors/errorHandler.d.ts +3 -0
  20. package/dist/errors/errorHandler.d.ts.map +1 -0
  21. package/dist/errors/errorHandler.js +37 -0
  22. package/dist/errors/index.d.ts +10 -0
  23. package/dist/errors/index.d.ts.map +1 -0
  24. package/dist/errors/index.js +9 -0
  25. package/dist/interfaces/common-response.d.ts +14 -0
  26. package/dist/interfaces/common-response.d.ts.map +1 -0
  27. package/dist/interfaces/common-response.js +1 -0
  28. package/dist/interfaces/common-types.d.ts +39 -0
  29. package/dist/interfaces/common-types.d.ts.map +1 -0
  30. package/dist/interfaces/common-types.js +1 -0
  31. package/dist/interfaces/index.d.ts +5 -0
  32. package/dist/interfaces/index.d.ts.map +1 -0
  33. package/dist/interfaces/index.js +4 -0
  34. package/dist/interfaces/rabbit-event-types.d.ts +6 -0
  35. package/dist/interfaces/rabbit-event-types.d.ts.map +1 -0
  36. package/dist/interfaces/rabbit-event-types.js +1 -0
  37. package/dist/interfaces/status-code.d.ts +66 -0
  38. package/dist/interfaces/status-code.d.ts.map +1 -0
  39. package/dist/interfaces/status-code.js +66 -0
  40. package/dist/messaging/index.d.ts +4 -0
  41. package/dist/messaging/index.d.ts.map +1 -0
  42. package/dist/messaging/index.js +3 -0
  43. package/dist/messaging/rabbitmq.config.d.ts +35 -0
  44. package/dist/messaging/rabbitmq.config.d.ts.map +1 -0
  45. package/dist/messaging/rabbitmq.config.js +43 -0
  46. package/dist/messaging/rabbitmq.d.ts +20 -0
  47. package/dist/messaging/rabbitmq.d.ts.map +1 -0
  48. package/dist/messaging/rabbitmq.js +65 -0
  49. package/dist/messaging/rabbitmq.utils.d.ts +3 -0
  50. package/dist/messaging/rabbitmq.utils.d.ts.map +1 -0
  51. package/dist/messaging/rabbitmq.utils.js +30 -0
  52. package/dist/mongo/connection.d.ts +2 -0
  53. package/dist/mongo/connection.d.ts.map +1 -0
  54. package/dist/mongo/connection.js +13 -0
  55. package/dist/mongo/i-mongo-base-repository.d.ts +16 -0
  56. package/dist/mongo/i-mongo-base-repository.d.ts.map +1 -0
  57. package/dist/mongo/i-mongo-base-repository.js +1 -0
  58. package/dist/mongo/index.d.ts +4 -0
  59. package/dist/mongo/index.d.ts.map +1 -0
  60. package/dist/mongo/index.js +3 -0
  61. package/dist/mongo/mongo-base-repository.d.ts +19 -0
  62. package/dist/mongo/mongo-base-repository.d.ts.map +1 -0
  63. package/dist/mongo/mongo-base-repository.js +114 -0
  64. package/dist/protos/booking.proto +22 -0
  65. package/dist/protos/driver.proto +450 -0
  66. package/dist/protos/index.d.ts +12 -0
  67. package/dist/protos/index.d.ts.map +1 -0
  68. package/dist/protos/index.js +30 -0
  69. package/dist/protos/index.ts +36 -0
  70. package/dist/protos/payment.proto +37 -0
  71. package/dist/protos/realtime.proto +19 -0
  72. package/dist/protos/user.proto +18 -0
  73. package/dist/redis/RedisService.d.ts +37 -0
  74. package/dist/redis/RedisService.d.ts.map +1 -0
  75. package/dist/redis/RedisService.js +203 -0
  76. package/dist/redis/client.d.ts +4 -0
  77. package/dist/redis/client.d.ts.map +1 -0
  78. package/dist/redis/client.js +7 -0
  79. package/dist/redis/index.d.ts +3 -0
  80. package/dist/redis/index.d.ts.map +1 -0
  81. package/dist/redis/index.js +2 -0
  82. package/dist/sql/i-sql-base-repository.d.ts +10 -0
  83. package/dist/sql/i-sql-base-repository.d.ts.map +1 -0
  84. package/dist/sql/i-sql-base-repository.js +1 -0
  85. package/dist/sql/index.d.ts +3 -0
  86. package/dist/sql/index.d.ts.map +1 -0
  87. package/dist/sql/index.js +2 -0
  88. package/dist/sql/sql-base-repository.d.ts +15 -0
  89. package/dist/sql/sql-base-repository.d.ts.map +1 -0
  90. package/dist/sql/sql-base-repository.js +74 -0
  91. package/dist/utils/asyncHandler.d.ts +3 -0
  92. package/dist/utils/asyncHandler.d.ts.map +1 -0
  93. package/dist/utils/asyncHandler.js +5 -0
  94. package/dist/utils/bcrypt.d.ts +5 -0
  95. package/dist/utils/bcrypt.d.ts.map +1 -0
  96. package/dist/utils/bcrypt.js +9 -0
  97. package/dist/utils/catchAsync.d.ts +3 -0
  98. package/dist/utils/catchAsync.d.ts.map +1 -0
  99. package/dist/utils/catchAsync.js +3 -0
  100. package/dist/utils/envChecker.d.ts +10 -0
  101. package/dist/utils/envChecker.d.ts.map +1 -0
  102. package/dist/utils/envChecker.js +26 -0
  103. package/dist/utils/index.d.ts +4 -0
  104. package/dist/utils/index.d.ts.map +1 -0
  105. package/dist/utils/index.js +3 -0
  106. package/package.json +119 -0
@@ -0,0 +1,43 @@
1
+ export const EXCHANGES = {
2
+ BOOKING: 'booking.exchange',
3
+ PAYMENT: 'payment.exchange',
4
+ DRIVER: 'driver.exchange',
5
+ USER: 'user.exchange',
6
+ NOTIFICATION: 'notification.exchange',
7
+ };
8
+ export const ROUTING_KEYS = {
9
+ // BOOKING_CREATED: 'booking.created',
10
+ // BOOKING_CANCELLED: 'booking.cancelled',
11
+ // PAYMENT_SUCCESS: 'payment.success',
12
+ // PAYMENT_FAILED: 'payment.failed',
13
+ // RESPONSE_RIDE_REQUEST: 'realtime-booking.ride.request.response',
14
+ RIDE_ACCEPTED: 'realtime-booking.ride.accepted',
15
+ RIDE_COMPLETED: 'booking-realtime.ride.completed',
16
+ CANCEL_RIDE: 'realtime-booking.ride.status.cancel',
17
+ UPDATE_DRIVER_RIDE_COUNT: "realtime-driver.ride.status.update",
18
+ NOTIFY_BOOK_RIDE_DRIVER: 'booking-realtime.booked.ride',
19
+ NOTIFY_RIDE_COMPLETED: 'booking-realtime.ride.completed',
20
+ NOTIFY_RIDE_START: 'booking-realtime.ride.start',
21
+ MARK_PAYMENT_COMPLETED: 'payment-booking.payment.completed',
22
+ UPDATE_DRIVER_EARNINGS: 'payment-driver.payment.completed',
23
+ NOTIFY_DOCUMENT_EXPIRE: 'driver-realtime.document.expire',
24
+ USER_WALLET_CREATE: 'user-payment.wallet.create',
25
+ USER_ADDED_REWARD_AMOUNT: 'user-payment.added.reward.amount',
26
+ };
27
+ export const QUEUES = {
28
+ BOOKING_QUEUE: 'booking.queue',
29
+ PAYMENT_QUEUE: 'payment.queue',
30
+ DRIVER_QUEUE: 'driver.queue',
31
+ REALTIME_QUEUE: 'realtime.queue',
32
+ };
33
+ // DLQ and retry conventions
34
+ export const DLQ_SUFFIX = '.dlq';
35
+ export const RETRY_SUFFIX = '.retry';
36
+ // Helper to auto-generate DLQ/retry queue names
37
+ export function buildQueueNames(base) {
38
+ return {
39
+ main: base,
40
+ retry: `${base}${RETRY_SUFFIX}`,
41
+ dlq: `${base}${DLQ_SUFFIX}`,
42
+ };
43
+ }
@@ -0,0 +1,20 @@
1
+ import { Channel, ConsumeMessage } from 'amqplib';
2
+ interface RabbitConfig {
3
+ url: string;
4
+ serviceName: string;
5
+ }
6
+ export declare class RabbitMQ {
7
+ private static connection;
8
+ private static channel;
9
+ static connect(config: RabbitConfig): Promise<void>;
10
+ static getChannel(): Channel;
11
+ static bindQueueToExchanges(queueName: string, bindings: {
12
+ exchange: string;
13
+ routingKeys: string[];
14
+ }[]): Promise<void>;
15
+ static setupExchange(exchange: string, type?: 'topic' | 'direct' | 'fanout'): Promise<void>;
16
+ static publish(exchange: string, routingKey: string, data: any): Promise<void>;
17
+ static consume(queue: string, handler: (data: any, msg: ConsumeMessage) => Promise<void> | void): Promise<void>;
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=rabbitmq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rabbitmq.d.ts","sourceRoot":"","sources":["../../src/messaging/rabbitmq.ts"],"names":[],"mappings":"AAAA,OAAa,EAAc,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGpE,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAyD;IAClF,OAAO,CAAC,MAAM,CAAC,OAAO,CAAwB;WAE1B,OAAO,CAAC,MAAM,EAAE,YAAY;WAehC,UAAU,IAAI,OAAO;WAKlB,oBAAoB,CACvC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE;WAenC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,GAAG,QAAQ,GAAG,QAAkB;WAU7E,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;WAKvD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAc7G"}
@@ -0,0 +1,65 @@
1
+ import amqp from 'amqplib';
2
+ import { setupQueueWithDLQ } from './rabbitmq.utils';
3
+ export class RabbitMQ {
4
+ static connection = null;
5
+ static channel = null;
6
+ static async connect(config) {
7
+ if (this.connection)
8
+ return;
9
+ this.connection = await amqp.connect(config.url);
10
+ this.channel = await this.connection.createChannel();
11
+ console.log(`[RabbitMQ] ✅ Connected for ${config.serviceName}`);
12
+ this.connection.on('close', () => {
13
+ console.warn(`[RabbitMQ] ⚠️ Connection closed (${config.serviceName})`);
14
+ this.connection = null;
15
+ this.channel = null;
16
+ });
17
+ }
18
+ static getChannel() {
19
+ if (!this.channel)
20
+ throw new Error('RabbitMQ channel not initialized — call connect() first');
21
+ return this.channel;
22
+ }
23
+ static async bindQueueToExchanges(queueName, bindings) {
24
+ // Setup DLQ once
25
+ const channel = this.getChannel();
26
+ await setupQueueWithDLQ(channel, `${queueName}.retry.exchange`, queueName);
27
+ for (const { exchange, routingKeys } of bindings) {
28
+ for (const key of routingKeys) {
29
+ await channel.bindQueue(queueName, exchange, key);
30
+ console.log(`[RabbitMQ] 🔗 Bound ${queueName} → ${exchange} (${key})`);
31
+ }
32
+ }
33
+ }
34
+ static async setupExchange(exchange, type = 'topic') {
35
+ if (!this.channel)
36
+ throw new Error('RabbitMQ not connected');
37
+ await this.channel.assertExchange(exchange, type, { durable: true });
38
+ }
39
+ // public static async setupQueueWithRetry(exchange: string, queueName: string, routingKey: string) {
40
+ // if (!this.channel) throw new Error('RabbitMQ not connected');
41
+ // await setupQueueWithDLQ(this.channel, exchange, queueName, routingKey);
42
+ // }
43
+ static async publish(exchange, routingKey, data) {
44
+ if (!this.channel)
45
+ throw new Error('RabbitMQ not connected');
46
+ this.channel.publish(exchange, routingKey, Buffer.from(JSON.stringify(data)), { persistent: true });
47
+ }
48
+ static async consume(queue, handler) {
49
+ if (!this.channel)
50
+ throw new Error('RabbitMQ not connected');
51
+ await this.channel.consume(queue, async (msg) => {
52
+ if (!msg)
53
+ return;
54
+ try {
55
+ const data = JSON.parse(msg.content.toString());
56
+ await handler(data, msg);
57
+ this.channel.ack(msg);
58
+ }
59
+ catch (err) {
60
+ console.error(`[RabbitMQ] ❌ Handler error for ${queue}:`, err);
61
+ this.channel.nack(msg, false, false);
62
+ }
63
+ });
64
+ }
65
+ }
@@ -0,0 +1,3 @@
1
+ import { Channel } from 'amqplib';
2
+ export declare function setupQueueWithDLQ(channel: Channel, exchange: string, queueBaseName: string): Promise<void>;
3
+ //# sourceMappingURL=rabbitmq.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rabbitmq.utils.d.ts","sourceRoot":"","sources":["../../src/messaging/rabbitmq.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,iBAmCtB"}
@@ -0,0 +1,30 @@
1
+ import { buildQueueNames } from './rabbitmq.config';
2
+ export async function setupQueueWithDLQ(channel, exchange, queueBaseName) {
3
+ const { main, retry, dlq } = buildQueueNames(queueBaseName);
4
+ //Make sure the DLQ/retry exchange exists
5
+ await channel.assertExchange(exchange, 'topic', { durable: true });
6
+ // DLQ
7
+ await channel.assertQueue(dlq, { durable: true });
8
+ // Retry queue (messages move here temporarily)
9
+ await channel.assertQueue(retry, {
10
+ durable: true,
11
+ arguments: {
12
+ 'x-dead-letter-exchange': exchange,
13
+ 'x-dead-letter-routing-key': `${queueBaseName}.retry`,
14
+ 'x-message-ttl': 10000, // 10s delay before retry
15
+ },
16
+ });
17
+ // Main queue (failed messages go to retry)
18
+ await channel.assertQueue(main, {
19
+ durable: true,
20
+ arguments: {
21
+ 'x-dead-letter-exchange': exchange,
22
+ 'x-dead-letter-routing-key': `${queueBaseName}.retry`,
23
+ },
24
+ });
25
+ // Bind queues
26
+ await channel.bindQueue(main, exchange, queueBaseName);
27
+ await channel.bindQueue(retry, exchange, `${queueBaseName}.retry`);
28
+ await channel.bindQueue(dlq, exchange, `${queueBaseName}.dlq`);
29
+ console.log(`[RabbitMQ] 🧩 DLQ/Retry setup done for ${main}`);
30
+ }
@@ -0,0 +1,2 @@
1
+ export declare const connectDB: (MONGO_URL: string) => Promise<void>;
2
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/mongo/connection.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,GAAO,WAAU,MAAM,KAAE,OAAO,CAAC,IAAI,CAY1D,CAAA"}
@@ -0,0 +1,13 @@
1
+ import mongoose from 'mongoose';
2
+ export const connectDB = async (MONGO_URL) => {
3
+ try {
4
+ if (!MONGO_URL) {
5
+ throw new Error("MONGO_URL is not defined in environment variables.");
6
+ }
7
+ await mongoose.connect(MONGO_URL);
8
+ console.log("database Connected");
9
+ }
10
+ catch (error) {
11
+ console.error('Error connecting to MongoDB:', error);
12
+ }
13
+ };
@@ -0,0 +1,16 @@
1
+ import { FilterQuery, UpdateQuery, Document } from 'mongoose';
2
+ export interface IMongoBaseRepository<T extends Document> {
3
+ findById(id: string, projection?: string): Promise<T | null>;
4
+ findOne(filter: FilterQuery<T>, options?: {
5
+ sort?: Record<string, 1 | -1>;
6
+ }): Promise<T | null>;
7
+ find(filter: FilterQuery<T>): Promise<T[] | null>;
8
+ findMany(filter?: FilterQuery<T>, projection?: string): Promise<T[] | null>;
9
+ create(item: Partial<T>): Promise<T | null>;
10
+ update(id: string, update: UpdateQuery<T>, options?: any): Promise<T | null>;
11
+ updateOne(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: any): Promise<T | null>;
12
+ findOneAndUpdateUpsert(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: any): Promise<T | null>;
13
+ delete(id: string): Promise<boolean>;
14
+ deleteOne(filter: FilterQuery<T>): Promise<boolean>;
15
+ }
16
+ //# sourceMappingURL=i-mongo-base-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i-mongo-base-repository.d.ts","sourceRoot":"","sources":["../../src/mongo/i-mongo-base-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,QAAQ;IACtD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAE7D,OAAO,CACL,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC/B,GACA,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAErB,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAElD,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAE5E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAE5C,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,OAAO,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAErB,SAAS,CACP,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,OAAO,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAErB,sBAAsB,CACpB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,OAAO,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAErB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrD"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ export * from "./i-mongo-base-repository";
2
+ export * from "./mongo-base-repository";
3
+ export * from "./connection";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mongo/index.ts"],"names":[],"mappings":"AACA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./i-mongo-base-repository";
2
+ export * from "./mongo-base-repository";
3
+ export * from "./connection";
@@ -0,0 +1,19 @@
1
+ import { Document, Model, FilterQuery, UpdateQuery } from 'mongoose';
2
+ import { IMongoBaseRepository } from '../mongo/i-mongo-base-repository';
3
+ export declare class MongoBaseRepository<T extends Document> implements IMongoBaseRepository<T> {
4
+ private _model;
5
+ constructor(model: Model<T>);
6
+ findById(id: string, projection?: string): Promise<T | null>;
7
+ findOne(filter: FilterQuery<T>, options?: {
8
+ sort?: Record<string, 1 | -1>;
9
+ }): Promise<T | null>;
10
+ find(filter: FilterQuery<T>): Promise<T[] | null>;
11
+ create(item: Partial<T>): Promise<T | null>;
12
+ delete(id: string): Promise<boolean>;
13
+ findMany(filter?: FilterQuery<T>, projection?: string): Promise<T[] | null>;
14
+ update(id: string, update: UpdateQuery<T>, options?: any): Promise<T | null>;
15
+ updateOne(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: any): Promise<T | null>;
16
+ findOneAndUpdateUpsert(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: any): Promise<T | null>;
17
+ deleteOne(filter: FilterQuery<T>): Promise<boolean>;
18
+ }
19
+ //# sourceMappingURL=mongo-base-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo-base-repository.d.ts","sourceRoot":"","sources":["../../src/mongo/mongo-base-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAGxE,qBACa,mBAAmB,CAAC,CAAC,SAAS,QAAQ,CAAE,YAAW,oBAAoB,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,MAAM,CAAW;gBAEb,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAIrB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,GAAE,MAAW,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAShE,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;QAC9C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC/B,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAQf,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;IASjD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAW3C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUpC,QAAQ,CAAC,MAAM,GAAE,WAAW,CAAC,CAAC,CAAM,EAAE,UAAU,SAAK,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;IAU7E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAShF,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAS/F,sBAAsB,CAC1B,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,OAAO,GAAE,GAAiC,GACzC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAUZ,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAS1D"}
@@ -0,0 +1,114 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Model } from 'mongoose';
11
+ import { injectable } from 'inversify';
12
+ let MongoBaseRepository = class MongoBaseRepository {
13
+ _model;
14
+ constructor(model) {
15
+ this._model = model;
16
+ }
17
+ async findById(id, projection = '') {
18
+ try {
19
+ return await this._model.findById(id).select(projection).exec();
20
+ }
21
+ catch (error) {
22
+ console.error('Error in findById:', error);
23
+ throw error;
24
+ }
25
+ }
26
+ async findOne(filter, options) {
27
+ try {
28
+ return this._model.findOne(filter, null, options).exec();
29
+ }
30
+ catch (error) {
31
+ throw error;
32
+ }
33
+ }
34
+ async find(filter) {
35
+ try {
36
+ return await this._model.find(filter).exec();
37
+ }
38
+ catch (error) {
39
+ console.error('Error in find:', error);
40
+ throw error;
41
+ }
42
+ }
43
+ async create(item) {
44
+ try {
45
+ const created = new this._model(item);
46
+ return await created.save();
47
+ }
48
+ catch (error) {
49
+ console.error('Error in create:', error);
50
+ throw error;
51
+ }
52
+ }
53
+ async delete(id) {
54
+ try {
55
+ const result = await this._model.findByIdAndDelete(id).exec();
56
+ return !!result;
57
+ }
58
+ catch (error) {
59
+ console.error('Error in delete:', error);
60
+ throw error;
61
+ }
62
+ }
63
+ async findMany(filter = {}, projection = '') {
64
+ try {
65
+ return await this._model.find(filter, projection).lean().exec();
66
+ }
67
+ catch (error) {
68
+ console.error('Error in findMany:', error);
69
+ throw error;
70
+ }
71
+ }
72
+ async update(id, update, options = {}) {
73
+ try {
74
+ return await this._model.findByIdAndUpdate(id, update, { new: true, ...options }).lean().exec();
75
+ }
76
+ catch (error) {
77
+ console.error('Error in update:', error);
78
+ throw error;
79
+ }
80
+ }
81
+ async updateOne(filter, update, options = {}) {
82
+ try {
83
+ return await this._model.findOneAndUpdate(filter, update, { new: true, ...options }).lean().exec();
84
+ }
85
+ catch (error) {
86
+ console.error('Error in updateOne:', error);
87
+ throw error;
88
+ }
89
+ }
90
+ async findOneAndUpdateUpsert(filter, update, options = { new: true, upsert: true }) {
91
+ try {
92
+ return await this._model.findOneAndUpdate(filter, update, { new: true, upsert: true, ...options }).lean().exec();
93
+ }
94
+ catch (error) {
95
+ console.error('Error in findOneAndUpdateUpsert:', error);
96
+ throw error;
97
+ }
98
+ }
99
+ async deleteOne(filter) {
100
+ try {
101
+ const result = await this._model.deleteOne(filter);
102
+ return result.deletedCount === 1;
103
+ }
104
+ catch (error) {
105
+ console.error('Error in deleteOne:', error);
106
+ throw error;
107
+ }
108
+ }
109
+ };
110
+ MongoBaseRepository = __decorate([
111
+ injectable(),
112
+ __metadata("design:paramtypes", [Model])
113
+ ], MongoBaseRepository);
114
+ export { MongoBaseRepository };
@@ -0,0 +1,22 @@
1
+ syntax = "proto3";
2
+ package booking_package;
3
+
4
+ service BookingService {
5
+
6
+ rpc MarkAsPaid (MarkAsPaidRequest) returns (MarkAsPaidRes);
7
+ rpc RollbackPayment (RollbackPaymentRequest) returns (MarkAsPaidRes);
8
+ }
9
+
10
+ message MarkAsPaidRequest {
11
+ string bookingId = 1;
12
+ string paymentId = 2;
13
+ }
14
+
15
+ message RollbackPaymentRequest {
16
+ string bookingId = 1;
17
+ }
18
+
19
+ message MarkAsPaidRes {
20
+ string status = 1;
21
+ string message = 2;
22
+ }