Skip to content

Vardiya pazarı: post-it panosunda ücretli vardiya ilanları ve teklifler - #2

Draft
muratmuzaffer wants to merge 8 commits into
masterfrom
cursor/vardiya-pazari-4957
Draft

Vardiya pazarı: post-it panosunda ücretli vardiya ilanları ve teklifler#2
muratmuzaffer wants to merge 8 commits into
masterfrom
cursor/vardiya-pazari-4957

Conversation

@muratmuzaffer

@muratmuzaffer muratmuzaffer commented Aug 5, 2026

Copy link
Copy Markdown
Owner

Sürücülerin vardiyalarını bir taban fiyatla ilana koyduğu, diğer sürücülerin kendilerini seçip teklif verdiği yeni bir Vardiya Pazarı sayfası (/pazar) ekler. İlanlar mantar panoya iğnelenmiş post-it notlar olarak görünür.

vardiya-pazari-demo.mp4

Nasıl çalışıyor

  • İlan verme — Sürücü kendini seçer, o ayki çizelgesinden bir vardiyasını işaretler (çizelgede yoksa elle girer) ve bir taban fiyat belirler.
  • Teklif verme — Diğer sürücüler kendilerini seçip teklif verir. Teklif taban fiyatın altında olamaz; eşit olabilir. Kendi ilanına teklif verilemez, kapanmış ilana teklif verilemez.
  • Satışı kapatma — İlan sahibi bir teklifi kabul eder; ilan satıldı olur, panoda soluk bir “Satıldı” damgasıyla kalır. İlan sahibi ilanı panodan kaldırabilir.

Taban fiyat kuralı hem API'de hem de veritabanı trigger'ında ayrı ayrı korunuyor, böylece doğrudan veritabanına yazılsa bile kural geçersiz kılınamıyor.

Bu dal hiçbir mevcut dosyaya dokunmuyor

Bu depodaki master (3d8665b), yerel makinede yapılıp henüz push edilmemiş çalışmaları içermiyor — ortak mesai sayfası (/ortak), çoklu vardiya değişimi, iptal talebi/admin onayı akışı, mobil alt menü ve 00140017 migration'ları burada yok.

Bu yüzden özellik tamamen kendi dosyalarında tutuldu. Dal master'a göre yalnızca yeni dosya ekliyor, tek bir mevcut dosyayı bile değiştirmiyor:

A  apps/shifts/src/app/api/market/route.ts
A  apps/shifts/src/app/api/market/[id]/route.ts
A  apps/shifts/src/app/api/market/[id]/offers/route.ts
A  apps/shifts/src/app/pazar/page.tsx
A  apps/shifts/src/components/market-client.tsx
A  apps/shifts/src/components/market.module.css
A  apps/shifts/src/lib/market-types.ts
A  apps/shifts/src/lib/market-utils.ts
A  apps/shifts/src/lib/market-server.ts
A  apps/shifts/src/lib/local-market-store.ts
A  scripts/add-pazar-menu.mjs
A  supabase/migrations/0018_shift_market.sql

Bunu sağlamak için:

  • Pazar tipleri types.ts yerine yeni market-types.ts dosyasında
  • Post-it/mantar pano stilleri globals.css yerine market.module.css (CSS modülü) içinde
  • market-client.tsx artık AppShell'e nav prop'u geçmiyor, böylece menüsü merkezileştirilmiş AppShell sürümüyle de derleniyor
  • pazar/page.tsx, varsa değişimleri çizelgeye uygulayan fetchScheduleWithSwaps'i, yoksa fetchSchedule'ı otomatik seçiyor

Menü girişi ise node scripts/add-pazar-menu.mjs ile ekleniyor. Betik hangi menü yapısı olduğunu kendisi algılar: app-nav.tsx içindeki APP_NAV_ITEMS listesi varsa oraya girişi ekler ve mobil alt menüyü dört sekmeye genişletir; yoksa AppShell nav prop'unu kullanan eski sayfaları yamalar. Tekrar çalıştırılması güvenlidir.

Kurulum

git merge origin/cursor/vardiya-pazari-4957   # çakışma çıkmaz
node scripts/add-pazar-menu.mjs               # menüye "Pazar" girişi

