Modül Planlama v4 - Final

Career Modülü

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

career_ prefix career teması mail entegrasyonu

Basit Anlatım (Herkes İçin)

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

3 Kullanıcı Tipi:

İş Veren
  • • İş ilanı yayınlar
  • • Başvuruları görür
  • • Adaylara dönüş yapar
İş Arayan
  • • CV oluşturur
  • • İlanlara başvurur
  • • Durumu e-posta ile öğrenir
Site Yöneticisi
  • • Tüm ilanları yönetir
  • • Kategorileri düzenler
  • • Sistemi kontrol eder

Gizlilik & İletişim

  • Telefon numarası sadece başvurduğu firmaya görünür
  • CV'ler sadece başvuru yapıldığında paylaşılır
  • İletişim site dışında: Telefon veya e-posta ile
  • Durum değişikliklerinde otomatik e-posta bildirimi

Teknik Detaylar

İsimlendirme: career_ Prefix

Tablolar:
  • career_jobs
  • career_categories
  • career_resumes
  • career_applications
Modeller:
  • CareerJob
  • CareerCategory
  • CareerResume
  • CareerApplication

Veritabanı Şeması

career_jobs
career_job_id (PK)
career_category_id (FK)
user_id (FK - ilan sahibi)
title (json)
slug (json)
body (json - iş açıklaması)
company_name VARCHAR(255)
location (json)
work_type ENUM('full_time','part_time','remote','hybrid')
experience_level ENUM('entry','mid','senior','any')
salary_min, salary_max INT (nullable)
show_salary BOOL
deadline DATE (nullable)
contact_email, contact_phone
is_featured, views_count
is_active, timestamps, soft_deletes
career_categories
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
// Media Collection:
→ 'icon' (sektör görseli/ikonu)
career_resumes
career_resume_id (PK)
user_id (FK)
title VARCHAR(255)
summary (json)
experience (json) - [{company, position, dates}]
education (json) - [{school, dept, year}]
skills (json) - ["PHP", "Laravel"]
languages (json) - [{lang, level}]
phone VARCHAR(20) - GİZLİ
visibility ENUM('private','applied_only','public')
is_primary, is_active
timestamps, soft_deletes
// Media Collection:
→ 'cv_file' (PDF)
→ 'photo' (profil fotoğrafı)
career_applications
career_application_id (PK)
career_job_id (FK)
user_id (FK - başvuran)
career_resume_id (FK - nullable)
cover_letter TEXT
status ENUM:
'pending','viewed','shortlisted',
'interview','rejected','hired'
employer_notes TEXT (gizli)
viewed_at, responded_at
timestamps
UNIQUE: user_id + career_job_id

Career Teması

Frontend tamamen bağımsız tema olarak çalışacak: resources/views/themes/career/

resources/views/themes/career/
├── layouts/
│   ├── app.blade.php          ← Ana layout
│   ├── header.blade.php       ← Navbar
│   └── footer.blade.php       ← Footer
├── homepage.blade.php         ← Ana sayfa (öne çıkan ilanlar)
├── jobs/
│   ├── index.blade.php        ← İlan listesi (filtreleme, arama)
│   ├── show.blade.php         ← İlan detay + başvuru butonu
│   └── category.blade.php     ← Kategoriye göre ilanlar
├── resume/
│   ├── index.blade.php        ← CV'lerim listesi
│   ├── create.blade.php       ← CV oluştur formu
│   ├── edit.blade.php         ← CV düzenle
│   └── preview.blade.php      ← CV önizleme
├── applications/
│   ├── index.blade.php        ← Başvurularım listesi
│   └── show.blade.php         ← Başvuru detayı
├── employer/
│   ├── jobs.blade.php         ← Firma: İlanlarım
│   ├── job-create.blade.php   ← Firma: İlan oluştur
│   ├── applications.blade.php ← Firma: Gelen başvurular
│   └── application-show.blade.php ← Firma: Başvuru detay
├── components/
│   ├── job-card.blade.php     ← İlan kartı komponenti
│   ├── category-card.blade.php ← Kategori kartı (görselli)
│   ├── resume-form.blade.php  ← CV form adımları
│   └── status-badge.blade.php ← Başvuru durum badge'i
└── auth/
    ├── login.blade.php        ← Giriş (varsa override)
    └── register.blade.php     ← Kayıt (varsa override)

