Modül Planlama v3

Career Modülü

Mini İş İlanı & CV Yönetim Sistemi

Tüm tablolar career_ prefix'i ile

Basit Anlatım (Herkes İçin)

Ne yapıyoruz? Kariyer.net benzeri ama çok daha basit bir iş bulma sistemi. Her tenant (site) kendi kariyer sayfasına sahip olabilecek.

3 Kullanıcı Tipi:

İş Veren (Firma)
  • • İş ilanı yayınlar
  • • Başvuruları görür
  • • Adaylara dönüş yapar
İş Arayan
  • • CV oluşturur
  • • İlanlara başvurur
  • • Başvuru durumunu takip eder
Site Yöneticisi
  • • Tüm ilanları yönetir
  • • Kategorileri düzenler
  • • Sistemi kontrol eder

Gizlilik Nasıl Çalışacak?

  • İş arayan kişinin telefon numarası sadece başvurduğu firmaya görünür
  • CV'ler herkese açık olmaz, sadece başvuru yapıldığında paylaşılır
  • Firma iletişim bilgileri ilana dahil edilir (opsiyonel gizleme)
  • İletişim site dışında: Telefon veya e-posta ile

Teknik Detaylar (Geliştiriciler İçin)

İsimlendirme Kuralı: career_ Prefix

Tablolar:
  • career_jobs
  • career_categories
  • career_resumes
  • career_applications
Primary Key'ler:
  • career_job_id
  • career_category_id
  • career_resume_id
  • career_application_id

1. module.sh ile Temel Modül Oluşturma

# Portfolio modülünü Career olarak klonla
./module.sh
# Seçenek 1 → "Career" yaz

# Sonuç: Modules/Career/ oluşur
# Otomatik dönüşümler:
#   portfolio_id      → career_id
#   portfolios        → careers
#   portfolio_category_id → career_category_id
#   portfolio_categories  → career_categories

2. Veritabanı Şeması

career_jobs
// Portfolio'dan otomatik gelir (rename):
career_job_id (PK)
career_category_id (FK)
title (json - çoklu dil)
slug (json)
body (json - iş açıklaması)
is_active
// Yeni eklenecekler:
company_name VARCHAR(255)
location (json)
work_type ENUM('full_time','part_time','remote','hybrid')
experience_level ENUM('entry','mid','senior','any')
salary_min INT (nullable)
salary_max INT (nullable)
show_salary BOOL default true
deadline DATE (nullable)
contact_email VARCHAR(255)
contact_phone VARCHAR(20) (nullable)
user_id BIGINT (FK - ilan sahibi)
is_featured BOOL default false
views_count INT default 0
career_resumes
career_resume_id (PK)
user_id (FK - CV sahibi)
title VARCHAR(255) - "Frontend Developer CV"
summary (json - özet, çoklu dil)
experience (json)
[{company, position, start_date, end_date, description}]
education (json)
[{school, department, degree, year}]
skills (json) - ["PHP", "Laravel", "Vue"]
languages (json)
[{language, level}]
phone VARCHAR(20) - GİZLİ
visibility ENUM('private','applied_only','public')
is_primary BOOL default false
is_active BOOL default true
timestamps, soft_deletes
career_applications
career_application_id (PK)
career_job_id (FK)
user_id (FK - başvuran)
career_resume_id (FK - nullable)
cover_letter TEXT (ön yazı)
status ENUM:
'pending' - Beklemede
'viewed' - Görüldü
'shortlisted' - Ön eleme geçti
'interview' - Mülakata çağrıldı
'rejected' - Reddedildi
'hired' - İşe alındı
employer_notes TEXT (gizli)
viewed_at TIMESTAMP (nullable)
responded_at TIMESTAMP (nullable)
timestamps
UNIQUE: user_id + career_job_id
career_categories
// Portfolio'dan otomatik gelir:
career_category_id (PK)
title (json - "Yazılım", "Pazarlama")
slug (json)
description (json)
parent_id (nested için)
order_column
is_active
timestamps, soft_deletes

3. Model & Class İsimleri

Tablo Model Primary Key Livewire Component
career_jobs CareerJob career_job_id CareerJobComponent
career_categories CareerCategory career_category_id CareerCategoryComponent
career_resumes CareerResume career_resume_id CareerResumeComponent
career_applications CareerApplication career_application_id CareerApplicationComponent

4. Modül Dosya Yapısı

