54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import { FastifyRequest, FastifyReply } from 'fastify';
|
|
|
|
export const clockIn = async (request: FastifyRequest, reply: FastifyReply) => {
|
|
const user = request.user as any;
|
|
const { activityType } = request.body as any;
|
|
|
|
// Check if already clocked in
|
|
const active = await request.server.prisma.timeLog.findFirst({
|
|
where: { userId: user.id, endTime: null }
|
|
});
|
|
|
|
if (active) {
|
|
return reply.code(400).send({ message: 'Already clocked in' });
|
|
}
|
|
|
|
const log = await request.server.prisma.timeLog.create({
|
|
data: {
|
|
userId: user.id,
|
|
startTime: new Date(),
|
|
activityType: activityType || 'General'
|
|
}
|
|
});
|
|
|
|
return log;
|
|
};
|
|
|
|
export const clockOut = async (request: FastifyRequest, reply: FastifyReply) => {
|
|
const user = request.user as any;
|
|
|
|
const active = await request.server.prisma.timeLog.findFirst({
|
|
where: { userId: user.id, endTime: null }
|
|
});
|
|
|
|
if (!active) {
|
|
return reply.code(400).send({ message: 'Not clocked in' });
|
|
}
|
|
|
|
const log = await request.server.prisma.timeLog.update({
|
|
where: { id: active.id },
|
|
data: { endTime: new Date() }
|
|
});
|
|
|
|
return log;
|
|
};
|
|
|
|
export const getMyLogs = async (request: FastifyRequest, reply: FastifyReply) => {
|
|
const user = request.user as any;
|
|
const logs = await request.server.prisma.timeLog.findMany({
|
|
where: { userId: user.id },
|
|
orderBy: { startTime: 'desc' },
|
|
take: 50
|
|
});
|
|
return logs;
|
|
};
|