Proje: Okul.com.tr CRM · Hub: Okul.com.tr CRM — Domain
CRM Makale Modeli
Article Entity
interface Article {
id: number;
title: string;
slug: string;
long_title: string;
intro: string;
body: string; // HTML içerik (Jodit/TipTap editörden)
show_home_page: string;
show_on_related: string;
sorting: string;
view_count: number;
is_helpfull: string;
user_id: number;
category_id: number;
school_type_id: number;
location_id: number;
created_at: string;
updated_at: string;
deleted_at: string | null;
// Relations
category?: ArticleCategory;
location?: Location;
user?: User; // Yazar
schoolType?: SchoolType;
}ArticleFormValues
interface ArticleFormValues {
title: string;
slug?: string; // otomatik slugify veya manuel
long_title: string;
intro: string;
body: string;
category_id: number;
school_type_id?: number | null;
location_id?: number | null;
user_id?: number | null; // Yazar atama
}getById Include Farkı
- List endpoint:
includes[]=category(köşeli parantez, çoğul) - Show endpoint:
include[]=category&include[]=user(tekil — BE tutarsızlığı)
ArticleCategory
interface ArticleCategory {
id: number;
name: string;
slug: string;
description: string;
deleted_at?: string | null;
}Slug Oluşturma
Form’da slugify() ile Türkçe karakterler ASCII’ye çevrilir. Kullanıcı manuel override edebilir.
Article MediaType/RoleId
- Kapak:
MediaType.ARTICLES,MediaRoleId.ARTICLE_COVER(1) - İçerik görseli:
MediaType.ARTICLES,MediaRoleId.ARTICLE_CONTENT(2)
ArticleComment
interface ArticleComment {
article_id: number;
user_id: number;
user_type_id: number;
commenter_name: string;
commenter_email: string;
comment: string;
status: string; // "0", "1", "2" gibi string değerler
approved_by: number;
approved_at: string | null;
}status değerleri: “0” = Bekliyor, “1” = Onaylandı, “2” = Reddedildi (muhtemelen — API’den kontrol et)
ArticleCommentService Özel Metotlar
approve(id)→PATCH /<id>/approvereject(id)→PATCH /<id>/reject
Related
- media-yukleme-akisi — Makale görseli yükleme
- okul-yorumlari-modeli — Benzer yorum/moderasyon pattern