Mail Entegrasyonu (Mail Modülü ile)

Mevcut Modules/Mail yapısına entegre olacak yeni mail sınıfları:

Adaya Giden Mailler
  • 1
    ApplicationSubmittedMail
    Başvurunuz alındı onayı
  • 2
    ApplicationViewedMail
    Başvurunuz görüntülendi
  • 3
    ApplicationInterviewMail
    Mülakata davet edildiniz
  • 4
    ApplicationRejectedMail
    Başvurunuz değerlendirildi (red)
  • 5
    ApplicationHiredMail
    Tebrikler! İşe alındınız
İş Verene Giden Mailler
  • 1
    NewApplicationMail
    Yeni başvuru geldi bildirimi
Mail Service Kullanımı:
// CareerMailService.php
$this->sendApplicationSubmitted($application);
$this->sendNewApplication($application);
$this->sendStatusChanged($application, $oldStatus);
Mail Tetikleme Noktaları
CareerApplicationObserver::created() → ApplicationSubmittedMail + NewApplicationMail
CareerApplicationObserver::updated() → status değişirse ilgili mail gönder

Modül Dosya Yapısı

Modules/Career/
├── App/
│   ├── Models/
│   │   ├── CareerJob.php
│   │   ├── CareerCategory.php      ← HasMedia (sektör görseli)
│   │   ├── CareerResume.php        ← HasMedia (CV PDF, foto)
│   │   └── CareerApplication.php
│   ├── Http/
│   │   ├── Controllers/Front/
│   │   │   ├── CareerJobController.php
│   │   │   ├── CareerResumeController.php
│   │   │   ├── CareerApplicationController.php
│   │   │   └── EmployerController.php
│   │   └── Livewire/Admin/
│   │       ├── CareerJobComponent.php
│   │       ├── CareerCategoryComponent.php
│   │       ├── CareerResumeComponent.php
│   │       └── CareerApplicationComponent.php
│   ├── Mail/                        ← YENİ: Mail sınıfları
│   │   ├── ApplicationSubmittedMail.php
│   │   ├── ApplicationViewedMail.php
│   │   ├── ApplicationInterviewMail.php
│   │   ├── ApplicationRejectedMail.php
│   │   ├── ApplicationHiredMail.php
│   │   └── NewApplicationMail.php
│   ├── Services/
│   │   ├── CareerJobService.php
│   │   ├── CareerResumeService.php
│   │   ├── CareerApplicationService.php
│   │   └── CareerMailService.php    ← YENİ: Mail gönderim servisi
│   └── Observers/
│       └── CareerApplicationObserver.php ← Mail tetikleme
├── 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/...
│   └── emails/                      ← Mail template'leri
│       ├── application-submitted.blade.php
│       ├── application-viewed.blade.php
│       ├── application-interview.blade.php
│       ├── application-rejected.blade.php
│       ├── application-hired.blade.php
│       └── new-application.blade.php
└── routes/
    ├── web.php
    └── admin.php

URL Yapısı

Frontend (Herkes)
GET /kariyer
GET /kariyer/{slug}
GET /kariyer/kategori/{slug}
Auth Gerektiren
POST /kariyer/{id}/basvur
GET /hesabim/cv
GET /hesabim/cv/olustur
GET /hesabim/basvurularim
Admin Panel
GET /admin/career/jobs
GET /admin/career/categories
GET /admin/career/applications
GET /admin/career/resumes
İş Veren Paneli
GET /firma/ilanlarim
GET /firma/ilan-ekle
GET /firma/basvurular

TODO - Uygulama Adımları

FAZ 1 Temel Modül Oluşturma
FAZ 2 Yeni Tablolar (Migration Onayı Gerekli)
FAZ 3 Mail Entegrasyonu
FAZ 4 Admin Panel
FAZ 5 Career Teması (Frontend)
FAZ 6 Test & Tamamlama

Değişiklik Geçmişi

v3 → v4 (Final)
  • Sektör görseli: CareerCategory HasMedia
  • Career teması: resources/views/themes/career/
  • Mail entegrasyonu: 6 mail sınıfı
  • TODO listesi eklendi
v2 → v3
  • Mesajlaşma sistemi kaldırıldı
v1 → v2
  • career_ prefix standardı