api: add timestamps to triggers and route their show/delete
Parents:
fd21c7f5 file(s) changed
- api/prisma/migrations/20260621170628_add_timestamps_to_triggers/migration.sql +16 -0
- api/prisma/schema.prisma +3 -0
- api/src/controllers/triggers.ts +12 -1
- api/src/routes/triggers.ts +1 -0
- api/src/services/trigger.service.ts +11 -1
api/prisma/migrations/20260621170628_add_timestamps_to_triggers/migration.sql
@@ -0,0 +1,16 @@
1 + /*
2 + Warnings:
3 +
4 + - Added the required column `updated_at` to the `triggers` table without a default value. This is not possible if the table is not empty.
5 +
6 + */
7 +
8 + -- AlterTable
9 + ALTER TABLE "triggers"
10 + ADD COLUMN "created_at" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP,
11 + ADD COLUMN "updated_at" TIMESTAMP(3);
12 +
13 + UPDATE "triggers" SET created_at = moment, updated_at = moment;
14 +
15 + ALTER TABLE "triggers" ALTER COLUMN created_at SET NOT NULL;
16 + ALTER TABLE "triggers" ALTER COLUMN updated_at SET NOT NULL;
api/prisma/schema.prisma
1 1
generator client {
2 2
provider = "prisma-client-js"
3 3
//output = "../src/generated/prisma"
4 4
}
5 5
▸ 78 unchanged lines
84 84
moment DateTime @default(now())
85 85
86 86
userId Int @map("user_id")
87 87
user User @relation(fields: [userId], references: [id])
88 88
89 +
createdAt DateTime @default(now()) @map("created_at")
90 +
updatedAt DateTime @updatedAt @map("updated_at")
91 +
89 92
@@map("triggers")
90 93
}
91 94
92 95
model Reminder {
93 96
id Int @id @default(autoincrement())
▸ 101 unchanged lines
195 198
FOCUS
196 199
RESTLESS
197 200
RELAXED
198 201
OVERWHELMED
199 202
}
api/src/controllers/triggers.ts
1 1
import { Request, Response, NextFunction } from 'express';
2 2
import { AuthenticatedRequest } from '@app/middleware/auth';
3 3
import {
4 4
createTrigger,
5 5
getTriggersByUserId,
6 -
destroyTriggerById
6 +
destroyTriggerById,
7 +
getTriggerById
7 8
} from '@app/services/trigger.service';
8 9
9 10
import {
10 11
CreateTriggerSchema
11 12
} from '@app/schemas'
▸ 37 unchanged lines
49 50
destroy: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
50 51
try {
51 52
const result = await destroyTriggerById(req.userId!, Number(req.params.id!));
52 53
53 54
return res.status(200).json({})
55 +
} catch (err) {
56 +
next(err);
57 +
}
58 +
},
59 +
60 +
show: async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
61 +
try {
62 +
const trigger = await getTriggerById(Number(req.userId!), Number(req.params.id!));
63 +
64 +
return res.status(200).json(trigger)
54 65
} catch (err) {
55 66
next(err);
56 67
}
57 68
}
58 69
};
api/src/routes/triggers.ts
1 1
import { Router } from "express";
2 2
import { TriggersController } from '@app/controllers/triggers'
3 3
import { requireAuth } from '@app/middleware/auth';
4 4
5 5
const router = Router();
6 6
7 7
router.get('/', requireAuth, TriggersController.index);
8 +
router.get('/:id', requireAuth, TriggersController.show);
8 9
router.post('/', requireAuth, TriggersController.create);
9 10
router.delete('/:id', requireAuth, TriggersController.destroy);
10 11
11 12
export default router;
api/src/services/trigger.service.ts
1 1
import { prisma } from '@app/lib/prisma';
2 2
import { Trigger } from '@prisma/client';
3 3
4 4
import { CreateTriggerInput } from '@app/schemas';
5 5
import { rollingPeriod } from "@app/lib/queue/processors/insights/utils";
▸ 59 unchanged lines
65 65
};
66 66
67 67
export const destroyTriggerById = async (
68 68
userId: number, id: number
69 69
): Promise<Trigger> => {
70 -
return await prisma.trigger.delete({
70 +
const trigger = await prisma.trigger.delete({
71 71
where: {
72 72
id,
73 73
userId
74 74
}
75 +
})
76 +
77 +
void enqueueTriggerPatternInsight(userId);
78 +
79 +
return trigger
80 +
}
81 +
82 +
export const getTriggerById = async (userId: number, id: number): Promise<Trigger | null> => {
83 +
return await prisma.trigger.findUnique({
84 +
where: { userId, id }
75 85
})
76 86
}
77 87
78 88
async function enqueueTriggerPatternInsight(userId: number): Promise<void> {
79 89
await getQueue('insights').add(
▸ 3 unchanged lines
83 93
jobId: `trigger-pattern-${userId}-${new Date().toDateString()}`,
84 94
removeOnComplete: true,
85 95
}
86 96
);
87 97
}