Remove unused production symbols, starter assets, and stale browser tooling; reduce frontend chunk fragmentation.
49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from 'typeorm';
|
|
|
|
/**
|
|
* Field mappings from Jinshuju field keys (field_1, field_2, ...) to Student columns.
|
|
* Only mapped fields are extracted; unmapped fields are ignored.
|
|
*/
|
|
export interface JinshujuFieldMapping {
|
|
/** Jinshuju field key → Student column name */
|
|
name?: string; // e.g. "field_1"
|
|
phone?: string; // e.g. "field_2"
|
|
idNumber?: string; // e.g. "field_3"
|
|
gender?: string;
|
|
ethnicity?: string;
|
|
emergencyContact?: string;
|
|
emergencyPhone?: string;
|
|
studentNo?: string;
|
|
}
|
|
|
|
const mappingTransformer = {
|
|
to(value: JinshujuFieldMapping): string {
|
|
return JSON.stringify(value);
|
|
},
|
|
from(value: string | null): JinshujuFieldMapping {
|
|
if (!value) return {};
|
|
return JSON.parse(value);
|
|
},
|
|
};
|
|
|
|
@Entity('jinshuju_match_rules')
|
|
export class JinshujuMatchRule {
|
|
@PrimaryGeneratedColumn()
|
|
id: number;
|
|
|
|
@Column({ length: 100 })
|
|
name: string;
|
|
|
|
@Column({ name: 'form_token', length: 64 })
|
|
formToken: string;
|
|
|
|
@Column({ type: 'text', transformer: mappingTransformer })
|
|
mappings: JinshujuFieldMapping;
|
|
|
|
@CreateDateColumn({ name: 'created_at' })
|
|
createdAt: Date;
|
|
|
|
@UpdateDateColumn({ name: 'updated_at' })
|
|
updatedAt: Date;
|
|
}
|