Skip to content

Commit 2e0fbd5

Browse files
fix db er
1 parent a92a3f6 commit 2e0fbd5

13 files changed

Lines changed: 1164 additions & 632 deletions

backend/data/careerLibrary.js

Lines changed: 57 additions & 217 deletions
Original file line numberDiff line numberDiff line change
@@ -73,241 +73,97 @@ const CAREER_LIBRARY = {
7373
],
7474
Finance: [
7575
'Financial Analyst', 'Accountant', 'Auditor', 'Tax Specialist',
76-
'Investment Analyst', 'Risk Analyst', 'Treasury Specialist', 'Controller',
77-
'Credit Analyst', 'Insurance Specialist', 'Financial Planner', 'Wealth Manager',
78-
'Investment Banker', 'Equity Research Analyst', 'Actuary', 'Risk Manager'
76+
'Investment Analyst', 'Risk Analyst', 'Treasury Specialist',
77+
'Credit Analyst', 'Insurance Specialist', 'Financial Planner',
78+
'Investment Banker', 'Actuary'
7979
],
8080
Education: [
81-
'Giáo viên Toán', 'Giáo viên Văn', 'Giáo viên Tiếng Anh', 'Giáo viên Lịch sử', 'Giáo viên Địa lý', 'Giáo viên Sinh học', 'Giáo viên Hóa học', 'Giáo viên Vật lý', 'Giáo viên Tin học', 'Giáo viên Giáo dục công dân', 'Giáo viên Nghệ thuật', 'Giáo viên Âm nhạc', 'Giáo viên Thể dục', 'Giáo viên Kỹ năng sống', 'Giảng viên Đại học', 'Giảng viên Cao đẳng', 'Giảng viên Trung cấp', 'Giáo viên Giáo dục đặc biệt', 'Giáo viên Giáo dục quốc tế', 'Giáo viên Giáo dục hướng nghiệp'
81+
'Giáo viên Tiểu học',
82+
'Giáo viên Trung học cơ sở',
83+
'Giáo viên Trung học phổ thông',
84+
'Giảng viên Đại học / Cao đẳng',
85+
'Giáo viên Đào tạo nghề',
86+
'Giáo viên Giáo dục đặc biệt',
87+
'Gia sư / Giáo viên kèm'
8288
],
8389
Healthcare: [
84-
'Nurse', 'Pharmacist', 'Lab Technician', 'Medical Assistant',
85-
'Physiotherapist', 'Radiology Technician', 'Dentist Assistant', 'Public Health Officer',
86-
'Doctor', 'Dentist', 'Clinical Psychologist', 'Occupational Therapist', 'Nutritionist',
87-
'Health Informatics Specialist', 'Medical Sales Representative', 'Healthcare Administrator'
90+
'Bác sĩ', 'Y tá / Điều dưỡng', 'Dược sĩ', 'Nha sĩ',
91+
'Kỹ thuật viên Y tế', 'Nhân viên Chăm sóc sức khỏe',
92+
'Nhà Tâm lý học Lâm sàng', 'Vật lý trị liệu',
93+
'Chuyên viên Dinh dưỡng', 'Quản lý Y tế'
8894
],
8995
Engineering: [
90-
'Civil Engineer', 'Mechanical Engineer', 'Electrical Engineer', 'Industrial Engineer',
91-
'Automation Engineer', 'Robotics Engineer', 'Environmental Engineer', 'Architect',
92-
'Chemical Engineer', 'Aerospace Engineer', 'Biomedical Engineer', 'Quality Engineer',
93-
'Process Engineer', 'Mechatronics Engineer', 'Energy Engineer', 'Materials Engineer'
96+
'Kỹ sư Xây dựng', 'Kỹ sư Cơ khí', 'Kỹ sư Điện', 'Kỹ sư Công nghiệp',
97+
'Kỹ sư Tự động hóa', 'Kiến trúc sư', 'Kỹ sư Hóa học',
98+
'Kỹ sư Môi trường', 'Kỹ sư Năng lượng'
9499
],
95100
Legal: [
96-
'Legal Assistant', 'Paralegal', 'Compliance Officer', 'Legal Consultant',
97-
'Lawyer', 'Legal Advisor', 'Contract Manager', 'IP Specialist', 'Compliance Manager'
101+
'Luật sư', 'Trợ lý Pháp lý', 'Chuyên viên Tuân thủ',
102+
'Tư vấn Pháp lý', 'Chuyên viên Hợp đồng'
98103
],
99104
Hospitality: [
100-
'Hotel Manager', 'Tour Guide', 'Chef', 'Restaurant Manager',
101-
'Travel Consultant', 'Event Coordinator', 'Resort Manager', 'Event Manager',
102-
'Bartender', 'Barista', 'Sommelier'
105+
'Quản lý Khách sạn', 'Hướng dẫn viên Du lịch', 'Đầu bếp',
106+
'Quản lý Nhà hàng', 'Tư vấn Du lịch', 'Điều phối Sự kiện'
103107
],
104108
Logistics: [
105-
'Supply Chain Analyst', 'Logistics Coordinator', 'Warehouse Manager', 'Operations Planner',
106-
'Customs Specialist', 'Demand Planner', 'Fleet Supervisor', 'Import Export Coordinator'
109+
'Chuyên viên Chuỗi cung ứng', 'Điều phối Logistics',
110+
'Quản lý Kho', 'Chuyên viên Hải quan', 'Quản lý Vận tải'
107111
],
108112
Media: [
109-
'Journalist', 'Video Editor', 'Photographer', 'Media Producer',
110-
'Content Strategist', 'Podcast Producer', 'Animator', 'Scriptwriter',
111-
'Social Media Producer', 'Sound Designer', 'Media Planner',
112-
'Editor', 'Reporter', 'TV Host', 'Director', 'Cameraman', 'PR Specialist', 'Advertising Specialist',
113-
'Program Producer', 'Video Producer', 'Audio Producer', 'Image Producer', 'Press Producer', 'Film Producer',
114-
'Game Producer', 'Animation Producer', 'Interactive Producer', 'Brand Producer'
113+
'Nhà báo', 'Biên tập viên Video', 'Nhiếp ảnh gia',
114+
'Nhà sản xuất Truyền thông', 'Chuyên gia Nội dung',
115+
'Nhà sản xuất Podcast', 'Họa sĩ Hoạt hình', 'Biên kịch',
116+
'Chuyên gia PR', 'Quản lý Truyền thông Xã hội'
115117
],
116118
Government: [
117-
'Policy Analyst', 'Public Relations Officer', 'Civil Servant',
118-
'Diplomat', 'Urban Planner', 'Regulatory Affairs Specialist', 'Public Policy Advisor'
119+
'Chuyên viên Chính sách', 'Công chức',
120+
'Nhà Ngoại giao', 'Quy hoạch Đô thị'
119121
],
120122
Science: [
121-
'Research Assistant', 'Lab Researcher', 'Biologist', 'Chemist',
122-
'Physicist', 'Environmental Scientist', 'Food Scientist', 'Biochemist',
123-
'Geneticist', 'Geologist', 'Meteorologist', 'Epidemiologist', 'Microbiologist'
123+
'Nhà Nghiên cứu Khoa học',
124+
'Kỹ thuật viên Phòng thí nghiệm',
125+
'Nhà Khoa học Môi trường',
126+
'Nhà Khoa học Thực phẩm'
124127
],
125128
Trades: [
126-
'Electrician', 'Mechanic', 'Plumber', 'Carpenter',
127-
'Welder', 'Technician', 'HVAC Technician', 'Painter',
128-
'Machinist', 'Auto Technician'
129+
'Thợ Điện', 'Thợ Cơ khí', 'Thợ Sửa ống nước', 'Thợ Mộc',
130+
'Thợ Hàn', 'Kỹ thuật viên', 'Thợ Sơn'
129131
],
130132
Agriculture: [
131-
'Agronomist', 'Farm Manager', 'Food Technologist', 'Veterinary Assistant',
132-
'Aquaculture Specialist', 'Greenhouse Technician', 'Soil Scientist',
133-
'Food Safety Specialist', 'Agricultural Engineer', 'Agribusiness Specialist'
133+
'Kỹ sư Nông nghiệp', 'Quản lý Trang trại',
134+
'Chuyên gia Công nghệ Thực phẩm', 'Trợ lý Thú y',
135+
'Chuyên viên An toàn Thực phẩm'
134136
],
135137
RealEstate: [
136-
'Real Estate Agent', 'Property Manager', 'Real Estate Analyst', 'Leasing Consultant',
137-
'Property Valuer', 'Real Estate Broker'
138+
'Môi giới Bất động sản', 'Quản lý Tài sản',
139+
'Chuyên viên Phân tích Bất động sản', 'Tư vấn Cho thuê'
138140
],
139141
Retail: [
140-
'Retail Manager', 'Merchandiser', 'Store Supervisor', 'Inventory Specialist',
141-
'Category Manager', 'Buyer', 'E-commerce Merchandiser'
142+
'Quản lý Bán lẻ', 'Chuyên viên Hàng hóa',
143+
'Giám sát Cửa hàng', 'Quản lý Tồn kho', 'Quản lý Thương mại điện tử'
142144
],
143145
Beauty: [
144-
'Makeup Artist', 'Hair Stylist', 'Skincare Specialist', 'Spa Therapist',
145-
'Nail Technician', 'Cosmetologist', 'Esthetician'
146+
'Chuyên viên Trang điểm', 'Nhà Tạo mẫu Tóc',
147+
'Chuyên gia Chăm sóc Da', 'Nhân viên Spa'
146148
],
147149
Sports: [
148-
'Coach', 'Fitness Trainer', 'Sports Analyst', 'Physiotherapist (Sports)',
149-
'Sports Physiologist', 'Strength Coach', 'Sports Nutritionist'
150+
'Huấn luyện viên', 'Chuyên gia Thể dục',
151+
'Chuyên viên Phân tích Thể thao', 'Chuyền gia Dinh dưỡng Thể thao'
150152
],
151153
Transportation: [
152-
'Logistics Driver', 'Fleet Manager', 'Transport Planner', 'Pilot Assistant',
153-
'Air Traffic Controller', 'Flight Dispatcher', 'Maritime Officer', 'Rail Operations Manager'
154+
'Quản lý Vận tải', 'Chuyên gia Quy hoạch Giao thông',
155+
'Kiểm soát viên Không lưu', 'Nhân viên Điều hành Bay'
154156
],
155157
Construction: [
156-
'Construction Manager', 'Site Engineer', 'Surveyor', 'Safety Officer',
157-
'Quantity Surveyor', 'Structural Engineer', 'Construction Planner'
158+
'Quản lý Xây dựng', 'Kỹ sư Công trường',
159+
'Khảo sát viên', 'Chuyên viên An toàn Xây dựng', 'Kỹ sư Kết cấu'
158160
]
159161
};
160162

