İletişim Modülleri
Duyuru (announcement)
Modül: src/modules/announcement
Yöneticilerin departmanlara duyuru göndermesi için kullanılır.
Tablolar
announcement
| Alan | Açıklama |
|---|---|
createdBy |
Duyuruyu oluşturan kullanıcı |
departmentId |
Eski tek-departman ilişkisi (geriye uyumluluk için kaldı) |
display |
false iken taslak, true iken yayınlanmış |
AnnouncementDepartments — Yeni çoklu departman sistemi. Bir duyuru birden fazla departmana gönderilebilir. announcementId + departmentId kombinasyonu unique.
Geçiş notu: Eski sistemde duyurunun kendisinde
departmentIdalanı vardı (tek departman). Yeni sistemdeAnnouncementDepartmentsjunction tablosu kullanılıyor. Her iki association da hâlâ modelde tanımlı —as: 'department'(eski) veas: 'departments'(yeni).
Randevu (appointment)
Modül: src/modules/appointment
Öğrencilerin öğretmen veya danışmanlarla randevu alması için kullanılır.
Akış
- Randevu veren kişi (
provider) müsaitlik saatlerini tanımlar (AppointmentAvailabilities) - Öğrenci müsait bir slota randevu talebi oluşturur
- Onay moduna göre otomatik onaylanır (
AUTO) ya da provider manuel onaylar (MANUAL) - Toplantı sonrası devam durumu işaretlenir
Appointments Tablosu
| Alan | Açıklama |
|---|---|
providerId |
Randevu veren kişi (öğretmen/danışman) |
userId |
Randevu alan kişi (öğrenci) |
status |
PENDING, APPROVED, REJECTED, CANCELLED, COMPLETED |
approvalMode |
AUTO (anında onaylanır), MANUAL (provider onaylar) |
attendanceStatus |
UNMARKED, ATTENDED, NO_SHOW |
attendanceMarkedAt / attendanceMarkedBy |
Kim ne zaman yoklama aldı |
referenceId / referenceType |
Başka bir kaynağa bağlantı (opsiyonel) |
AppointmentAvailabilities — Müsaitlik Tanımı
| Alan | Açıklama |
|---|---|
weekly |
JSON — haftalık müsait slotlar: { "monday": { "08:00-09:00": [...] }, ... } |
defaultCapacity |
Her slot için varsayılan kapasite (varsayılan: 1) |
workingHours |
Çalışma saatleri aralığı: { start: "08:00", end: "20:00" } |
slotDuration |
Randevu süresi (dakika, varsayılan: 10) |
AppointmentSettings — Provider Ayarları
Her provider için ayrı ayarlar. allowedDepartments alanı ile hangi departmanların randevu alabileceği kısıtlanabilir. Varsayılan timezone: Europe/Istanbul.
Toplantı (meet)
Modül: src/modules/meet
Çevrimiçi veya yüz yüze toplantı yönetimi.
Meets Tablosu
| Alan | Açıklama |
|---|---|
userId |
Toplantıyı oluşturan |
reWatchMediaId |
Toplantı kaydı (sonradan tekrar izleme) |
referenceId / referenceType |
Başka kaynağa bağlantı |
MeetSummaries — Toplantı Özeti
Toplantı başına bir kayıt (meetId unique).
| Alan | Açıklama |
|---|---|
overview |
Genel özet metni |
details |
JSON — detaylı notlar |
nextSteps |
JSON — toplantı sonrası aksiyonlar |
content |
Ham içerik metni |
docUrl |
Bağlı döküman URL'si |
show |
false ise özet gizlenir |
MeetParticipants ve MeetAttendances
MeetParticipants toplantıya kimin davet edildiğini, MeetAttendances kimin gerçekten katıldığını tutar.
Anket (survey)
Modül: src/modules/survey
Anket ve değerlendirme formu sistemi. Doldurulan ankete bağlı olarak otomatik eylemler tetiklenebilir.
Anket Tipleri
| Tip | Açıklama |
|---|---|
SURVEY |
Standart anket |
EVALUATION |
Değerlendirme formu |
LIVE |
Canlı oturum anketi |
CUSTOM |
Özel kullanım |
Anket Yapısı
Survey
└── SurveySection (Bölüm)
└── SurveyQuestion (Soru)
└── UserSurveyAnswer (Kullanıcı cevabı)
UserSurvey (Kullanıcı-anket ilişkisi)
SurveyParticipant (Kimlere gönderildi: USER veya DEPARTMENT)
Soru Tipleri
TEXT, SELECT, MULTI_SELECT, RADIO, CHECKBOX, DATE, TIME, DATETIME, FILE, IMAGE, VIDEO, AUDIO, LINK
Görüntüleme Modu
pagination alanı sorular nasıl gösterileceğini belirler:
NONE— hepsi tek sayfadaPAGINATION— sayfa sayfaSCROLL— kaydırarak
Otomatik Eylemler (isActionEnabled: true)
Anket tamamlandıktan sonra inceleme yapılırsa (APPROVED veya REJECTED) otomatik eylem tetiklenebilir:
| Eylem | Açıklama |
|---|---|
NONE |
Sadece durum güncellenir |
ASSIGN_FIXED_DEPARTMENT |
Kullanıcı approveDepartmentId / rejectDepartmentId departmanına taşınır |
ASK_DEPARTMENT_ON_REVIEW |
İnceleme anında departman seçilir |
DELETE_USER |
Kullanıcı silinir |
DEACTIVATE_USER |
Kullanıcı pasife alınır |
Bu sistem kayıt/başvuru formları için kullanılır — örneğin öğrenci kayıt anketi onaylandığında kullanıcı otomatik olarak ilgili departmana atanır.
Takvim (calendar)
Modül: src/modules/calendar
Tüm takvim kaynaklarını tek bir liste halinde birleştiren unified takvim sistemi.
getAllCalendars — Birleşik Sorgulama
Tek bir API çağrısıyla dört farklı kaynaktan etkinlikler çekilir ve birleştirilir:
| Kaynak | Koşul |
|---|---|
Calendars tablosu |
USER tipi: sadece o kullanıcı — DEPARTMENT tipi: kullanıcının departmanına ait |
Appointments |
Sadece PENDING veya APPROVED durumundakiler, provider veya kullanıcı ise |
Homeworks |
Sadece isActive: true, deadline tarih etkinliği olarak gösterilir |
Meets |
Kullanıcının oluşturduğu toplantılar |
isSystem Bayrağı
isSystem: true olan takvim etkinlikleri düzenlenemez ve silinemez — servis katmanında kontrol edilir:
if (event.isSystem) throw new ApiError(400, "Sistem etkinliği güncellenemez");
Sistem etkinlikleri yalnızca programatik olarak oluşturulur.