Proje: Okul.com.tr CRM · Hub: Okul.com.tr CRM — Conventions
CRM Media Yükleme Akışı
İki Adımlı Yükleme
1. uploadTemporary(file, mediaType) → temp_path (string)
2. move({ path: temp_path, row_id, role_id, ... }) → Media
Dosya önce geçici storage’a gider, sonra kalıcı olarak bağlanır. Bu şekilde form kayıt edilmeden önce dosya önizleme yapılabilir.
MediaService.upload() bu iki adımı tek metodda birleştirir (convenience wrapper).
MediaType Enum
ARTICLES = 'articles'
SCHOOLS = 'schools'
USERS = 'users'
COLLEGES = 'colleges'
GALLERIES = 'galleries'
ANNOUNCEMENTS = 'announcements'
SCHOLARSHIPS = 'scholarships'
CUSTOMER_AGREEMENTS = 'customer_agreements'
ACHIEVEMENTS = 'achievements'
ANNOUNCEMENT_EVENTS = 'announcement_events' // ← Events için
AGREEMENT_DOCUMENTS = 'agreement_documents'MediaRoleId Enum
| ID | Sabit | Kullanım |
|---|---|---|
| 1 | ARTICLE_COVER | Makale kapak görseli |
| 2 | ARTICLE_CONTENT | Makale içerik görseli |
| 3 | SCHOOL_PROFILE | Okul profil fotoğrafı |
| 4 | SCHOOL_GALLERY | Okul galeri |
| 5 | USER_PROFILE | Kullanıcı profil |
| 6 | COLLEGE_THUMB | Kolej küçük görsel |
| 7 | COLLEGE_COVER | Kolej kapak |
| 8 | COLLEGE_CONTENT | Kolej içerik |
| 9 | GALLERY_LISTING | Galeri liste |
| 10 | GALLERY_CONTENT | Galeri içerik |
| 11 | ANNOUNCEMENT_CONTENT | Duyuru içerik |
| 12 | SCHOLARSHIP_COVER_AND_CONTENT | Burs kapak ve içerik |
| 13 | SCHOLARSHIP_CONTENT | Burs içerik |
| 14 | VIDEO | Video |
| 15 | CUSTOMER_AGREEMENT | Müşteri sözleşme |
| 16 | SCHOOL_LOGO | Okul logo |
| 17 | ACHIEVEMENTS_ANNOUNCEMENT | Başarı duyurusu |
| 18 | EVENTS_ANNOUNCEMENT | Etkinlik görseli |
| 19 | DOCUMENTS_AGREEMENT | Döküman sözleşme |
Media Silme
MediaService.delete(id, roleId)
// DELETE /admin/media/{id}?role_id={roleId}role_id query param olarak gönderilmeli — API silmek için hem id hem role_id ister.
Galeri Sıralama
MediaService.sort({ role_id, items: [{id, sort}] }) — @dnd-kit/core + @dnd-kit/sortable ile drag-and-drop sıralama sonrası çağrılır.
getMediaOriginalUrl Helper
export const getMediaOriginalUrl = (media: Media): string => {
// full_url'deki filename'i original/filename'e çevirir
return url.replace(name, `original/${name}`);
};API’nin full_url alanı spec içermez; orijinal boyut için bu helper kullanılır.
Jodit Editor Entegrasyonu
MediaService.createJoditUploader() — Jodit’in default base64 uploader’ını devre dışı bırakıp API tabanlı upload için hazırlar. Ancak gerçek upload logic’i ayrıca implemente edilmeli.
Form’da Geçici URL’ler
Create/edit formlarında media henüz kaydedilmeden önce:
temp_media_urls: string[]— FormValues’ta yer alır- Sunucuya form kaydedilirken bu URL’ler
move()çağrısıyla kalıcı hale getirilir
Related
- duyuru-etkinlik-modeli — Etkinliklerde MediaType.ANNOUNCEMENT_EVENTS ve MediaRoleId.EVENTS_ANNOUNCEMENT (18) kullanımı
- servis-katmani — Genel servis pattern