refactor(assignments): move workflows into use cases

This commit is contained in:
2026-06-04 22:09:54 +02:00
parent 5034ec0646
commit e88fb2e6d4
14 changed files with 630 additions and 376 deletions
+33 -13
View File
@@ -1,10 +1,8 @@
import type { Prisma } from "@/generated/prisma/client"
import { paginate } from "@/lib/paginate"
import prisma from "@/lib/prisma"
import type { CreateAssignmentData } from "@/lib/schemas/assignment.schemas"
import type { Assignment, AssignmentWithRecipientItemAsset } from "@/lib/types"
import { getAuthenticatedUserId } from "./auth.service"
import type { CreateAssignmentData } from "@/schemas/assignment.schema"
import type { Assignment, AssignmentWithRecipientItemAsset } from "@/types"
export const AssignmentService = {
findAllWithRecipient: async (): Promise<
@@ -72,8 +70,9 @@ export const AssignmentService = {
},
findById: async (
id: string,
db: Prisma.TransactionClient | typeof prisma = prisma,
): Promise<AssignmentWithRecipientItemAsset | null> => {
return prisma.assignment.findUnique({
return db.assignment.findUnique({
where: { id },
include: {
recipient: true,
@@ -94,12 +93,12 @@ export const AssignmentService = {
},
})
},
create: async (data: CreateAssignmentData): Promise<Assignment> => {
return prisma.assignment.create({
data: {
...data,
createdBy: await getAuthenticatedUserId(),
},
create: async (
data: CreateAssignmentData & { createdBy: string },
db: Prisma.TransactionClient | typeof prisma = prisma,
): Promise<Assignment> => {
return db.assignment.create({
data,
})
},
delete: async (id: string): Promise<Assignment> => {
@@ -114,11 +113,32 @@ export const AssignmentService = {
},
})
},
markReturnedIfActive: async (
id: string,
db: Prisma.TransactionClient | typeof prisma = prisma,
): Promise<boolean> => {
const result = await db.assignment.updateMany({
where: {
id,
returnDate: null,
},
data: {
returnDate: new Date(),
recipientId: null,
quantity: null,
assetId: null,
itemId: null,
},
})
return result.count === 1
},
update: async (
id: string,
data: Prisma.AssignmentUpdateInput,
data: Prisma.AssignmentUpdateInput | Prisma.AssignmentUncheckedUpdateInput,
db: Prisma.TransactionClient | typeof prisma = prisma,
): Promise<Assignment> => {
return prisma.assignment.update({
return db.assignment.update({
where: { id },
data,
})