Ardından Supabase SQL Editor'da supabase/migrations/0018_shift_market.sql çalıştırılıp npm run deploy:shifts ile deploy edilir. Migration çalıştırılmadan ilan verilmeye çalışılırsa arayüz sessizce başarısız olmaz, doğrudan bu dosyayı çalıştırmayı söyleyen bir hata gösterir.

Test

npm run build ve tsc --noEmit temiz geçiyor. Kurallar API üzerinden doğrulandı:

  • Taban fiyatın altında teklif → Teklif taban fiyatın altında olamaz: en az 250 ₺
  • Taban fiyata eşit teklif → kabul
  • Kendi ilanına teklif → Kendi ilanınıza teklif veremezsiniz
  • Başkasının ilanında teklif kabulü → Teklifi yalnızca ilan sahibi kabul edebilir
  • Satılmış ilana teklif → Bu ilan artık teklife açık değil

Arayüz tarayıcıda masaüstü ve mobil (390×844) genişliklerinde kontrol edildi. Görsel inceleme sonrası iki düzeltme yapıldı: mantar dokusu/iğne/eğim kontrastı artırıldı ve kıvrılan köşenin not metinlerini kesmesi giderildi. CSS modülüne taşındıktan sonra tüm görsel öğeler yeniden doğrulandı.

Menü betiği hem APP_NAV_ITEMS hem de nav prop düzeninde ayrı ayrı test edildi; ikinci çalıştırmada değişiklik yapmadığı doğrulandı.

To show artifacts inline, enable in settings.

Open in Web Open in Cursor 

cursoragent and others added 8 commits August 5, 2026 14:59
Sürücüler vardiyalarını taban fiyatla ilana koyar, diğer sürücüler
teklif verir. Taban fiyat kuralı API ve veritabanı trigger'ında
birlikte korunur; Supabase yoksa yerel JSON deposuna düşer.

Co-authored-by: murat <muratmuzaffer@users.noreply.github.com>
İlanlar mantar panoya iğnelenmiş post-it notlar olarak görünür.
Kullanıcı kendini seçer, ilana taban fiyatın altına düşmeyen teklif
verir; ilan sahibi teklifi kabul ederek satışı kapatır.

Co-authored-by: murat <muratmuzaffer@users.noreply.github.com>
Mantar dokusu, iğneler ve not eğimleri ekranda ayırt edilemeyecek kadar
hafifti; kontrast ve boyutlar artırıldı. Kıvrılan köşenin alt satırları
kesmesi için içeriğe sağ pay verildi ve post-it'lerde kısa tarih
kullanılarak mobilde satır kaydırma azaltıldı.

Co-authored-by: murat <muratmuzaffer@users.noreply.github.com>
Pazar tipleri market-types.ts'e, post-it stilleri CSS modülüne taşındı;
types.ts, globals.css ve menü dosyalarındaki düzenlemeler geri alındı.
Böylece özellik yalnızca yeni dosyalardan oluşuyor ve farklı bir taban
üzerine çakışmasız birleşiyor. Sayfa, mevcutsa değişimleri uygulayan
fetchScheduleWithSwaps'i otomatik seçer.

Co-authored-by: murat <muratmuzaffer@users.noreply.github.com>
Menü iki farklı şekilde kurulmuş olabiliyor (APP_NAV_ITEMS listesi veya
AppShell nav prop'u); betik hangisi varsa onu yamalar, mobil alt menüyü
dört sekmeye genişletir ve tekrar çalıştırılmaya karşı güvenlidir.

Co-authored-by: murat <muratmuzaffer@users.noreply.github.com>
Co-authored-by: murat <muratmuzaffer@users.noreply.github.com>
01bb6aa, bulut terminalinde çalıştırılan menü betiğinin ürettiği
schedule-client/swap-client değişikliklerini yakalamıştı. Bu dalın
yalnızca yeni dosya eklemesi gerekiyor; aksi halde farklı bir taban
üzerine birleştirmede çakışma çıkar. Menü girişi merge sonrası
scripts/add-pazar-menu.mjs ile eklenir.

Co-authored-by: murat <muratmuzaffer@users.noreply.github.com>
…tory.

Sürücü isim seçimi, kişiye özel IBAN, ilan düzenleme, admin giriş logları ve pazar satışlarının değişim geçmişinde ayrı görünmesi eklendi.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants