refactor: rename Recipient to Person, remove username, add userId FK

This commit is contained in:
2026-06-16 10:04:24 +02:00
parent befe1f3f82
commit d67f31cf54
27 changed files with 751 additions and 628 deletions
+19 -24
View File
@@ -12,14 +12,14 @@ import { getAuthenticatedUserId } from "@/services/auth.service"
import { CategoryService } from "@/services/category.service"
import { ItemService } from "@/services/item.service"
import { MovementService } from "@/services/movement.service"
import { RecipientService } from "@/services/recipient.service"
import { PersonService } from "@/services/person.service"
import type {
Asset,
Assignment,
Category,
ImportItem,
Item,
Recipient,
Person,
} from "@/types"
export async function importItems(formData: ImportFormType) {
@@ -123,7 +123,7 @@ export async function importItems(formData: ImportFormType) {
file: [
"Only one of category or categoryId is allowed, you must select one of them",
],
},
}
}
}
@@ -153,7 +153,6 @@ export async function importItems(formData: ImportFormType) {
category,
deliveryNote,
assigned,
username,
firstName,
lastName,
} = row
@@ -178,10 +177,6 @@ export async function importItems(formData: ImportFormType) {
importErrors.push(`Row ${index + 2}: Delivery note must be a string`)
}
if (username && typeof username !== "string") {
importErrors.push(`Row ${index + 2}: Username must be a string`)
}
if (firstName && typeof firstName !== "string") {
importErrors.push(`Row ${index + 2}: First name must be a string`)
}
@@ -214,7 +209,6 @@ export async function importItems(formData: ImportFormType) {
category: row.category?.trim() || "",
deliveryNote: row.deliveryNote?.trim() || "",
assigned: row.assigned?.trim() === "true",
username: row.username?.trim() || "",
firstName: row.firstName?.trim() || "",
lastName: row.lastName?.trim() || "",
})
@@ -229,7 +223,6 @@ export async function importItems(formData: ImportFormType) {
category,
deliveryNote,
assigned,
username,
firstName,
lastName,
} = item
@@ -238,7 +231,7 @@ export async function importItems(formData: ImportFormType) {
let newItem: Item | null = null
let newAsset: Asset | null = null
let newCategory: Category | null = null
let newRecipient: Recipient | null = null
let newPerson: Person | null = null
let newAssignment: Assignment | null = null
const existingCategory = categoryId
@@ -290,14 +283,16 @@ export async function importItems(formData: ImportFormType) {
}
if (assigned && firstName && lastName) {
const finalUsername =
username || `${firstName.toLowerCase()[0]}${lastName.toLowerCase()}`
const existingRecipient =
await RecipientService.findByUsername(finalUsername)
const existingPerson = firstName
? await PersonService.findAllPaginated({
search: firstName,
page: 0,
pageSize: 1,
})
: null
if (!existingRecipient) {
newRecipient = await RecipientService.create({
username: finalUsername,
if (!existingPerson || existingPerson.data.length === 0) {
newPerson = await PersonService.create({
firstName,
lastName,
email: undefined,
@@ -305,7 +300,7 @@ export async function importItems(formData: ImportFormType) {
department: "OTHER",
})
} else {
newRecipient = existingRecipient
newPerson = existingPerson.data[0]
}
newAssignment = await AssignmentService.create({
@@ -313,7 +308,7 @@ export async function importItems(formData: ImportFormType) {
notes: deliveryNote || "",
itemId: newItem?.id || "",
assetId: newAsset?.id || "",
recipientId: newRecipient?.id || "",
recipientId: newPerson?.id || "",
assignmentDate: new Date(),
createdBy: userId,
})
@@ -324,15 +319,15 @@ export async function importItems(formData: ImportFormType) {
quantity: stock || 1,
type: assigned ? "ASSIGNMENT" : "IN",
itemId: newItem?.id || undefined,
recipientId: newRecipient?.id || undefined,
recipientId: newPerson?.id || undefined,
}
if (newAssignment?.id) {
movementData.assignmentId = newAssignment.id
}
if (newRecipient?.id) {
movementData.recipientId = newRecipient.id
if (newPerson?.id) {
movementData.recipientId = newPerson.id
}
await MovementService.create({
@@ -347,4 +342,4 @@ export async function importItems(formData: ImportFormType) {
success: true,
message: "Items imported successfully!",
}
}
}