Modules/Career/
├── App/
│   ├── Models/
│   │   ├── CareerJob.php           ← İş ilanları
│   │   ├── CareerCategory.php      ← Sektör kategorileri
│   │   ├── CareerResume.php        ← CV'ler
│   │   └── CareerApplication.php   ← Başvurular
│   ├── Http/
│   │   ├── Controllers/
│   │   │   └── Front/
│   │   │       └── CareerController.php
│   │   └── Livewire/Admin/
│   │       ├── CareerJobComponent.php
│   │       ├── CareerJobManageComponent.php
│   │       ├── CareerCategoryComponent.php
│   │       ├── CareerCategoryManageComponent.php
│   │       ├── CareerResumeComponent.php
│   │       └── CareerApplicationComponent.php
│   ├── Services/
│   │   ├── CareerJobService.php
│   │   ├── CareerCategoryService.php
│   │   ├── CareerResumeService.php
│   │   └── CareerApplicationService.php
│   └── Repositories/
│       ├── CareerJobRepository.php
│       ├── CareerCategoryRepository.php
│       ├── CareerResumeRepository.php
│       └── CareerApplicationRepository.php
├── database/migrations/tenant/
│   ├── xxxx_create_career_categories_table.php
│   ├── xxxx_create_career_jobs_table.php
│   ├── xxxx_create_career_resumes_table.php
│   └── xxxx_create_career_applications_table.php
├── resources/views/
│   ├── admin/livewire/
│   │   ├── career-job-component.blade.php
│   │   ├── career-job-manage-component.blade.php
│   │   ├── career-category-component.blade.php
│   │   ├── career-resume-component.blade.php
│   │   └── career-application-component.blade.php
│   └── front/
│       ├── index.blade.php         ← İlan listesi
│       ├── show.blade.php          ← İlan detay
│       ├── apply.blade.php         ← Başvuru formu
│       ├── my-applications.blade.php
│       └── resume/
│           ├── index.blade.php
│           ├── create.blade.php
│           └── edit.blade.php
└── routes/
    ├── web.php
    └── admin.php

5. Model İlişkileri

CareerJob
belongsTo → CareerCategory
belongsTo → User (ilan sahibi)
hasMany   → CareerApplication
CareerResume
belongsTo → User (CV sahibi)
hasMany   → CareerApplication
hasMedia  → 'cv_file' (PDF)
CareerApplication
belongsTo → CareerJob
belongsTo → User (başvuran)
belongsTo → CareerResume (nullable)
User (mevcut)
hasMany → CareerJob (yayınladıkları)
hasMany → CareerResume (CV'leri)
hasMany → CareerApplication (başvuruları)

6. URL Yapısı

Frontend (Herkes)
GET /kariyer → İlan listesi
GET /kariyer/{slug} → İlan detay
GET /kariyer/kategori/{slug} → Kategoriye göre
Auth Gerektiren
POST /kariyer/{id}/basvur → Başvuru yap
GET /hesabim/cv → CV'lerim
GET /hesabim/cv/olustur → CV oluştur
GET /hesabim/cv/{id}/duzenle → CV düzenle
GET /hesabim/basvurularim → Başvurularım
Admin Panel
GET /admin/career/jobs → İlan yönetimi
GET /admin/career/categories → Kategoriler
GET /admin/career/applications → Tüm başvurular
GET /admin/career/resumes → CV havuzu
İş Veren Paneli
GET /firma/ilanlarim → Kendi ilanları
GET /firma/ilan-ekle → Yeni ilan
GET /firma/basvurular → Gelen başvurular
GET /firma/basvuru/{id} → Başvuru detay

Uygulama Adımları

1
module.sh ile Career Modülü Oluştur
Portfolio → Career klonlama
./module.sh → 1 → "Career"
2
Tablo ve Model İsimlerini Düzelt
careers → career_jobs, Career → CareerJob
3
CareerJob Migration'a Yeni Alanları Ekle
company_name, work_type, salary, deadline vb.
4
CareerResume Model ve Migration Oluştur
User'a bağlı, gizlilik ayarlı CV sistemi
5
CareerApplication Model ve Migration Oluştur
Job-User-Resume bağlantısı, durum takibi
6
Admin Livewire Componentlerini Güncelle
CareerJob, CareerResume, CareerApplication yönetimi
7
Frontend Sayfalarını Oluştur
İlan listesi, CV oluşturma, başvuru sistemi

Değişiklik Geçmişi

v2 → v3
  • Mesajlaşma sistemi kaldırıldı (gereksiz karmaşıklık)
  • İletişim site dışında: Başvuru sonrası telefon/e-posta ile
v1 → v2
  • Tüm tablolar career_ prefix'i ile
  • Primary key'ler: career_job_id, career_category_id, career_resume_id, career_application_id
  • Model isimleri: CareerJob, CareerCategory, CareerResume, CareerApplication