use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
pub struct PageResponse<T> {
pub items: Vec<T>,
pub has_more: bool,
pub page_token: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
pub struct I18nText {
pub zh_cn: Option<String>,
pub en_us: Option<String>,
pub ja_jp: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct UserId {
pub id: String,
pub id_type: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DepartmentId {
pub id: String,
pub id_type: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Attachment {
pub id: String,
pub name: String,
pub file_type: Option<String>,
pub size: Option<u64>,
pub created_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Location {
pub id: String,
pub name: I18nText,
pub location_type: String,
pub parent_id: Option<String>,
pub code: Option<String>,
pub active_status: bool,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct LocationQueryRequest {
pub location_type: Option<String>,
pub parent_id: Option<String>,
pub page_size: Option<u32>,
pub page_token: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Role {
pub id: String,
pub name: I18nText,
pub description: Option<I18nText>,
pub permissions: Vec<String>,
pub created_time: Option<String>,
pub updated_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct RoleListRequest {
pub page_size: Option<u32>,
pub page_token: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct UserRole {
pub user_id: String,
pub role_ids: Vec<String>,
pub roles: Option<Vec<Role>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Job {
pub id: String,
pub title: String,
pub description: Option<String>,
pub requirement: Option<String>,
pub status: String,
pub job_type: Option<String>,
pub job_function_id: Option<String>,
pub job_category_id: Option<String>,
pub locations: Vec<Location>,
pub department_id: Option<String>,
pub recruiters: Vec<UserId>,
pub interviewers: Vec<UserId>,
pub created_time: Option<String>,
pub updated_time: Option<String>,
pub custom_fields: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct JobCreateRequest {
pub title: String,
pub description: Option<String>,
pub requirement: Option<String>,
pub job_type: Option<String>,
pub job_function_id: Option<String>,
pub job_category_id: Option<String>,
pub location_ids: Vec<String>,
pub department_id: Option<String>,
pub recruiter_ids: Vec<String>,
pub interviewer_ids: Vec<String>,
pub custom_fields: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct JobUpdateRequest {
pub job_id: String,
pub title: Option<String>,
pub description: Option<String>,
pub requirement: Option<String>,
pub job_type: Option<String>,
pub job_function_id: Option<String>,
pub job_category_id: Option<String>,
pub location_ids: Option<Vec<String>>,
pub department_id: Option<String>,
pub recruiter_ids: Option<Vec<String>>,
pub interviewer_ids: Option<Vec<String>>,
pub custom_fields: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct JobListRequest {
pub page_size: Option<u32>,
pub page_token: Option<String>,
pub status: Option<String>,
pub department_id: Option<String>,
pub job_type: Option<String>,
pub created_start_time: Option<String>,
pub created_end_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct JobRequirement {
pub id: String,
pub name: String,
pub description: Option<String>,
pub job_id: String,
pub headcount: u32,
pub status: String,
pub expected_entry_time: Option<String>,
pub creator: Option<UserId>,
pub created_time: Option<String>,
pub updated_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct JobRequirementCreateRequest {
pub name: String,
pub description: Option<String>,
pub job_id: String,
pub headcount: u32,
pub expected_entry_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Talent {
pub id: String,
pub name: String,
pub email: Option<String>,
pub phone: Option<String>,
pub gender: Option<String>,
pub birthday: Option<String>,
pub work_experience: Option<u32>,
pub education: Option<String>,
pub current_company: Option<String>,
pub current_position: Option<String>,
pub expected_salary: Option<String>,
pub resume_attachments: Vec<Attachment>,
pub tags: Vec<String>,
pub created_time: Option<String>,
pub updated_time: Option<String>,
pub custom_fields: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct TalentCreateRequest {
pub name: String,
pub email: Option<String>,
pub phone: Option<String>,
pub gender: Option<String>,
pub birthday: Option<String>,
pub work_experience: Option<u32>,
pub education: Option<String>,
pub current_company: Option<String>,
pub current_position: Option<String>,
pub expected_salary: Option<String>,
pub resume_attachment_ids: Vec<String>,
pub tags: Vec<String>,
pub custom_fields: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Application {
pub id: String,
pub talent_id: String,
pub job_id: String,
pub stage_id: String,
pub status: String,
pub source: Option<String>,
pub apply_time: Option<String>,
pub talent: Option<Talent>,
pub job: Option<Job>,
pub created_time: Option<String>,
pub updated_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct ApplicationCreateRequest {
pub talent_id: String,
pub job_id: String,
pub stage_id: String,
pub source: Option<String>,
pub apply_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct ApplicationListRequest {
pub page_size: Option<u32>,
pub page_token: Option<String>,
pub job_id: Option<String>,
pub status: Option<String>,
pub stage_id: Option<String>,
pub source: Option<String>,
pub created_start_time: Option<String>,
pub created_end_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Interview {
pub id: String,
pub application_id: String,
pub round: u32,
pub interview_type: String,
pub status: String,
pub start_time: Option<String>,
pub end_time: Option<String>,
pub interviewers: Vec<UserId>,
pub location: Option<String>,
pub remark: Option<String>,
pub result: Option<String>,
pub created_time: Option<String>,
pub updated_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Offer {
pub id: String,
pub application_id: String,
pub status: String,
pub job_level: Option<String>,
pub basic_salary: Option<String>,
pub performance_bonus: Option<String>,
pub stock_option: Option<String>,
pub onboard_date: Option<String>,
pub expire_time: Option<String>,
pub remark: Option<String>,
pub created_time: Option<String>,
pub updated_time: Option<String>,
pub custom_fields: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct OfferCreateRequest {
pub application_id: String,
pub job_level: Option<String>,
pub basic_salary: Option<String>,
pub performance_bonus: Option<String>,
pub stock_option: Option<String>,
pub onboard_date: Option<String>,
pub expire_time: Option<String>,
pub remark: Option<String>,
pub custom_fields: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ReferralAccount {
pub id: String,
pub user_id: String,
pub status: String,
pub balance: String,
pub total_income: String,
pub withdrawn_amount: String,
pub created_time: Option<String>,
pub updated_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct ReferralAccountCreateRequest {
pub user_id: String,
pub id_card: Option<String>,
pub bank_card: Option<String>,
pub bank_name: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct AttachmentCreateRequest {
pub name: String,
pub content: String,
pub file_type: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct CommonResponse {
pub success: bool,
pub message: Option<String>,
pub timestamp: Option<String>,
}