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

IDSabitKullanım
1ARTICLE_COVERMakale kapak görseli
2ARTICLE_CONTENTMakale içerik görseli
3SCHOOL_PROFILEOkul profil fotoğrafı
4SCHOOL_GALLERYOkul galeri
5USER_PROFILEKullanıcı profil
6COLLEGE_THUMBKolej küçük görsel
7COLLEGE_COVERKolej kapak
8COLLEGE_CONTENTKolej içerik
9GALLERY_LISTINGGaleri liste
10GALLERY_CONTENTGaleri içerik
11ANNOUNCEMENT_CONTENTDuyuru içerik
12SCHOLARSHIP_COVER_AND_CONTENTBurs kapak ve içerik
13SCHOLARSHIP_CONTENTBurs içerik
14VIDEOVideo
15CUSTOMER_AGREEMENTMüşteri sözleşme
16SCHOOL_LOGOOkul logo
17ACHIEVEMENTS_ANNOUNCEMENTBaşarı duyurusu
18EVENTS_ANNOUNCEMENTEtkinlik görseli
19DOCUMENTS_AGREEMENTDö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