161-
const SPECIALIZED_BLUEPRINTS = [
162-
{
163-
category: 'Technology',
164-
domains: [
165-
'Web', 'Mobile', 'Cloud', 'DevOps', 'Security', 'AI', 'Machine Learning',
166-
'Data', 'Embedded Systems', 'Robotics', 'IoT', 'Blockchain', 'AR/VR',
167-
'Game', 'Platform', 'Infrastructure', 'Network', 'Automation', 'QA',
168-
'Computer Vision', 'NLP'
169-
],
170-
roles: ['Engineer', 'Developer', 'Architect', 'Analyst', 'Specialist', 'Researcher', 'Scientist']
171-
},
172-
{
173-
category: 'Engineering',
174-
domains: [
175-
'Mechanical', 'Electrical', 'Electronics', 'Automation', 'Robotics',
176-
'Mechatronics', 'Civil', 'Structural', 'Geotechnical', 'HVAC',
177-
'Industrial', 'Chemical', 'Materials', 'Aerospace', 'Marine',
178-
'Biomedical', 'Energy Systems', 'Power Systems', 'Control Systems', 'Optical'
179-
],
180-
roles: ['Engineer', 'Technician', 'Consultant', 'Manager', 'Inspector', 'Planner']
181-
},
182-
{
183-
category: 'Science',
184-
domains: [
185-
'Physics', 'Chemistry', 'Biology', 'Biochemistry', 'Genetics', 'Microbiology',
186-
'Neuroscience', 'Environmental Science', 'Food Science', 'Materials Science',
187-
'Geology', 'Meteorology', 'Oceanography', 'Astronomy', 'Pharmacology',
188-
'Nanotechnology', 'Biotechnology', 'Quantum Science', 'Ecology', 'Zoology'
189-
],
190-
roles: ['Scientist', 'Researcher', 'Analyst', 'Lab Technician', 'Associate']
191-
},
192-
{
193-
category: 'Education',
194-
domains: [
195-
'Math', 'Physics', 'Chemistry', 'Biology', 'Computer Science', 'English',
196-
'Literature', 'History', 'Geography', 'Economics', 'Business', 'Marketing',
197-
'Design', 'Art', 'Music', 'Psychology', 'Data Science', 'AI', 'Robotics',
198-
'Electronics', 'Automation', 'Finance', 'Law', 'Healthcare', 'Philosophy'
199-
],
200-
roles: ['Teacher', 'Lecturer', 'Professor', 'Tutor', 'Curriculum Designer', 'Instructor']
201-
},
202-
{
203-
category: 'Healthcare',
204-
domains: [
205-
'Cardiology', 'Oncology', 'Pediatrics', 'Neurology', 'Radiology', 'Dermatology',
206-
'Orthopedics', 'Pharmacy', 'Dentistry', 'Mental Health', 'Rehabilitation',
207-
'Nutrition', 'Public Health', 'Clinical Lab', 'Emergency', 'Anesthesia',
208-
'Ophthalmology', 'Pathology'
209-
],
210-
roles: ['Specialist', 'Nurse', 'Technician', 'Therapist', 'Researcher', 'Assistant']
211-
},
212-
{
213-
category: 'Business',
214-
domains: [
215-
'Strategy', 'Operations', 'HR', 'Supply Chain', 'Retail', 'E-commerce',
216-
'Product', 'Project', 'Procurement', 'Risk', 'Compliance', 'Customer Success',
217-
'Business Development', 'Sales', 'Partnerships', 'Analytics', 'Consulting'
218-
],
219-
roles: ['Manager', 'Analyst', 'Consultant', 'Specialist', 'Director', 'Coordinator']
220-
},
221-
{
222-
category: 'Marketing',
223-
domains: [
224-
'Brand', 'Growth', 'Performance', 'Content', 'SEO', 'Social Media',
225-
'CRM', 'PR', 'Market Research', 'Community', 'Influencer', 'Product Marketing'
226-
],
227-
roles: ['Specialist', 'Manager', 'Analyst', 'Strategist', 'Lead']
228-
},
229-
{
230-
category: 'Finance',
231-
domains: [
232-
'Accounting', 'Audit', 'Tax', 'Corporate Finance', 'Investment', 'Risk',
233-
'Insurance', 'Treasury', 'Banking', 'FinTech', 'Wealth', 'Credit'
234-
],
235-
roles: ['Analyst', 'Manager', 'Advisor', 'Specialist', 'Controller']
236-
},
237-
{
238-
category: 'Legal',
239-
domains: [
240-
'Corporate', 'IP', 'Compliance', 'Tax', 'Labor', 'International',
241-
'Data Privacy', 'Regulatory', 'Contracts', 'Real Estate'
242-
],
243-
roles: ['Lawyer', 'Advisor', 'Specialist', 'Counsel', 'Analyst']
244-
},
245-
{
246-
category: 'Media',
247-
domains: [
248-
'Video', 'Film', 'Animation', 'Audio', 'Journalism', 'Podcast',
249-
'Photography', 'Broadcast', 'Digital Media', 'Gaming', 'Sports Media'
250-
],
251-
roles: ['Producer', 'Editor', 'Designer', 'Reporter', 'Director', 'Strategist']
252-
},
253-
{
254-
category: 'Logistics',
255-
domains: [
256-
'Transportation', 'Warehouse', 'Inventory', 'Import/Export', 'Fleet',
257-
'Last-mile', 'Cold Chain', 'Distribution', 'Demand Planning'
258-
],
259-
roles: ['Manager', 'Planner', 'Coordinator', 'Analyst', 'Supervisor']
260-
},
261-
{
262-
category: 'Construction',
263-
domains: [
264-
'Structural', 'MEP', 'Civil', 'Geotechnical', 'HVAC', 'Safety',
265-
'Project', 'Site', 'Quality'
266-
],
267-
roles: ['Engineer', 'Manager', 'Supervisor', 'Planner', 'Inspector']
268-
},
269-
{
270-
category: 'Agriculture',
271-
domains: [
272-
'Crop', 'Livestock', 'Aquaculture', 'AgriTech', 'Soil', 'Food Safety',
273-
'Supply Chain', 'Greenhouse', 'Seed', 'Irrigation'
274-
],
275-
roles: ['Specialist', 'Engineer', 'Technician', 'Manager', 'Consultant']
276-
},
277-
{
278-
category: 'Energy',
279-
domains: [
280-
'Renewable', 'Solar', 'Wind', 'Hydro', 'Grid', 'Battery',
281-
'Oil & Gas', 'Nuclear', 'Energy Storage', 'Power Generation'
282-
],
283-
roles: ['Engineer', 'Analyst', 'Technician', 'Consultant', 'Manager']
284-
},
285-
{
286-
category: 'Research',
287-
domains: [
288-
'AI Safety', 'Quantum Computing', 'Robotics', 'Materials', 'Biotech',
289-
'Energy Systems', 'Climate', 'Neuroscience', 'Social Science', 'Economics',
290-
'Education', 'Healthcare', 'Behavioral Science'
291-
],
292-
roles: ['Researcher', 'Scientist', 'Fellow', 'Associate', 'Lab Director']
293-
}
294-
];
295-
296-
function generateSpecializedCareers() {
297-
const items = [];
298-
for (const group of SPECIALIZED_BLUEPRINTS) {
299-
for (const domain of group.domains) {
300-
for (const role of group.roles) {
301-
items.push({
302-
name: `${domain} ${role}`.replace(/\s+/g, ' ').trim(),
303-
category: group.category
304-
});
305-
}
306-
}
307-
}
308-
return items;
309-
}
310-
163+
/**
164+
* Build career records from CAREER_LIBRARY only
165+
* Simplified to keep only general careers (~250 total)
166+
*/
311167
function buildCareerRecords() {
312168
const records = [];
313169
const seen = new Set();
@@ -320,35 +176,19 @@ function buildCareerRecords() {
320176
name,
321177
category,
322178
required_skills: CATEGORY_SKILLS[category] || ['communication', 'analysis'],
323-
salary_range: "Thoa thuan",
179+
salary_range: "Thỏa thuận",
324180
job_outlook: "good",
325-
description: `${name} thuoc nhom ${category}`
181+
description: `${name} thuộc nhóm ${category}`
326182
});
327183
}
328184

185+
// Only use CAREER_LIBRARY - no specialized blueprints
329186
for (const [category, names] of Object.entries(CAREER_LIBRARY)) {
330187
for (const name of names) {
331188
pushRecord(name, category);
332189
}
333190
}
334191

335-
const specialized = generateSpecializedCareers();
336-
for (const item of specialized) {
337-
pushRecord(item.name, item.category);
338-
}
339-
340-
if (records.length < 1000) {
341-
const levels = ['Junior', 'Senior', 'Lead', 'Principal'];
342-
const snapshot = [...records];
343-
let idx = 0;
344-
while (records.length < 1000 && idx < snapshot.length * levels.length) {
345-
const base = snapshot[idx % snapshot.length];
346-
const level = levels[idx % levels.length];
347-
pushRecord(`${level} ${base.name}`, base.category);
348-
idx += 1;
349-
}
350-
}
351-
352192
return records;
353193
}
354194

0 commit comments

Comments
 (0)