Skip to content

Commit 53901cc

Browse files
committed
improvement : location constraint in notification
1 parent dace50a commit 53901cc

File tree

13 files changed

+51
-23
lines changed

13 files changed

+51
-23
lines changed

dist/controllers/subscription.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ exports.CreateListingSubscription = exports.CreateSubscription = void 0;
1313
const subscription_1 = require("../services/subscription");
1414
const CreateSubscription = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
1515
const userId = req.userId;
16-
const subscription = yield (0, subscription_1.CreateSubscriptions)(userId);
16+
const location = req.body.location;
17+
const subscription = yield (0, subscription_1.CreateSubscriptions)({ userId, location });
1718
if (subscription.status == 402) {
1819
return res.status(subscription.status).json({
1920
message: subscription.message
+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });

dist/repositories/subscription.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,23 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1111
Object.defineProperty(exports, "__esModule", { value: true });
1212
exports.CreateListingSubsripton = exports.FindListingSuscribers = exports.FindMany = exports.Create = exports.findUnique = void 0;
1313
const db_1 = require("../db");
14-
const findUnique = (userId) => __awaiter(void 0, void 0, void 0, function* () {
14+
const findUnique = ({ userId, location }) => __awaiter(void 0, void 0, void 0, function* () {
1515
const notification = yield db_1.prisma.subscription.findFirst({
1616
where: {
1717
userId,
18+
location: {
19+
hasEvery: location
20+
}
1821
}
1922
});
2023
return notification;
2124
});
2225
exports.findUnique = findUnique;
23-
const Create = (userId) => __awaiter(void 0, void 0, void 0, function* () {
26+
const Create = ({ userId, location }) => __awaiter(void 0, void 0, void 0, function* () {
2427
const subscription = yield db_1.prisma.subscription.create({
2528
data: {
2629
userId,
30+
location
2731
}
2832
});
2933
return subscription;

dist/services/subscription.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1111
Object.defineProperty(exports, "__esModule", { value: true });
1212
exports.CreateSubscriptionLisiting = exports.CreateSubscriptions = void 0;
1313
const subscription_1 = require("../repositories/subscription");
14-
const CreateSubscriptions = (userId) => __awaiter(void 0, void 0, void 0, function* () {
15-
const suscribed = yield (0, subscription_1.findUnique)(userId);
14+
const CreateSubscriptions = ({ userId, location }) => __awaiter(void 0, void 0, void 0, function* () {
15+
const suscribed = yield (0, subscription_1.findUnique)({ userId, location });
1616
if (suscribed) {
1717
return {
1818
message: "You have already subscribed to this listing",
19-
status: 402,
19+
status: 409,
2020
};
2121
}
22-
const subscription = yield (0, subscription_1.Create)(userId);
22+
const subscription = yield (0, subscription_1.Create)({ userId, location });
2323
return {
2424
message: "Subscribed successfully",
2525
status: 200,

dist/tests/listing.test.js

+3
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ vitest_1.vi.mock("../db", () => ({
4141
},
4242
subscription: {
4343
findMany: vitest_1.vi.fn(() => Promise.resolve([]))
44+
},
45+
listingNotifySubscription: {
46+
findMany: vitest_1.vi.fn(() => Promise.resolve([]))
4447
}
4548
},
4649
}));

dist/utils/notificationListner.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ exports.notificationGenerator = notification_1.notificationEmitter.on("ListingCr
2020
console.log(subscribers);
2121
for (const subscriber of subscribers) {
2222
console.log(subscriber);
23-
yield db_1.prisma.notification.create({
24-
data: {
25-
userId: subscriber.userId,
26-
message: `New listing created: ${listing.title}`,
27-
},
28-
});
23+
if (subscriber.location.find((location) => location === listing.location_city)) {
24+
yield db_1.prisma.notification.create({
25+
data: {
26+
userId: subscriber.userId,
27+
message: `New listing created: ${listing.title}`,
28+
},
29+
});
30+
}
2931
}
3032
}));
3133
exports.specificlistingNotification = notification_1.notificationEmitter.on("ListingUpdated", (listing) => __awaiter(void 0, void 0, void 0, function* () {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- AlterTable
2+
ALTER TABLE "Subscription" ADD COLUMN "location" TEXT[];

prisma/schema.prisma

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ model Ping{
5858
model Subscription {
5959
id String @id @default(uuid())
6060
userId String
61+
location String[]
6162
user User @relation(fields: [userId], references: [id])
6263
}
6364

src/controllers/subscription.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { CreateSubscriptionLisiting, CreateSubscriptions } from "../services/sub
33

44
export const CreateSubscription = async(req: Request , res : Response) : Promise<any> => {
55
const userId = req.userId
6-
const subscription = await CreateSubscriptions(userId);
6+
const location = req.body.location
7+
const subscription = await CreateSubscriptions({userId , location});
78
if(subscription.status == 402){
89
return res.status(subscription.status).json({
910
message : subscription.message
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface CreateSubscriptionInterface {
2+
userId : string,
3+
location : string[],
4+
}

src/repositories/subscription.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
import { prisma } from "../db";
22
import { DeleteListingInterface } from "../interface/authInterface";
3+
import { CreateSubscriptionInterface } from "../interface/subscriptionInterface";
34

4-
export const findUnique = async(userId : string) => {
5+
6+
export const findUnique = async({userId , location} : CreateSubscriptionInterface) => {
57
const notification = await prisma.subscription.findFirst({
68
where : {
79
userId,
8-
10+
location: {
11+
hasEvery: location
12+
}
913
}
1014
})
1115
return notification
1216
}
1317

14-
export const Create = async (userId : string) => {
18+
export const Create = async ({userId , location} : CreateSubscriptionInterface) => {
1519
const subscription = await prisma.subscription.create({
1620
data : {
1721
userId,
22+
location
1823
}
1924
})
2025
return subscription

src/services/subscription.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1+
import { CreateSubscriptionInterface } from "../interface/subscriptionInterface"
12
import { Create, CreateListingSubsripton, findUnique } from "../repositories/subscription"
23

3-
export const CreateSubscriptions = async (userId : string) => {
4-
const suscribed = await findUnique(userId )
4+
export const CreateSubscriptions = async ({userId , location} : CreateSubscriptionInterface) => {
5+
const suscribed = await findUnique({userId , location} )
56
if(suscribed){
67
return {
78
message : "You have already subscribed to this listing",
8-
status : 402,
9+
status : 409,
910
}
1011
}
11-
const subscription = await Create(userId )
12+
const subscription = await Create({userId , location})
1213
return {
1314
message : "Subscribed successfully",
1415
status : 200,

src/utils/notificationListner.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ export const notificationGenerator = notificationEmitter.on(
1111
console.log(subscribers);
1212
for (const subscriber of subscribers) {
1313
console.log(subscriber);
14-
15-
await prisma.notification.create({
14+
if(subscriber.location.find((location : string) => location === listing.location_city)){
15+
await prisma.notification.create({
1616
data: {
1717
userId: subscriber.userId,
1818
message: `New listing created: ${listing.title}`,
1919
},
2020
});
21+
}
22+
2123
}
2224
}
2325
);

0 commit comments

Comments
 (0)