Deucritic Story — Kullanım & Teknik Doküman

Bu belge, hem son kullanıcılar hem de geliştirici ekibi için Deucritic Story özelliğinin nasıl çalıştığını, teknik gereksinimleri ve entegrasyon örneklerini içerir.

Özet

Deucritic Story, kullanıcıların 24 saat süreyle görünür olan kısa görsel/video/metin paylaşımları yapmasını sağlar. Amaç kampüs içi anlık paylaşımları arttırmak, tartışmaları ve eleştirileri daha gerçek zamanlı hâle getirmektir.

Süre: 24 saat İçerik: Görsel / Video / Metin

Kullanıcı Kılavuzu

Story Ekleme

  1. Giriş yap: Yalnızca kayıtlı kullanıcılar story atabilir.
  2. Üst çubuktaki Story Ekle (📷) butonuna tıkla.
  3. Kamera açılır ya da galeriden seçim yapılır. Fotoğraf, kısa video veya düz metin eklenebilir.
  4. İsteğe bağlı açıklama gir ve Paylaş tuşuna bas.
  5. Paylaşılan story 24 saat görünür; süresi dolunca otomatik silinir.

Story Görüntüleme

  • Ana sayfanın üst kısmında profil resimleri halkalı biçimde gösterilir.
  • Halka tıklanınca story tam ekran modal olarak açılır; sağ/sol kaydırma ile geçiş yapılır.
  • İzleme sayısı ve varsa izleyen listesi paylaşanın profilinde gösterilir.

Etkileşimler & Gizlilik

Kullanıcılar story'lere emoji reaksiyonu verebilir. Kısa yorum eklenirse bu yorum paylaşan tarafından görüntülenir; tercihe bağlı olarak yorumların herkese açık olması sağlanabilir.

Teknik Tasarım (Backend)

Aşağıdaki bölümde örnek veritabanı tabloları, endpoint'ler ve cron görevleri özetlenmiştir.

Önerilen Veritabanı - Özet

TabloAçıklama
storiesHer story için ana kayıt (user_id, media_url, caption, created_at, expires_at, is_active)
story_viewsKimin hangi story'i ne zaman görüntülediğini tutar
story_reactionsEmoji ve kısa yorumlar
stories tablosu - SQL örneğidir.
Gerçek değildir.
CREATE TABLE `stories` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `user_id` INT NOT NULL,
  `media_url` VARCHAR(255) DEFAULT NULL,
  `caption` TEXT DEFAULT NULL,
  `mediatype` ENUM('image','video','text') DEFAULT 'image',
  `created_at` DATETIME NOT NULL,
  `expires_at` DATETIME NOT NULL,
  `views_count` INT DEFAULT 0,
  `is_active` TINYINT(1) DEFAULT 1,
  INDEX(user_id),
  CONSTRAINT fk_stories_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Backend Endpoints (örnek)

POST /api/stories/upload
  - auth required
  - form-data: file (image/video), caption
  - response: { success: true, story_id }

GET /api/stories/feed
  - returns active stories for a user + follow list

POST /api/stories/{id}/view
  - records view by current user

POST /api/stories/{id}/react
  - body: { emoji: '🔥' , comment: '...' }

DELETE /api/stories/{id}
  - owner or admin can delete story early

Zamanlanmış Temizlik (Cron)

DB'de expires_at < zaman olan kayıtlar için cron job çalıştırılmalı. Örnek:

0 * * * * php /var/www/deucritic/cron/expire_stories.php

expire_stories.php, süresi dolmuş story'leri is_active=0 yapar ve varsa dosyaları obje depodan siler.

Geliştirici Notları & İpuçları

  1. Medya depolama için: S3/Backblaze/Cloud Storage kullan. DB'de sadece URL sakla.
  2. Video küçük klipleri webm/MP4, görüntüler için webp tercih et (performans).
  3. CDN ile edge cache yap, story'ler yoğun erişim alır.
  4. Test için: 24 saat değil 1 dakika olacak şekilde expiry ayarı yapıp qa ortamında test et.
Dosya boyutu & format önerileri

Max image: 10MB (tercih 3-5MB), max video: 20MB (tercih 5-12MB). Desteklenen formatlar: jpg, png, webp, mp4, webm.