feat(old-items): complete reuse workflow and refine miniapp home

This commit is contained in:
2026-08-15 16:38:30 +08:00
parent 65d23eab4a
commit f3737c80be
94 changed files with 7880 additions and 215 deletions
+529 -133
View File
@@ -153,6 +153,70 @@ enum FileBusinessType {
PROJECT_COVER
ACTIVITY_COVER
CONTENT_COVER
OLD_ITEM_DONATION_IMAGE
}
enum OldItemCategory {
CLOTHING
BOOKS
HOUSEHOLD
SPORTS
}
enum OldItemCondition {
NEW
LIKE_NEW
GOOD
FAIR
}
enum OldItemDonationMethod {
PICKUP
DROP_OFF
}
enum OldItemDonationStatus {
SUBMITTED
REJECTED
WAITING_PICKUP
WAITING_DROP_OFF
RECEIVED
PROCESSING
COMPLETED
CANCELLED
}
enum OldItemNeedStatus {
DRAFT
PUBLISHED
FULFILLED
CLOSED
}
enum OldItemInventoryStatus {
IN_STOCK
SORTED
DISINFECTED
OUTBOUND
DELIVERED
}
enum OldItemInventoryEventType {
INBOUND
SORTED
DISINFECTED
OUTBOUND
DELIVERED
}
enum OldItemCertificateStatus {
ISSUED
REVOKED
}
enum OldItemPointEntryType {
EARNED
ADJUSTMENT
}
enum ContentPostType {
@@ -261,70 +325,87 @@ enum FollowUpSource {
}
model User {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
status UserStatus @default(ACTIVE)
userType UserType @map("user_type")
mobileEncrypted String? @map("mobile_encrypted") @db.VarChar(512)
mobileHash String? @unique @map("mobile_hash") @db.Char(64)
nickname String? @db.VarChar(100)
avatarUrl String? @map("avatar_url") @db.VarChar(512)
lastLoginAt DateTime? @map("last_login_at") @db.DateTime(3)
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
wechatIdentities WechatIdentity[]
staffProfile StaffProfile?
adminCredential AdminCredential?
sessions AuthSession[]
userRoles UserRole[]
auditLogs AuditLog[] @relation("AuditActor")
assignedRoles UserRole[] @relation("UserRoleAssigner")
serviceApplications ServiceApplication[] @relation("ApplicationApplicant")
applicationStatusChanges ServiceApplicationStatusHistory[] @relation("ApplicationStatusOperator")
consents Consent[]
createdBeneficiaries BeneficiaryProfile[] @relation("BeneficiaryCreator")
updatedBeneficiaries BeneficiaryProfile[] @relation("BeneficiaryUpdater")
ownedServiceCases ServiceCase[] @relation("CaseOwner")
createdServiceCases ServiceCase[] @relation("CaseCreator")
updatedServiceCases ServiceCase[] @relation("CaseUpdater")
caseAssignments CaseAssignee[]
caseStatusChanges ServiceCaseStatusHistory[] @relation("CaseStatusOperator")
createdServiceRecords ServiceRecord[] @relation("ServiceRecordCreator")
updatedServiceRecords ServiceRecord[] @relation("ServiceRecordUpdater")
uploadedFiles File[] @relation("FileUploader")
assignedBeneficiaryTags BeneficiaryTag[] @relation("BeneficiaryTagAssigner")
assignedCaseMembers CaseAssignee[] @relation("CaseAssigneeAssigner")
revisedServiceRecords ServiceRecordRevision[] @relation("ServiceRecordReviser")
ownedFollowUpTasks FollowUpTask[] @relation("FollowUpOwner")
createdFollowUpTasks FollowUpTask[] @relation("FollowUpCreator")
updatedFollowUpTasks FollowUpTask[] @relation("FollowUpUpdater")
followUpStatusChanges FollowUpStatusHistory[] @relation("FollowUpStatusOperator")
volunteerProfile Volunteer?
reviewedVolunteers Volunteer[] @relation("VolunteerReviewer")
createdVolunteers Volunteer[] @relation("VolunteerCreator")
updatedVolunteers Volunteer[] @relation("VolunteerUpdater")
volunteerStatusChanges VolunteerStatusHistory[] @relation("VolunteerStatusOperator")
managedProjects Project[] @relation("ProjectManager")
createdProjects Project[] @relation("ProjectCreator")
updatedProjects Project[] @relation("ProjectUpdater")
projectStatusChanges ProjectStatusHistory[] @relation("ProjectStatusOperator")
createdActivities Activity[] @relation("ActivityCreator")
updatedActivities Activity[] @relation("ActivityUpdater")
activityStatusChanges ActivityStatusHistory[] @relation("ActivityStatusOperator")
activityRegistrations ActivityRegistration[] @relation("ActivityRegistrationUser")
reviewedRegistrations ActivityRegistration[] @relation("RegistrationReviewer")
checkedInRegistrations ActivityRegistration[] @relation("RegistrationCheckInOperator")
recordedServiceMinutes ActivityRegistration[] @relation("RegistrationMinutesOperator")
registrationChanges ActivityRegistrationHistory[] @relation("RegistrationHistoryOperator")
createdContentPosts ContentPost[] @relation("ContentCreator")
updatedContentPosts ContentPost[] @relation("ContentUpdater")
reviewedContentPosts ContentPost[] @relation("ContentReviewer")
contentStatusChanges ContentPostStatusHistory[] @relation("ContentStatusOperator")
notifications Notification[]
notificationPreferences NotificationPreference[]
createdFinancialDisclosures FinancialDisclosure[] @relation("FinancialDisclosureCreator")
updatedFinancialDisclosures FinancialDisclosure[] @relation("FinancialDisclosureUpdater")
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
status UserStatus @default(ACTIVE)
userType UserType @map("user_type")
mobileEncrypted String? @map("mobile_encrypted") @db.VarChar(512)
mobileHash String? @unique @map("mobile_hash") @db.Char(64)
nickname String? @db.VarChar(100)
avatarUrl String? @map("avatar_url") @db.VarChar(512)
lastLoginAt DateTime? @map("last_login_at") @db.DateTime(3)
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
wechatIdentities WechatIdentity[]
staffProfile StaffProfile?
adminCredential AdminCredential?
sessions AuthSession[]
userRoles UserRole[]
auditLogs AuditLog[] @relation("AuditActor")
assignedRoles UserRole[] @relation("UserRoleAssigner")
serviceApplications ServiceApplication[] @relation("ApplicationApplicant")
applicationStatusChanges ServiceApplicationStatusHistory[] @relation("ApplicationStatusOperator")
consents Consent[]
createdBeneficiaries BeneficiaryProfile[] @relation("BeneficiaryCreator")
updatedBeneficiaries BeneficiaryProfile[] @relation("BeneficiaryUpdater")
ownedServiceCases ServiceCase[] @relation("CaseOwner")
createdServiceCases ServiceCase[] @relation("CaseCreator")
updatedServiceCases ServiceCase[] @relation("CaseUpdater")
caseAssignments CaseAssignee[]
caseStatusChanges ServiceCaseStatusHistory[] @relation("CaseStatusOperator")
createdServiceRecords ServiceRecord[] @relation("ServiceRecordCreator")
updatedServiceRecords ServiceRecord[] @relation("ServiceRecordUpdater")
uploadedFiles File[] @relation("FileUploader")
assignedBeneficiaryTags BeneficiaryTag[] @relation("BeneficiaryTagAssigner")
assignedCaseMembers CaseAssignee[] @relation("CaseAssigneeAssigner")
revisedServiceRecords ServiceRecordRevision[] @relation("ServiceRecordReviser")
ownedFollowUpTasks FollowUpTask[] @relation("FollowUpOwner")
createdFollowUpTasks FollowUpTask[] @relation("FollowUpCreator")
updatedFollowUpTasks FollowUpTask[] @relation("FollowUpUpdater")
followUpStatusChanges FollowUpStatusHistory[] @relation("FollowUpStatusOperator")
volunteerProfile Volunteer?
reviewedVolunteers Volunteer[] @relation("VolunteerReviewer")
createdVolunteers Volunteer[] @relation("VolunteerCreator")
updatedVolunteers Volunteer[] @relation("VolunteerUpdater")
volunteerStatusChanges VolunteerStatusHistory[] @relation("VolunteerStatusOperator")
managedProjects Project[] @relation("ProjectManager")
createdProjects Project[] @relation("ProjectCreator")
updatedProjects Project[] @relation("ProjectUpdater")
projectStatusChanges ProjectStatusHistory[] @relation("ProjectStatusOperator")
createdActivities Activity[] @relation("ActivityCreator")
updatedActivities Activity[] @relation("ActivityUpdater")
activityStatusChanges ActivityStatusHistory[] @relation("ActivityStatusOperator")
activityRegistrations ActivityRegistration[] @relation("ActivityRegistrationUser")
reviewedRegistrations ActivityRegistration[] @relation("RegistrationReviewer")
checkedInRegistrations ActivityRegistration[] @relation("RegistrationCheckInOperator")
recordedServiceMinutes ActivityRegistration[] @relation("RegistrationMinutesOperator")
registrationChanges ActivityRegistrationHistory[] @relation("RegistrationHistoryOperator")
createdContentPosts ContentPost[] @relation("ContentCreator")
updatedContentPosts ContentPost[] @relation("ContentUpdater")
reviewedContentPosts ContentPost[] @relation("ContentReviewer")
contentStatusChanges ContentPostStatusHistory[] @relation("ContentStatusOperator")
notifications Notification[]
notificationPreferences NotificationPreference[]
createdFinancialDisclosures FinancialDisclosure[] @relation("FinancialDisclosureCreator")
updatedFinancialDisclosures FinancialDisclosure[] @relation("FinancialDisclosureUpdater")
financialDisclosureStatusChanges FinancialDisclosureStatusHistory[] @relation("FinancialDisclosureStatusOperator")
oldItemDonations OldItemDonation[] @relation("OldItemDonor")
assignedOldItemDonations OldItemDonation[] @relation("OldItemAssignee")
oldItemDonationStatusChanges OldItemDonationStatusHistory[] @relation("OldItemDonationStatusOperator")
createdOldItemNeeds OldItemNeed[] @relation("OldItemNeedCreator")
updatedOldItemNeeds OldItemNeed[] @relation("OldItemNeedUpdater")
oldItemNeedStatusChanges OldItemNeedStatusHistory[] @relation("OldItemNeedStatusOperator")
createdOldItemDropOffPoints OldItemDropOffPoint[] @relation("OldItemDropOffPointCreator")
createdOldItemInventoryItems OldItemInventoryItem[] @relation("OldItemInventoryCreator")
updatedOldItemInventoryItems OldItemInventoryItem[] @relation("OldItemInventoryUpdater")
oldItemInventoryEvents OldItemInventoryEvent[] @relation("OldItemInventoryEventOperator")
oldItemInventoryImports OldItemInventoryImport[] @relation("OldItemInventoryImportCreator")
createdOldItemRewardConfigs OldItemRewardConfig[] @relation("OldItemRewardConfigCreator")
issuedOldItemCertificates OldItemCertificate[] @relation("OldItemCertificateIssuer")
revokedOldItemCertificates OldItemCertificate[] @relation("OldItemCertificateRevoker")
oldItemPointAccount OldItemPointAccount?
oldItemPointEntries OldItemPointEntry[] @relation("OldItemPointOwner")
operatedOldItemPointEntries OldItemPointEntry[] @relation("OldItemPointOperator")
@@map("users")
}
@@ -552,27 +633,27 @@ model ServiceApplicationStatusHistory {
}
model BeneficiaryProfile {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
displayNameEncrypted String @map("display_name_encrypted") @db.VarChar(512)
displayNameHash String @map("display_name_hash") @db.Char(64)
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
displayNameEncrypted String @map("display_name_encrypted") @db.VarChar(512)
displayNameHash String @map("display_name_hash") @db.Char(64)
gender BeneficiaryGender?
birthYear Int? @map("birth_year") @db.UnsignedSmallInt
mobileEncrypted String? @map("mobile_encrypted") @db.VarChar(512)
mobileHash String? @map("mobile_hash") @db.Char(64)
regionCode String @map("region_code") @db.VarChar(100)
addressDetailEncrypted String? @map("address_detail_encrypted") @db.VarChar(1024)
primaryCategory ServiceCategory @map("primary_category")
keyCareFlag Boolean @default(false) @map("key_care_flag")
isMinor Boolean @default(false) @map("is_minor")
status BeneficiaryStatus @default(ACTIVE)
notesEncrypted String? @map("notes_encrypted") @db.Text
createdById BigInt @map("created_by") @db.UnsignedBigInt
updatedById BigInt @map("updated_by") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
creator User @relation("BeneficiaryCreator", fields: [createdById], references: [id], onDelete: Restrict)
updater User @relation("BeneficiaryUpdater", fields: [updatedById], references: [id], onDelete: Restrict)
birthYear Int? @map("birth_year") @db.UnsignedSmallInt
mobileEncrypted String? @map("mobile_encrypted") @db.VarChar(512)
mobileHash String? @map("mobile_hash") @db.Char(64)
regionCode String @map("region_code") @db.VarChar(100)
addressDetailEncrypted String? @map("address_detail_encrypted") @db.VarChar(1024)
primaryCategory ServiceCategory @map("primary_category")
keyCareFlag Boolean @default(false) @map("key_care_flag")
isMinor Boolean @default(false) @map("is_minor")
status BeneficiaryStatus @default(ACTIVE)
notesEncrypted String? @map("notes_encrypted") @db.Text
createdById BigInt @map("created_by") @db.UnsignedBigInt
updatedById BigInt @map("updated_by") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
creator User @relation("BeneficiaryCreator", fields: [createdById], references: [id], onDelete: Restrict)
updater User @relation("BeneficiaryUpdater", fields: [updatedById], references: [id], onDelete: Restrict)
contacts BeneficiaryContact[]
beneficiaryTags BeneficiaryTag[]
applications ServiceApplication[]
@@ -580,6 +661,7 @@ model BeneficiaryProfile {
serviceRecords ServiceRecord[]
consents Consent[]
followUpTasks FollowUpTask[]
oldItemInventoryItems OldItemInventoryItem[]
@@index([displayNameHash], map: "beneficiary_profiles_display_name_hash_idx")
@@index([mobileHash], map: "beneficiary_profiles_mobile_hash_idx")
@@ -769,29 +851,30 @@ model ServiceRecordRevision {
}
model File {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
caseId BigInt? @map("case_id") @db.UnsignedBigInt
clientRequestId String @map("client_request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
storageProvider String @map("storage_provider") @db.VarChar(50)
bucket String @db.VarChar(255)
objectKey String @unique @map("object_key") @db.VarChar(512)
originalFilenameEncrypted String @map("original_filename_encrypted") @db.VarChar(1024)
mimeType String @map("mime_type") @db.VarChar(100)
size BigInt @db.UnsignedBigInt
sha256 String? @db.Char(64)
businessType FileBusinessType @map("business_type")
uploaderUserId BigInt @map("uploader_user_id") @db.UnsignedBigInt
status FileStatus @default(UPLOAD_PENDING)
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
serviceCase ServiceCase? @relation(fields: [caseId], references: [id], onDelete: Restrict)
uploader User @relation("FileUploader", fields: [uploaderUserId], references: [id], onDelete: Restrict)
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
caseId BigInt? @map("case_id") @db.UnsignedBigInt
clientRequestId String @map("client_request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
storageProvider String @map("storage_provider") @db.VarChar(50)
bucket String @db.VarChar(255)
objectKey String @unique @map("object_key") @db.VarChar(512)
originalFilenameEncrypted String @map("original_filename_encrypted") @db.VarChar(1024)
mimeType String @map("mime_type") @db.VarChar(100)
size BigInt @db.UnsignedBigInt
sha256 String? @db.Char(64)
businessType FileBusinessType @map("business_type")
uploaderUserId BigInt @map("uploader_user_id") @db.UnsignedBigInt
status FileStatus @default(UPLOAD_PENDING)
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
serviceCase ServiceCase? @relation(fields: [caseId], references: [id], onDelete: Restrict)
uploader User @relation("FileUploader", fields: [uploaderUserId], references: [id], onDelete: Restrict)
serviceRecords ServiceRecordFile[]
projectCover Project? @relation("ProjectCover")
activityCover Activity? @relation("ActivityCover")
contentCover ContentPost? @relation("ContentCover")
projectCover Project? @relation("ProjectCover")
activityCover Activity? @relation("ActivityCover")
contentCover ContentPost? @relation("ContentCover")
oldItemDonations OldItemDonationFile[]
@@unique([uploaderUserId, clientRequestId], map: "files_uploader_client_request_key")
@@index([caseId, status, createdAt], map: "files_case_status_created_at_idx")
@@ -799,6 +882,319 @@ model File {
@@map("files")
}
model OldItemDropOffPoint {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
name String @db.VarChar(120)
regionText String @map("region_text") @db.VarChar(120)
addressText String @map("address_text") @db.VarChar(300)
openingHours String @map("opening_hours") @db.VarChar(200)
isActive Boolean @default(true) @map("is_active")
sortOrder Int @default(0) @map("sort_order")
createdById BigInt @map("created_by") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
creator User @relation("OldItemDropOffPointCreator", fields: [createdById], references: [id], onDelete: Restrict)
donations OldItemDonation[]
@@index([isActive, sortOrder], map: "old_item_drop_off_points_active_sort_idx")
@@map("old_item_drop_off_points")
}
model OldItemNeed {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
clientRequestId String @map("client_request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
title String @db.VarChar(160)
category OldItemCategory
regionText String @map("region_text") @db.VarChar(120)
beneficiaryGroup String @map("beneficiary_group") @db.VarChar(160)
description String @db.Text
requestedQuantity Int @map("requested_quantity") @db.UnsignedInt
fulfilledQuantity Int @default(0) @map("fulfilled_quantity") @db.UnsignedInt
priority Int @default(0)
sortOrder Int @default(0) @map("sort_order")
status OldItemNeedStatus @default(DRAFT)
revision Int @default(1) @db.UnsignedInt
publishedAt DateTime? @map("published_at") @db.DateTime(3)
createdById BigInt @map("created_by") @db.UnsignedBigInt
updatedById BigInt @map("updated_by") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
creator User @relation("OldItemNeedCreator", fields: [createdById], references: [id], onDelete: Restrict)
updater User @relation("OldItemNeedUpdater", fields: [updatedById], references: [id], onDelete: Restrict)
donations OldItemDonation[]
history OldItemNeedStatusHistory[]
inventoryItems OldItemInventoryItem[]
@@unique([createdById, clientRequestId], map: "old_item_needs_creator_request_key")
@@index([status, category, priority, sortOrder], map: "old_item_needs_public_list_idx")
@@map("old_item_needs")
}
model OldItemNeedStatusHistory {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
needId BigInt @map("need_id") @db.UnsignedBigInt
requestId String @unique @map("request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
fromStatus OldItemNeedStatus? @map("from_status")
toStatus OldItemNeedStatus @map("to_status")
operatorUserId BigInt @map("operator_user_id") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
need OldItemNeed @relation(fields: [needId], references: [id], onDelete: Restrict)
operator User @relation("OldItemNeedStatusOperator", fields: [operatorUserId], references: [id], onDelete: Restrict)
@@index([needId, createdAt], map: "old_item_need_history_need_created_idx")
@@map("old_item_need_status_history")
}
model OldItemDonation {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
donationNo String @unique @map("donation_no") @db.VarChar(32)
donorUserId BigInt @map("donor_user_id") @db.UnsignedBigInt
clientRequestId String @map("client_request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
category OldItemCategory
itemCondition OldItemCondition @map("item_condition")
quantity Int @db.UnsignedInt
descriptionEncrypted String @map("description_encrypted") @db.Text
method OldItemDonationMethod
contactNameEncrypted String @map("contact_name_encrypted") @db.VarChar(512)
mobileEncrypted String @map("mobile_encrypted") @db.VarChar(512)
mobileHash String @map("mobile_hash") @db.Char(64)
addressEncrypted String? @map("address_encrypted") @db.Text
appointmentAt DateTime? @map("appointment_at") @db.DateTime(3)
dropOffPointId BigInt? @map("drop_off_point_id") @db.UnsignedBigInt
targetNeedId BigInt? @map("target_need_id") @db.UnsignedBigInt
assignedUserId BigInt? @map("assigned_user_id") @db.UnsignedBigInt
rejectionReasonEncrypted String? @map("rejection_reason_encrypted") @db.Text
status OldItemDonationStatus @default(SUBMITTED)
revision Int @default(1) @db.UnsignedInt
assistedPeople Int @default(0) @map("assisted_people") @db.UnsignedInt
receivedAt DateTime? @map("received_at") @db.DateTime(3)
completedAt DateTime? @map("completed_at") @db.DateTime(3)
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
donor User @relation("OldItemDonor", fields: [donorUserId], references: [id], onDelete: Restrict)
assignee User? @relation("OldItemAssignee", fields: [assignedUserId], references: [id], onDelete: Restrict)
dropOffPoint OldItemDropOffPoint? @relation(fields: [dropOffPointId], references: [id], onDelete: Restrict)
targetNeed OldItemNeed? @relation(fields: [targetNeedId], references: [id], onDelete: Restrict)
history OldItemDonationStatusHistory[]
files OldItemDonationFile[]
inventoryItems OldItemInventoryItem[]
certificates OldItemCertificate[]
pointEntries OldItemPointEntry[]
@@unique([donorUserId, clientRequestId], map: "old_item_donations_donor_request_key")
@@index([donorUserId, status, createdAt], map: "old_item_donations_donor_status_created_idx")
@@index([status, method, createdAt], map: "old_item_donations_admin_list_idx")
@@index([targetNeedId, status], map: "old_item_donations_need_status_idx")
@@map("old_item_donations")
}
model OldItemRewardConfig {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
clientRequestId String @unique @map("client_request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
version Int @unique @db.UnsignedInt
activeKey String? @unique @map("active_key") @db.VarChar(16)
certificateTitle String @map("certificate_title") @db.VarChar(120)
certificateMessage String @map("certificate_message") @db.VarChar(1000)
issuerName String @map("issuer_name") @db.VarChar(120)
legalNotice String @map("legal_notice") @db.VarChar(500)
clothingPoints Int @map("clothing_points") @db.UnsignedInt
booksPoints Int @map("books_points") @db.UnsignedInt
householdPoints Int @map("household_points") @db.UnsignedInt
sportsPoints Int @map("sports_points") @db.UnsignedInt
maxPointsPerDonation Int @map("max_points_per_donation") @db.UnsignedInt
createdById BigInt @map("created_by") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
creator User @relation("OldItemRewardConfigCreator", fields: [createdById], references: [id], onDelete: Restrict)
certificates OldItemCertificate[]
pointEntries OldItemPointEntry[]
@@map("old_item_reward_configs")
}
model OldItemCertificate {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
certificateNo String @unique @map("certificate_no") @db.VarChar(40)
donationId BigInt @map("donation_id") @db.UnsignedBigInt
configId BigInt? @map("config_id") @db.UnsignedBigInt
issueRequestId String @unique @map("issue_request_id") @db.Char(36)
issueFingerprint String @map("issue_fingerprint") @db.Char(64)
activeKey String? @map("active_key") @db.VarChar(16)
status OldItemCertificateStatus @default(ISSUED)
recipientNameEncrypted String @map("recipient_name_encrypted") @db.VarChar(512)
titleSnapshot String @map("title_snapshot") @db.VarChar(120)
messageSnapshot String @map("message_snapshot") @db.VarChar(1000)
issuerSnapshot String @map("issuer_snapshot") @db.VarChar(120)
legalNoticeSnapshot String @map("legal_notice_snapshot") @db.VarChar(500)
issuedById BigInt @map("issued_by") @db.UnsignedBigInt
issuedAt DateTime @map("issued_at") @db.DateTime(3)
revokedById BigInt? @map("revoked_by") @db.UnsignedBigInt
revokedRequestId String? @unique @map("revoked_request_id") @db.Char(36)
revokedFingerprint String? @map("revoked_fingerprint") @db.Char(64)
revokeReasonEncrypted String? @map("revoke_reason_encrypted") @db.Text
revokedAt DateTime? @map("revoked_at") @db.DateTime(3)
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
donation OldItemDonation @relation(fields: [donationId], references: [id], onDelete: Restrict)
config OldItemRewardConfig? @relation(fields: [configId], references: [id], onDelete: Restrict)
issuer User @relation("OldItemCertificateIssuer", fields: [issuedById], references: [id], onDelete: Restrict)
revoker User? @relation("OldItemCertificateRevoker", fields: [revokedById], references: [id], onDelete: Restrict)
@@unique([donationId, activeKey], map: "old_item_certificates_donation_active_key")
@@index([donationId, issuedAt], map: "old_item_certificates_donation_issued_idx")
@@map("old_item_certificates")
}
model OldItemPointAccount {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
userId BigInt @unique @map("user_id") @db.UnsignedBigInt
balance Int @default(0) @db.UnsignedInt
revision Int @default(1) @db.UnsignedInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
user User @relation(fields: [userId], references: [id], onDelete: Restrict)
entries OldItemPointEntry[]
@@map("old_item_point_accounts")
}
model OldItemPointEntry {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
accountId BigInt @map("account_id") @db.UnsignedBigInt
userId BigInt @map("user_id") @db.UnsignedBigInt
donationId BigInt? @map("donation_id") @db.UnsignedBigInt
configId BigInt? @map("config_id") @db.UnsignedBigInt
requestId String @unique @map("request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
sourceKey String @unique @map("source_key") @db.VarChar(100)
entryType OldItemPointEntryType @map("entry_type")
pointsDelta Int @map("points_delta")
balanceAfter Int @map("balance_after") @db.UnsignedInt
noteEncrypted String? @map("note_encrypted") @db.Text
operatorUserId BigInt @map("operator_user_id") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
account OldItemPointAccount @relation(fields: [accountId], references: [id], onDelete: Restrict)
user User @relation("OldItemPointOwner", fields: [userId], references: [id], onDelete: Restrict)
donation OldItemDonation? @relation(fields: [donationId], references: [id], onDelete: Restrict)
config OldItemRewardConfig? @relation(fields: [configId], references: [id], onDelete: Restrict)
operator User @relation("OldItemPointOperator", fields: [operatorUserId], references: [id], onDelete: Restrict)
@@index([userId, createdAt], map: "old_item_point_entries_user_created_idx")
@@index([donationId], map: "old_item_point_entries_donation_idx")
@@map("old_item_point_entries")
}
model OldItemInventoryImport {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
clientRequestId String @map("client_request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
originalFilenameEncrypted String @map("original_filename_encrypted") @db.VarChar(512)
rowCount Int @map("row_count") @db.UnsignedInt
createdById BigInt @map("created_by") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
creator User @relation("OldItemInventoryImportCreator", fields: [createdById], references: [id], onDelete: Restrict)
items OldItemInventoryItem[]
@@unique([createdById, clientRequestId], map: "old_item_inventory_import_creator_request_key")
@@map("old_item_inventory_imports")
}
model OldItemInventoryItem {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
inventoryNo String @unique @map("inventory_no") @db.VarChar(32)
sourceDonationId BigInt? @unique @map("source_donation_id") @db.UnsignedBigInt
importId BigInt? @map("import_id") @db.UnsignedBigInt
category OldItemCategory
itemName String @map("item_name") @db.VarChar(160)
quantity Int @db.UnsignedInt
unit String @default("件") @db.VarChar(20)
storageLocation String @map("storage_location") @db.VarChar(160)
status OldItemInventoryStatus @default(IN_STOCK)
targetNeedId BigInt? @map("target_need_id") @db.UnsignedBigInt
beneficiaryId BigInt? @map("beneficiary_id") @db.UnsignedBigInt
destinationRegion String? @map("destination_region") @db.VarChar(120)
noteEncrypted String? @map("note_encrypted") @db.Text
landingAt DateTime? @map("landing_at") @db.DateTime(3)
revision Int @default(1) @db.UnsignedInt
createdById BigInt @map("created_by") @db.UnsignedBigInt
updatedById BigInt @map("updated_by") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
sourceDonation OldItemDonation? @relation(fields: [sourceDonationId], references: [id], onDelete: Restrict)
import OldItemInventoryImport? @relation(fields: [importId], references: [id], onDelete: Restrict)
targetNeed OldItemNeed? @relation(fields: [targetNeedId], references: [id], onDelete: Restrict)
beneficiary BeneficiaryProfile? @relation(fields: [beneficiaryId], references: [id], onDelete: Restrict)
creator User @relation("OldItemInventoryCreator", fields: [createdById], references: [id], onDelete: Restrict)
updater User @relation("OldItemInventoryUpdater", fields: [updatedById], references: [id], onDelete: Restrict)
events OldItemInventoryEvent[]
@@index([status, category, createdAt], map: "old_item_inventory_status_category_created_idx")
@@index([targetNeedId, status], map: "old_item_inventory_need_status_idx")
@@index([beneficiaryId, status], map: "old_item_inventory_beneficiary_status_idx")
@@map("old_item_inventory_items")
}
model OldItemInventoryEvent {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
inventoryItemId BigInt @map("inventory_item_id") @db.UnsignedBigInt
requestId String @unique @map("request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
eventType OldItemInventoryEventType @map("event_type")
fromStatus OldItemInventoryStatus? @map("from_status")
toStatus OldItemInventoryStatus @map("to_status")
locationText String? @map("location_text") @db.VarChar(160)
noteEncrypted String? @map("note_encrypted") @db.Text
eventAt DateTime @map("event_at") @db.DateTime(3)
operatorUserId BigInt @map("operator_user_id") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
inventoryItem OldItemInventoryItem @relation(fields: [inventoryItemId], references: [id], onDelete: Restrict)
operator User @relation("OldItemInventoryEventOperator", fields: [operatorUserId], references: [id], onDelete: Restrict)
@@index([inventoryItemId, eventAt], map: "old_item_inventory_events_item_event_idx")
@@map("old_item_inventory_events")
}
model OldItemDonationStatusHistory {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
donationId BigInt @map("donation_id") @db.UnsignedBigInt
requestId String @unique @map("request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
fromStatus OldItemDonationStatus? @map("from_status")
toStatus OldItemDonationStatus @map("to_status")
noteEncrypted String? @map("note_encrypted") @db.Text
operatorUserId BigInt @map("operator_user_id") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
donation OldItemDonation @relation(fields: [donationId], references: [id], onDelete: Restrict)
operator User @relation("OldItemDonationStatusOperator", fields: [operatorUserId], references: [id], onDelete: Restrict)
@@index([donationId, createdAt], map: "old_item_donation_history_donation_created_idx")
@@map("old_item_donation_status_history")
}
model OldItemDonationFile {
donationId BigInt @map("donation_id") @db.UnsignedBigInt
fileId BigInt @map("file_id") @db.UnsignedBigInt
sortOrder Int @default(0) @map("sort_order")
attachedAt DateTime @default(now()) @map("attached_at") @db.DateTime(3)
donation OldItemDonation @relation(fields: [donationId], references: [id], onDelete: Restrict)
file File @relation(fields: [fileId], references: [id], onDelete: Restrict)
@@id([donationId, fileId])
@@index([fileId], map: "old_item_donation_files_file_idx")
@@map("old_item_donation_files")
}
model ServiceRecordFile {
serviceRecordId BigInt @map("service_record_id") @db.UnsignedBigInt
fileId BigInt @map("file_id") @db.UnsignedBigInt
@@ -1158,24 +1554,24 @@ model ContentPostStatusHistory {
}
model FinancialDisclosure {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
clientRequestId String @map("client_request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
title String @db.VarChar(200)
summary String? @db.VarChar(500)
richText String @map("rich_text") @db.MediumText
status FinancialDisclosureStatus @default(DRAFT)
isPinned Boolean @default(false) @map("is_pinned")
sortOrder Int @default(0) @map("sort_order")
revision Int @default(1) @db.UnsignedInt
publishedAt DateTime? @map("published_at") @db.DateTime(3)
createdById BigInt @map("created_by") @db.UnsignedBigInt
updatedById BigInt @map("updated_by") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
creator User @relation("FinancialDisclosureCreator", fields: [createdById], references: [id], onDelete: Restrict)
updater User @relation("FinancialDisclosureUpdater", fields: [updatedById], references: [id], onDelete: Restrict)
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
publicId String @unique @map("public_id") @db.Char(36)
clientRequestId String @map("client_request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
title String @db.VarChar(200)
summary String? @db.VarChar(500)
richText String @map("rich_text") @db.MediumText
status FinancialDisclosureStatus @default(DRAFT)
isPinned Boolean @default(false) @map("is_pinned")
sortOrder Int @default(0) @map("sort_order")
revision Int @default(1) @db.UnsignedInt
publishedAt DateTime? @map("published_at") @db.DateTime(3)
createdById BigInt @map("created_by") @db.UnsignedBigInt
updatedById BigInt @map("updated_by") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
creator User @relation("FinancialDisclosureCreator", fields: [createdById], references: [id], onDelete: Restrict)
updater User @relation("FinancialDisclosureUpdater", fields: [updatedById], references: [id], onDelete: Restrict)
statusHistory FinancialDisclosureStatusHistory[]
@@unique([createdById, clientRequestId], map: "financial_disclosures_creator_request_key")
@@ -1185,16 +1581,16 @@ model FinancialDisclosure {
}
model FinancialDisclosureStatusHistory {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
financialDisclosureId BigInt @map("financial_disclosure_id") @db.UnsignedBigInt
requestId String @unique @map("request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
fromStatus FinancialDisclosureStatus? @map("from_status")
toStatus FinancialDisclosureStatus @map("to_status")
operatorUserId BigInt @map("operator_user_id") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
financialDisclosure FinancialDisclosure @relation(fields: [financialDisclosureId], references: [id], onDelete: Restrict)
operator User @relation("FinancialDisclosureStatusOperator", fields: [operatorUserId], references: [id], onDelete: Restrict)
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
financialDisclosureId BigInt @map("financial_disclosure_id") @db.UnsignedBigInt
requestId String @unique @map("request_id") @db.Char(36)
requestFingerprint String @map("request_fingerprint") @db.Char(64)
fromStatus FinancialDisclosureStatus? @map("from_status")
toStatus FinancialDisclosureStatus @map("to_status")
operatorUserId BigInt @map("operator_user_id") @db.UnsignedBigInt
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
financialDisclosure FinancialDisclosure @relation(fields: [financialDisclosureId], references: [id], onDelete: Restrict)
operator User @relation("FinancialDisclosureStatusOperator", fields: [operatorUserId], references: [id], onDelete: Restrict)
@@index([financialDisclosureId, createdAt], map: "financial_disclosure_history_document_idx")
@@index([operatorUserId, createdAt], map: "financial_disclosure_history_operator_idx")