Modül Planlama

Career Modülü

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

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
  • • Sistemı 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)
  • Mesajlaşma sistemi ile güvenli iletişim

Teknik Detaylar (Geliştiriciler İçin)

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
# - Job (Portfolio yerine) tablosu hazır
# - JobCategory (PortfolioCategory yerine) tablosu hazır

2. Veritabanı Şeması

careers (Jobs)
// Portfolio'dan otomatik gelir:
career_id (PK)
career_category_id (FK)
title (json - çoklu dil)
slug (json)
body (json - iş açıklaması)
is_active
// Yeni eklenecekler:
company_name
location (json)
work_type ENUM('full_time','part_time','remote','hybrid')
experience_level ENUM('entry','mid','senior')
salary_min, salary_max (nullable)
show_salary BOOL
deadline DATE
contact_email
contact_phone (nullable)
user_id (FK - ilan sahibi)
resumes (CV'ler)
resume_id (PK)
user_id (FK - CV sahibi)
title (CV başlığı - "Frontend Developer CV")
summary (json - özet)
experience (json - [{firma, pozisyon, tarih}])
education (json - [{okul, bölüm, tarih}])
skills (json - ["PHP", "Laravel"])
languages (json - [{dil, seviye}])
phone (gizli - sadece başvurulan firmaya)
visibility ENUM('private','public','applied_only')
is_primary BOOL (varsayılan CV)
is_active
// Media: PDF dosyası için
applications (Başvurular)
application_id (PK)
career_id (FK - hangi ilana)
user_id (FK - kim başvurdu)
resume_id (FK - hangi CV ile)
cover_letter (text - ön yazı)
status ENUM('pending','viewed','interview','rejected','hired')
employer_notes (text - firma notları, gizli)
viewed_at (timestamp)
responded_at (timestamp)
timestamps
// Unique: user_id + career_id
career_categories (Sektörler)
// Portfolio'dan otomatik gelir:
category_id (PK)
title (json - "Yazılım", "Pazarlama")
slug (json)
description (json)
parent_id (nested set için)
order_column
is_active

3. Modül Dosya Yapısı

Modules/Career/
├── App/
│   ├── Models/
│   │   ├── Career.php          ← Job ilanı (Portfolio'dan)
│   │   ├── CareerCategory.php  ← Sektör kategorileri
│   │   ├── Resume.php          ← YENİ: CV modeli
│   │   └── Application.php     ← YENİ: Başvuru modeli
│   ├── Http/
│   │   ├── Controllers/
│   │   │   └── Front/
│   │   │       ├── CareerController.php      ← İlan listeleme
│   │   │       ├── ResumeController.php      ← CV yönetimi
│   │   │       └── ApplicationController.php ← Başvuru işlemleri
│   │   └── Livewire/
│   │       └── Admin/
│   │           ├── CareerComponent.php
│   │           ├── CareerManageComponent.php
│   │           ├── ResumeComponent.php       ← Admin CV listesi
│   │           └── ApplicationComponent.php  ← Admin başvuru yönetimi
│   └── Services/
│       ├── CareerService.php
│       ├── ResumeService.php     ← YENİ
│       └── ApplicationService.php ← YENİ
├── database/
│   └── migrations/
│       └── tenant/
│           ├── xxx_create_careers_table.php
│           ├── xxx_create_career_categories_table.php
│           ├── xxx_create_resumes_table.php       ← YENİ
│           └── xxx_create_applications_table.php  ← YENİ
├── resources/views/
│   ├── front/
│   │   ├── index.blade.php      ← İlan listesi
│   │   ├── show.blade.php       ← İlan detay + başvur butonu
│   │   ├── my-applications.blade.php ← Başvurularım
│   │   └── resume/
│   │       ├── index.blade.php  ← CV'lerim
│   │       ├── create.blade.php ← CV oluştur
│   │       └── edit.blade.php   ← CV düzenle
│   └── admin/livewire/
│       ├── career-component.blade.php
│       ├── career-manage-component.blade.php
│       ├── resume-component.blade.php
│       └── application-component.blade.php
└── routes/
    ├── web.php   ← Frontend routes
    └── admin.php ← Admin routes

4. Gizlilik Mekanizması

Resume Model - Telefon Erişimi
// Resume.php
public function getPhoneAttribute($value)
{
    // Sadece CV sahibi veya başvurulan firma görebilir
    $user = auth()->user();

    if (!$user) return null;

    // CV sahibi kendisi görür
    if ($user->id === $this->user_id) return $value;

    // İş veren sadece başvuru yapılmışsa görür
    $hasApplication = Application::where('resume_id', $this->resume_id)
        ->whereHas('career', fn($q) => $q->where('user_id', $user->id))
        ->exists();

    return $hasApplication ? $value : null;
}
CV Görünürlük Seçenekleri
  • private - Sadece ben görürüm, başvuru yaparken paylaşırım
  • applied_only - Sadece başvurduğum firmalar görür (Önerilen)
  • public - Tüm firmalar CV havuzunda görebilir

5. URL Yapısı

Frontend (Ziyaretçi/İş Arayan)
GET /kariyer → İlan listesi
GET /kariyer/{slug} → İlan detay
GET /kariyer/kategori/{slug} → Kategoriye göre
Auth gerektiren:
GET /hesabim/cv → CV'lerim
GET /hesabim/cv/olustur → CV oluştur
POST /kariyer/{id}/basvur → Başvuru yap
GET /hesabim/basvurularim → Başvurularım
Admin Panel
GET /admin/career → İlan yönetimi
GET /admin/career/categories → Kategoriler
GET /admin/career/applications → Tüm başvurular
GET /admin/career/resumes → CV havuzu (public olanlar)
İş veren paneli (Firma kullanıcısı):
GET /firma/ilanlarim → Kendi ilanları
GET /firma/basvurular → İlanlarına başvurular

Uygulama Adımları

1
module.sh ile Career Modülü Oluştur
Portfolio → Career klonlama, otomatik isim değişimi
./module.sh → 1 → "Career"
2
Career Modeline Yeni Alanları Ekle
company_name, location, work_type, salary, deadline vb.
3
Resume (CV) Model ve Migration Oluştur
User'a bağlı, gizlilik ayarlı CV sistemi
4
Application (Başvuru) Model ve Migration Oluştur
Job-User-Resume bağlantısı, durum takibi
5
Admin Livewire Componentlerini Güncelle
İlan yönetimi, başvuru görüntüleme, CV havuzu
6
Frontend Sayfalarını Oluştur
İlan listesi, detay, CV oluşturma, başvurularım
7
Gizlilik Mekanizmalarını Uygula
Telefon gizleme, CV görünürlük, erişim kontrolü

Kullanım Senaryoları

Senaryo 1: Bağımsız Kariyer Sitesi

Tenant olarak sadece kariyer sitesi çalıştırma (kariyer.example.com)

  • • Birden fazla firma ilan verebilir
  • • Firma hesabı açılır, ilan yetkileri verilir
  • • Site komisyon alabilir veya ücretsiz olabilir
Senaryo 2: Firma Kariyer Sayfası

Mevcut bir tenant sitesine "Kariyer" sayfası ekleme

  • • Tek firma, kendi ilanları
  • • /kariyer sayfası aktif
  • • Basit başvuru formu yeterli

Önemli Notlar