Soru Bankası, Sosyal Medya ve Dış API
Soru Bankası (question_bank)
Modül: src/modules/question_bank
Kullanıcıların çoktan seçmeli sorular oluşturup test formatında düzenleyebildiği, diğer öğretmenlerle paylaşabildiği ve InDesign için dışa aktarabildiği modül. Arayüzde "Dizgici" olarak adlandırılır.
Tablolar
QuestionBanks
| Alan | Açıklama |
|---|---|
userId |
Sahibi |
testAdi |
Test adı |
kategori |
Kategori etiketi (nullable) |
questionCount |
Soru sayısı |
content |
JSONB — tam test içeriği (soru metinleri, şıklar, görseller) |
QuestionBankShares
| Alan | Açıklama |
|---|---|
questionBankId |
Orijinal test |
ownerUserId |
Paylaşan kullanıcı |
recipientUserId |
Paylaşılan kullanıcı |
allowEditing |
true ise alıcı orijinali doğrudan düzenleyebilir |
recipientDraft |
allowEditing: false ise alıcının yaptığı değişiklikler burada saklanır (snapshot) |
Erişim Modeli
resolveAccessibleQuestionBank(id, userId) iki yolu destekler:
- owner —
QuestionBanks.userId = userId→ orijinal kayıt üzerinde tam kontrol - shared —
QuestionBankShares.recipientUserId = userId→allowEditing: trueise orijinali değiştir;falseise değişikliklerirecipientDraftolarak kaydet
Liste görünümünde sahip ve paylaşılan testler birleştirilerek tek liste döner (ownedItems + sharedItems).
İçerik Yapısı (JSONB content)
{
"test_adi": "...",
"kategori": "...",
"soru_sayisi": 20,
"sorular": [
{
"sira": 1,
"soru_metni": "...",
"questionContent": { "version": 1, "blocks": [...] },
"templateType": "classic_vertical",
"choiceLayout": "vertical",
"secenek_sayisi": 5,
"siklar": { "A": "...", "B": "...", "C": "...", "D": "...", "E": "..." },
"choiceContents": { "A": { "version": 1, "blocks": [...] }, ... },
"dogru_cevap": "C",
"image": null,
"sketchElements": null
}
]
}
Şablon tipleri: classic_vertical, image_with_caption, horizontal_choices
Şık düzeni: vertical, horizontal, staggered
InDesign Export
downloadQuestionBank → buildQuestionBankZip() → adm-zip ile .zip döner.
ZIP içeriği:
manifest.json— soru verisi (görseller base64'ten dosyaya çıkarılır)YesAkademi_Soru_Olusturucu.jsx— Adobe InDesign çalıştırılabilir script
JSX scripti InDesign'da manifest.json seçilerek çalıştırılır. 190×270mm sayfa, 2 sütunlu düzen, font sıralaması Cambria → Times New Roman → Arial → Calibri, matematiksel semboller için Cambria Math fallback, otomatik cevap anahtarı sayfası üretir.
Paylaşım Kapsamı
listShareCandidates sadece setting.teacherDepartmentId departmanı ve alt departmanlarındaki kullanıcıları döner. Öğrencilere paylaşım yapılamaz — yalnızca öğretmen departmanındaki diğer kullanıcılar aday listesine girer.
Sosyal Medya (social)
Route: src/routes/social.route.js
Servis: src/services/social.service.js
Kurumsal sosyal medya içeriği üretimi için kullanılan modül. Marka kimliği yönetimi ve AI destekli içerik üretimi içerir.
İzinler
| İzin | Endpoint |
|---|---|
social_list |
Brand ve içerik listeleri |
social_brand_manage |
Marka oluştur/güncelle/sil, logo renk analizi, medya yükle |
social_provider_manage |
API provider konfigürasyonu |
social_generate_text |
AI metin üretimi |
social_generate_image |
AI görsel üretimi |
social_generate_video |
AI video üretimi |
Marka Yönetimi
Her kullanıcının markası (kurumsal kimlik) sisteme kaydedilir. Logo yükleme ve renk analizi (analyzeBrandLogoColors) desteklenir. Üretilen içerikler GeneratedContents tablosunda saklanır.
İçerik Üretimi
| Endpoint | Açıklama |
|---|---|
POST /generate/text |
AI ile sosyal medya metni üretir |
POST /generate/image |
AI ile görsel üretir |
POST /generate/video |
Video üretim job'ı başlatır |
GET /generate/video/:jobId |
Video üretim durumunu sorgular |
Provider konfigürasyonu (/providers) ile her kullanıcı hangi AI servisini kullanacağını ayarlayabilir.
Dış API (external-api)
Modül: src/modules/external-api
Harici sistemlerin YesV3 verilerine erişmesi için API anahtarı tabanlı ayrı bir endpoint grubu.
Kimlik Doğrulama
src/modules/external-api/middlewares/api-key.middleware.js
İki yoldan API anahtarı kabul edilir:
x-api-keyheaderapiKeyquery parametresi
Anahtar process.env.EXTERNAL_API_KEY ile karşılaştırılır. Eşleşmezse 401 döner.
Endpoint'ler
| Route | Açıklama |
|---|---|
GET /external-api/students |
Öğrenci listesi |
POST /external-api/register |
Yeni kullanıcı kaydı |
GET /external-api/cafe/user |
Kafeterya kullanıcı bilgisi |
GET /external-api/health |
Servis sağlık kontrolü |
Ortam Değişkeni
EXTERNAL_API_KEY=harici-api-anahtari
Bu değişken tanımlı değilse dış API endpointleri çalışmaz.
Kafeterya Menüsü (cafe-menu)
Servis: src/services/cafe-menu.service.js
Okul kantini/kafeterya için ayrı bir menü/katalog sistemi. Ürün listesi yönetimi ve QR tabanlı ödeme akışı içerir. Dış API'nin /cafe/user endpoint'i bu modülle entegre çalışır.