generator client { provider = "prisma-client-js" } datasource db { provider = "mysql" url = env("DATABASE_URL") } enum SimulationTaskStatus { PROCESSING SUCCESSES FAILED } enum TemplateTaskStatus { WAIT PROCESSING STEP1_SUCCESS STEP2_SUCCESS FAILED } enum HairTemplateStatus { DRAFT PUBLIC } enum HairTemplateCategory { LONG MEDIUM SHORT DYE } enum HairTemplateSystemFlag { YES NO } enum SystemConfigValueType { STRING NUMBER BOOLEAN JSON } enum CustomerExpectContact { LINE PHONE EMAIL NONE } enum CustomerHairLength { SHORT MEDIUM LONG UNCONFIRM } enum CustomerHairTexture { UNCONFIRM THIN NORMAL HARD_CRUDE CURLY } enum CustomerFirstSuggestHair { AUTO LONG MEDIUM SHORT } enum CustomerVisitPurpose { CUT_DYE CUT DYE CONSULT_SIM } model HairstylistUser { id BigInt @id @default(autoincrement()) @db.UnsignedBigInt username String @db.VarChar(50) email String @db.VarChar(100) password String @db.VarChar(100) createTime DateTime @default(now()) @map("create_time") updateTime DateTime @updatedAt @map("update_time") isDeleted Int @default(0) @map("is_deleted") @db.UnsignedTinyInt @@map("hairstylist_user") } model Customer { id BigInt @id @default(autoincrement()) @db.UnsignedBigInt hairstylistId BigInt @map("hairstylist_id") @db.UnsignedBigInt name String @db.VarChar(30) namePronunciation String @default("") @map("name_pronunciation") @db.VarChar(50) phone String @db.VarChar(20) email String @default("") @db.VarChar(100) birthday DateTime? @db.Date avatar String @default("") @db.VarChar(500) expectContact CustomerExpectContact @default(NONE) @map("expect_contact") hairLength CustomerHairLength @default(UNCONFIRM) @map("hair_length") hairTexture CustomerHairTexture @default(UNCONFIRM) @map("hair_texture") notice String? @db.Text allergy String @default("") @db.VarChar(500) innerRemark String? @map("inner_remark") @db.Text followContent String? @map("follow_content") @db.Text nextFollowDate DateTime? @map("next_follow_date") @db.Date recommendVisitDate DateTime? @map("recommend_visit_date") @db.Date firstSuggestHair CustomerFirstSuggestHair @default(AUTO) @map("first_suggest_hair") planDate DateTime? @map("plan_date") @db.Date isFirstRegister Int @default(0) @map("is_first_register") @db.UnsignedTinyInt visitPurpose CustomerVisitPurpose? @map("visit_purpose") trouble String? @db.Text consultContent String? @map("consult_content") @db.Text expectLook String? @map("expect_look") @db.Text createTime DateTime @default(now()) @map("create_time") updateTime DateTime @updatedAt @map("update_time") isDeleted Int @default(0) @map("is_deleted") @db.UnsignedTinyInt @@unique([phone, isDeleted], map: "uk_phone_del") @@index([isDeleted], map: "idx_is_deleted") @@index([hairstylistId, isDeleted], map: "idx_hairstylist_is_deleted") @@index([nextFollowDate, isDeleted], map: "idx_next_follow") @@index([recommendVisitDate, isDeleted], map: "idx_recommend_visit") @@index([planDate, isDeleted], map: "idx_plan_date") @@map("customer") } model CustomerTreatmentRecord { id BigInt @id @default(autoincrement()) @db.UnsignedBigInt customerId BigInt @map("customer_id") @db.UnsignedBigInt hairstylistId BigInt @map("hairstylist_id") @db.UnsignedBigInt treatmentTime DateTime @map("treatment_time") treatmentTitle String @map("treatment_title") @db.VarChar(200) treatmentDetail String? @map("treatment_detail") @db.Text createTime DateTime @default(now()) @map("create_time") updateTime DateTime @updatedAt @map("update_time") isDeleted Int @default(0) @map("is_deleted") @db.UnsignedTinyInt @@map("customer_treatment_record") } model AiHairSimulation { id BigInt @id @default(autoincrement()) @db.UnsignedBigInt customerId BigInt? @map("customer_id") @db.UnsignedBigInt hairstylistId BigInt @map("hairstylist_id") @db.UnsignedBigInt originImage String @map("origin_image") @db.VarChar(500) templateIds String @map("template_ids") @db.Text simulateRemark String? @map("simulate_remark") @db.Text createTime DateTime @default(now()) @map("create_time") updateTime DateTime @updatedAt @map("update_time") isDeleted Int @default(0) @map("is_deleted") @db.UnsignedTinyInt @@map("ai_hair_simulation") } model AiHairSimulationTask { id BigInt @id @default(autoincrement()) @db.UnsignedBigInt simulationId BigInt @map("simulation_id") @db.UnsignedBigInt templateId String @map("template_id") @db.VarChar(100) customerId BigInt? @map("customer_id") @db.UnsignedBigInt taskId String @map("task_id") @db.VarChar(200) taskStatus SimulationTaskStatus @map("task_status") resultImages String? @map("result_images") @db.Text taskStartTime DateTime @map("task_start_time") taskFinishTime DateTime? @map("task_finish_time") errorMsg String? @map("error_msg") @db.Text createTime DateTime @default(now()) @map("create_time") updateTime DateTime @updatedAt @map("update_time") isDeleted Int @default(0) @map("is_deleted") @db.UnsignedTinyInt @@map("ai_hair_simulation_task") } model HairTemplate { id BigInt @id @default(autoincrement()) @db.UnsignedBigInt templateName String @map("template_name") @db.VarChar(100) coverUrl String @default("") @map("cover_url") @db.VarChar(500) status HairTemplateStatus category HairTemplateCategory tags String @default("") @db.VarChar(500) description String? @db.Text modelUrl String @default("") @map("model_url") @db.VarChar(500) clothesUrl String @default("") @map("clothes_url") @db.VarChar(500) backgroundUrl String @default("") @map("background_url") @db.VarChar(500) refHairUrl String @default("") @map("ref_hair_url") @db.VarChar(500) hairstylistId BigInt? @map("hairstylist_id") @db.UnsignedBigInt templateUrl String @default("") @map("template_url") @db.VarChar(500) usedCount Int @default(0) @map("used_count") @db.UnsignedInt isSystemTemplate HairTemplateSystemFlag @default(NO) @map("is_system_template") createTime DateTime @default(now()) @map("create_time") updateTime DateTime @updatedAt @map("update_time") isDeleted Int @default(0) @map("is_deleted") @db.UnsignedTinyInt @@index([category, isDeleted], map: "idx_category") @@index([hairstylistId, isDeleted], map: "idx_hairstylist_id") @@index([status, isDeleted], map: "idx_status") @@map("hair_template") } model HairTemplateMakeTask { id BigInt @id @default(autoincrement()) @db.UnsignedBigInt totalTaskId String @map("total_task_id") @db.VarChar(200) step1TaskId String @default("") @map("step1_task_id") @db.VarChar(200) step2TaskId String @default("") @map("step2_task_id") @db.VarChar(200) taskStatus TemplateTaskStatus @map("task_status") templateId BigInt? @map("template_id") @db.UnsignedBigInt step1Resource String? @map("step1_resource") @db.Text step2Resource String? @map("step2_resource") @db.Text refHairUrl String @default("") @map("ref_hair_url") @db.VarChar(500) modelUrl String @default("") @map("model_url") @db.VarChar(500) clothesUrl String @default("") @map("clothes_url") @db.VarChar(500) backgroundUrl String @default("") @map("background_url") @db.VarChar(500) step1ResultImg String @default("") @map("step1_result_img") @db.VarChar(500) step2ResultImg String @default("") @map("step2_result_img") @db.VarChar(500) createTime DateTime @default(now()) @map("create_time") updateTime DateTime @updatedAt @map("update_time") isDeleted Int @default(0) @map("is_deleted") @db.UnsignedTinyInt @@map("hair_template_make_task") } model SystemConfig { id BigInt @id @default(autoincrement()) @db.UnsignedBigInt configKey String @map("config_key") @db.VarChar(100) configName String @map("config_name") @db.VarChar(200) configGroup String @map("config_group") @db.VarChar(50) configValue String? @map("config_value") @db.Text valueType SystemConfigValueType @default(STRING) @map("value_type") sort Int @default(0) remark String? @default("") @db.VarChar(500) createTime DateTime @default(now()) @map("create_time") updateTime DateTime @updatedAt @map("update_time") isDeleted Int @default(0) @map("is_deleted") @db.UnsignedTinyInt @@unique([configKey, isDeleted], map: "uk_config_key") @@index([configGroup, isDeleted], map: "idx_config_group") @@map("system_config") }